凤仙郡天下杂谈|图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中,Python( 五 )


#encoding:utf-8importcv2importnumpyasnpimportmatplotlib.pyplotasplt#读取图片img=cv2.imread('test01.png')source=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#方框滤波result=cv2.boxFilter(source,-1,(5,5),normalize=1)#显示图形titles=['SourceImage','BoxFilterImage']images=[source,result]foriinxrange(2):plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')plt.title(titles[i])plt.xticks([]),plt.yticks([])plt.show()
代码中使用5*5的核 , normalize=1表示进行归一化处理 , 此时与均值滤波相同 , 输出结果如下图所示:
凤仙郡天下杂谈|图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中,Python
文章图片
下面是图像左上角处理前后的像素结果:
print(source[0:3,0:3,0])#[[115180106]#[8315272]#[555855]]print(result[0:3,0:3,0])#[[929078]#[928977]#[828072]]
如果省略参数normalize , 则默认是进行归一化处理 。 如果normalize=0则不进行归一化处理 , 像素值为周围像素之和 , 图像更多为白色 。
#encoding:utf-8importcv2importnumpyasnpimportmatplotlib.pyplotasplt#读取图片img=cv2.imread('test01.png')source=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#方框滤波result=cv2.boxFilter(source,-1,(5,5),normalize=0)#显示图形titles=['SourceImage','BoxFilterImage']images=[source,result]foriinxrange(2):plt.subplot(1,2,i+1),plt.imshow(images[i],'gray')plt.title(titles[i])plt.xticks([]),plt.yticks([])plt.show()
输出结果如下图所示:
凤仙郡天下杂谈|图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中,Python
文章图片
上图很多像素为白色 , 因为图像求和结果几乎都是255 。 如果设置的是2*2矩阵 , 只取四个像素结果要好些 。
result=cv2.boxFilter(source,-1,(2,2),normalize=0)
凤仙郡天下杂谈|图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中,Python
文章图片
凤仙郡天下杂谈|图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中,Python
文章图片
高斯滤波
为了克服简单局部平均法的弊端(图像模糊) , 目前已提出许多保持边缘、细节的局部平滑算法 。 它们的出发点都集中在如何选择邻域的大小、形状和方向、参数加平均及邻域各店的权重系数等 。
图像高斯平滑也是邻域平均的思想对图像进行平滑的一种方法 , 在图像高斯平滑中 , 对图像进行平均时 , 不同位置的像素被赋予了不同的权重 。 高斯平滑与简单平滑不同 , 它在对邻域内像素进行平均时 , 给予不同位置的像素不同的权值 , 下图的所示的3*3和5*5领域的高斯模板 。
凤仙郡天下杂谈|图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中,Python
文章图片
【凤仙郡天下杂谈|图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中,Python】高斯滤波让临近的像素具有更高的重要度 , 对周围像素计算加权平均值 , 较近的像素具有较大的权重值 。 如下图所示 , 中心位置权重最高为0.4 。
凤仙郡天下杂谈|图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中,Python
文章图片