• 机器学习进阶-图像金字塔与轮廓检测-图像金字塔-(**高斯金字塔) 1.cv2.pyrDown(对图片做向下采样) 2.cv2.pyrUp(对图片做向上采样)


    1.cv2.pyrDown(src)  对图片做向下采样操作,通常也可以做模糊化处理

    参数说明:src表示输入的图片

    2.cv2.pyrUp(src) 对图片做向上采样操作

    参数说明:src表示输入的图片

    高斯金字塔:分为两种情况:一种是向下采样,一种是向上采样

    下采样的原理:先与Gi进行高斯卷积即高斯滤波,再将所有偶数行和列去除,实现行和列维度缩减的目的

    代码:

    第一步:读入图片

    第二步:使用cv2.pyrDown进行高斯金字塔的下采样

    第三步:使用自己的步骤做高斯金字塔的下采样,先对图像作高斯滤波,即与高斯内核卷积

    第四步:将所有偶数行去除

    第五步:将所有偶数列去除

    import cv2
    import numpy as np
    
    # 第一步:读入图片
    img = cv2.imread('AM.png', 0)
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 第二步:使用cv2.pyrDown进行金字塔的下采样
    down = cv2.pyrDown(img)
    cv2.imshow('down', down)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 按照步骤编写
    # 第三步:进行高斯滤波操作,即进行高斯卷积
    guassin = cv2.GaussianBlur(img, (5, 5), 1)
    # 第四步:去除矩阵的偶数行
    guassin_x = []
    rows, columns = guassin.shape[:2]
    for i in range(rows):
        if i % 2 == 1:
              guassin_x.append(guassin[i, :])
    
    guassin_x = np.array(guassin_x)
    # 第五步:去除矩阵的偶数列
    guassin_y = []
    for i in range(columns):
        if i % 2 == 1:
            guassin_y.append(guassin_x[:, i])
    
    guassin_y = np.array(guassin_y).T
    cv2.imshow('guassin', guassin_y)
    cv2.waitKey(0)

    高斯金字塔进行上采样操作, 第一步先对使用0进行填充,扩大其维度,再进行高斯滤波,对滤波的结果乘与4,获得其近似值

    代码:

    第一步:图片读入

    第二步:使用cv2.pyrUp对图像进行放大操作

    第三步:使用自己的方法,先给偶数行加zeros

    第四步:给偶数列加zeros

    第五步:进行高斯滤波,将像素点分散开,最后乘于4,做近似截断处理

    import cv2
    import numpy as np
    
    # 第一步读取图片
    img = cv2.imread('AM.png', 0)
    print(img.shape)
    # 第二步:使用cv2.pyrUp进行图像金字塔的上采样
    Up = cv2.pyrUp(img)
    cv2.imshow('up', Up)
    cv2.waitKey(0)

    # 第三步:使用自己的方法计算,在偶数行插入zero
    rows_zeros = []
    rows, columns = img.shape[:2]
    
    for i in range(2*rows):
        if i % 2 == 1:
            rows_zeros.append(np.zeros((1, columns)).astype(int).ravel())
        else:
            rows_zeros.append(img[int(i/2), :])
    
    rows_zeros = np.array(rows_zeros)
    
    # 第四步:在偶数列插入zeros
    columns_zeros = []
    for i in range(2*columns):
        if i % 2 == 1:
            columns_zeros.append(np.zeros((rows*2, 1)).astype(int).ravel())
        else:
            columns_zeros.append(rows_zeros[:, int(i/2)])
    
    
    columns_zeros = np.array(columns_zeros).T
    
    
    # 第五步:进行高斯卷积操作,乘于4倍后做近似处理
    add_img_columns_g = np.round(cv2.GaussianBlur(columns_zeros, (5, 5), 1)).astype(int) * 4
    frames = []
    # 对于大于255的像素做截断操作
    for i in range(add_img_columns_g.shape[0]):
        frame = []
        for j in add_img_columns_g[i, :]:
            if j > 255:
                frame.append(255)
            else:
                frame.append(j)
        frames.append(frame)
    frames = np.array(frames)
  • 相关阅读:
    Delphi操作ACCESS技巧集
    Delphi ADOQuery
    Delphi 与SQL编程
    delphi Sqlite
    Delphi 2010下使用sqlitesimpledelphi连接SQLite数据库及中文乱码问题的解决
    Java并发指南13:Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
    Java并发指南12:深度解读 java 线程池设计思想及源码实现
    Java并发指南11:解读 Java 阻塞队列 BlockingQueue
    Java并发指南10:Java 读写锁 ReentrantReadWriteLock 源码分析
    Java并发指南9:AQS共享模式与并发工具类的实现
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/10401222.html
Copyright © 2020-2023  润新知