摘要:文章目录图像滤波实验要求实现创建高斯滤波卷积核示例零填充示例代码结果图像滤波实验要求实现卷积基于实现函数完成用滤波器对灰度图像进行滤波,返回滤波后的图像,即要求滤波后的图像与原始输入图像具有相同的尺寸,滤波器每个维度的大小为奇数。
实现卷积
基于Python实现函数完成用滤波器h对灰度图像img0进行滤波,返回
滤波后的图像img1,即
i m g 1 = m y I m a g e F i l t e r ( i m g 0 , h ) img1 = myImageFilter(img0, h) img1=myImageFilter(img0,h)
要求滤波后的图像img1与原始输入图像具有相同的尺寸,滤波器h每个维
度的大小为奇数(2k + 1, k = 1, 2, · · · )。在进行图像填充的时候可以使用
课堂上讲过的任何一种填充方式均可。可以调用Python中NumPy的填充函
数,但不能调用任何包括convolve, correlate, fftconvolve等函数(仅
可以使用他们来与你自己的实现结果进行对比)。函数的实现需采用矢量
化,关于矢量化的例子可参考https://www.pythonlikeyoumeanit.com/
Module3_IntroducingNumpy/VectorizedOperations.html.
(提示:尽可能减少for循环的个数)
分析步骤:
高斯滤波器将中心像素周围的像素按照高斯分布加权平均进行平滑化。
按下面的高斯分布公式计算权值:
g ( x , y , σ ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 g(x,y,/sigma) = /frac{1}{2/pi/sigma^2}e^{-/frac{x^2+y^2}{2/sigma^2}} g(x,y,σ)=2πσ21e−2σ2x2+y2
并对权值 g g g进行归一化操作。
标准差 σ /sigma σ=1.3的8−近邻高斯滤波器如下:
k = 1 16 [ 1 2 1 2 4 2 1 2 1 ] k = /frac{1}{16} /begin{bmatrix} 1 & 2 &1 // 2 & 4 & 2 // 1 & 2 & 1 // /end{bmatrix} k=161⎣⎡121242121⎦⎤
def kernal_maker(k_size, sigma): """ Create a Gaussian kernel :param k_size:size of the Gaussian kernal :param sigma:standard deviation :return:Gaussian kernal """ pad = k_size // 2 k = np.zeros((k_size, k_size), dtype=np.float) for x in range(-pad, -pad + k_size): for y in range(-pad, -pad + k_size): k[y + pad, x + pad] = np.exp(-(x ** 2 + y ** 2) / (2 * (sigma ** 2))) k /= (2 * np.pi * sigma * sigma) k /= k.sum() return k
由于图像的长宽可能不是滤波器大小的整数倍,因此我们需要在图像的边缘补0。
# Zero padding k_size = k.shape[0] pad = k_size // 2 out = np.zeros((h + pad * 2, w + pad * 2, c), dtype=np.float) out[pad: pad + h, pad: pad + w] = img0.copy().astype(np.float)
import numpy as npimport cv2 as cvdef myImageFilter(img0, k): # YOUR CODE HERE """ Fltering using a given kernel k :param img0:image :param k: kernal :return:filtered image """ if len(img0.shape) == 3: h, w, c = img0.shape else: img0 = np.expand_dims(img0, axis=-1) h, w, c = img0.shape # Zero padding k_size = k.shape[0] pad = k_size // 2 out = np.zeros((h + pad * 2, w + pad * 2, c), dtype=np.float) out[pad: pad + h, pad: pad + w] = img0.copy().astype(np.float) # filtering tmp = out.copy() for y in range(h): for x in range(w): for i in range(c): out[pad + y, pad + x, i] = np.sum(k * tmp[y: y + k_size, x: x + k_size, i]) out = np.clip(out, 0, 255) out = out[pad: pad + h, pad: pad + w].astype(np.uint8) return outdef kernal_maker(k_size, sigma): """ Create a Gaussian kernel :param k_size:size of the Gaussian kernal :param sigma:standard deviation :return:Gaussian kernal """ pad = k_size // 2 k = np.zeros((k_size, k_size), dtype=np.float) for x in range(-pad, -pad + k_size): for y in range(-pad, -pad + k_size): k[y + pad, x + pad] = np.exp(-(x ** 2 + y ** 2) / (2 * (sigma ** 2))) k /= (2 * np.pi * sigma * sigma) k /= k.sum() return kif __name__ == "__main__": # Read image # image = cv.imread("../image/example.png") image = cv.imread("../image/example_gray.png") cv.imshow("input", image) # Create Gaussian kernel kernal = kernal_maker(k_size=3, sigma=1.3) # Gaussian Filter image_filtered = myImageFilter(img0=image, k=kernal) # Save result # cv.imwrite("out.jpg", image_processed) cv.imshow("output", image_filtered) cv.waitKey(0) cv.destroyAllWindows()
input
output
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/122538.html
摘要:但是考虑一个双峰图像简单来说,双峰图像是一个直方图有两个峰值的图像。对于非双峰图像,二值化将不准确。在第三种情况下,我使用高斯核过滤图像以去除噪声,然后应用阈值。 ...
摘要:所学习的滤波器组被期望为编码一些合适数量类别的普通图像编码判别信息在不同视觉等级分层提取图案。特别是,在新框架的每一层,可共享的滤波器共同学习那些相似模式的类。除了减小特征维度,共享滤波器也可以导致特征更鲁棒。 今天我们来谈谈深度学习过程中的一些判别与共享关系。这也是一篇不错的paper(来自模式识别),并且通过实现和改进真的可以有一个较好的提升。在图像表示中,为了编码类的相关性和类的具体信...
摘要:如果参考帧的每个块之间就不连续的话,也会被复制到运动补偿的图像块内,采用的变换可以降低这种不连续的现象,但是我们还是需要一个去块滤波器来帮我们降低这种不连续现象,实现块与块之间的平滑过渡。 ...
摘要:能够有效去除椒盐噪声黑白点叠加在图像上去除噪声的同时,比较好地保留边缘空间域锐化滤波器高通滤波器锐化处理的主要目的是为了突出图像的边缘信息,增强图像的轮廓特征,以便于人眼的观察和机器的识别。 ...
摘要:卷积与一维信号一样,图像也可以使用各种低通滤波器,高通滤波器等进行滤波有助于消除噪声,模糊图像等滤波器有助于找到边缘图片将内核与图像进行卷积应用对图像进行平均过滤。它只取内核区域下所有像素的平均值并替换中心元素。 Smoothing Images 1 2D卷积 与一维信号一样,图像也可以使用各种低通滤波器(LPF),高通滤波器(HPF)等进行滤波.LPF有助于消除噪声,模糊图像等.H...
阅读 990·2021-10-14 09:43
阅读 1491·2021-09-30 09:47
阅读 4039·2021-09-09 09:33
阅读 2255·2019-08-29 17:15
阅读 2231·2019-08-29 16:21
阅读 808·2019-08-29 15:06
阅读 2466·2019-08-29 13:25
阅读 435·2019-08-29 11:32