图像平滑是图像增强的一种,在图像产生、传输和复制过程中,常常会因为多方面原因而被噪声干扰或出现数据丢失,降低了图像的质量(某一像素,如果它与周围像素点相比有明显的不同,则该点被噪声所感染)。这就需要对图像进行一定的增强处理以减小这些缺陷带来的影响。
最常用的就是线性滤波器,公式如下
平均滤波器
img = cv2.imread('../resource/bobby.jpg',0)
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
plt.subplot(1,2,1)
plt.imshow(img,cmap = 'gray')
plt.title('origin')
plt.subplot(1,2,2)
plt.imshow(dst,cmap='gray')
plt.title('averag')
plt.show()
或使用cv2.blur(img,(ksize,ksize)) 函数
平均滤波通过求均值的方法降低图像中噪声影响,降低图像对比度。但也会使图像变得模糊,特别是边缘和细节处。且邻域越大,去噪能力增强但是模糊程度更严重。
高斯滤波
高斯滤波也是邻域平均思想对图像平滑的一种,只不过不同位置的像素被赋予了不同的权重。所以变成了加权均值。
cv2.GaussianBlur(img,(ksize,ksize),0) 0是根据窗口大小ksize来计算sigma值
中值滤波
邻域平均法去噪的同时会使边界变得模糊,中值滤波是非线性处理方法,在去噪的同时可以兼顾边界信息的保留。
选用含奇数点的窗口,将窗口所含像素值进行排序,选取中值来替代改点灰度值。不同形状的窗口会产生不同效果的滤波。方形和圆形适合轮廓较长的物体,十字形窗口对尖角形物体效果最好。
中值滤波对于消除孤立点和线段的干扰十分有用,尤其是对于二进噪声,但对消除高斯噪声的影响效果不佳。
cv2.medianBlur(img,ksize)
双边滤波
参考文章 双边滤波在同时使用空间高斯权重和灰度值相似性高斯权重。空间高斯函数确保只对邻近区域内的像素才对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相近才会被用来做模糊运算。
blur = cv2.bilateralFilter(img,9,75,75)
plt.subplot(1,2,1)
plt.imshow(img,cmap = 'gray')
plt.title('origin')
plt.subplot(1,2,2)
plt.imshow(blur,cmap='gray')
plt.title('blur')
plt.show()
|