用python numpy索引的方法实现上采样和下采样,避免cv2自带函数造成的下采样再上采样后与原图像大小不一致问题。

下采样的过程可以理解为:

        1、先将图像进行一次高斯滤波。(个人理解是将图像进行涂抹,使图像边缘模糊) 

        2、从图像第一行或者第二行开始,每隔一行取一行,每隔一列取一列。

        3、把取出的数据组成新的图像。

上采样的过程可以理解为:

        1、先创建一个大小和原图像相同的0数组。

        2、从0数组第一行或者第二行开始,每隔一行取一行,每隔一列取一列。

        3、把取出的位置上的值替换为下采样图像对应的值.

        4、最后进行一次高斯滤波。(个人理解也是涂抹,利用填充的像素值把0涂抹,使图像近似恢复成原图像。)

最后上代码(测试图像在最后):

import cv2
import numpy as np

A = cv2.imread("D:/TestImg/infrared8.bmp",0)
A = cv2.GaussianBlur(A, (5, 5), 1)
G_DA = A[1::2,1::2]
G_UA = np.zeros(A.shape)
G_UA[1::2,1::2] = G_DA
G_UA = cv2.GaussianBlur(A, (5, 5), 1)
cv2.imshow('A',A)
cv2.imshow('G_UA',G_UA)
cv2.imshow('Lapalian',A-G_UA)
cv2.waitKey(0)
cv2.destroyAllWindows()

这是代码中用的图像 

 这个方法可以避免cv2中的cv2.pyrDown 和 cv2.pyrUp先下采样再上采样造成的与原图像大小不一致问题。


版权声明:本文为weixin_43276666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。