zoukankan      html  css  js  c++  java
  • 机器学习进阶-图像金字塔与轮廓检测-图像金字塔-(**高斯金字塔) 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)
  • 相关阅读:
    Candy leetcode java
    Trapping Rain Water leetcode java
    Best Time to Buy and Sell Stock III leetcode java
    Best Time to Buy and Sell Stock II leetcode java
    Best Time to Buy and Sell Stock leetcode java
    Maximum Subarray leetcode java
    Word Break II leetcode java
    Word Break leetcode java
    Anagrams leetcode java
    Clone Graph leetcode java(DFS and BFS 基础)
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/10401222.html
Copyright © 2011-2022 走看看