凤仙郡天下杂谈|图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中,Python( 二 )
其中5*5的矩阵称为核 , 针对原始图像内的像素点 , 采用核进行处理 , 得到结果图像 。
提取1/25可以将核转换为如下形式:
2.代码
Python调用OpenCV实现均值滤波的核心函数如下:
result=cv2.blur(原始图像,核大小)
其中 , 核大小是以(宽度 , 高度)表示的元祖形式 。 常见的形式包括:核大小(3 , 3)和(5 , 5) 。
文章图片
代码如下所示:
#encoding:utf-8importcv2importnumpyasnpimportmatplotlib.pyplotasplt#读取图片img=cv2.imread('test01.png')source=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#均值滤波result=cv2.blur(source,(5,5))#显示图形titles=['SourceImage','BlurImage']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()
输出结果如下图所示:
核设置为(10 , 10)和(20 , 20)会让图像变得更加模糊 。
如果设置为(1 , 1)处理结果就是原图 , 核中每个权重值相同 , 称为均值 。
文章图片
方框滤波
方框滤波和均值滤波核基本一致 , 区别是需不需要均一化处理 。 OpenCV调用boxFilter()函数实现方框滤波 。 函数如下:
result=cv2.boxFilter(原始图像,目标图像深度,核大小,normalize属性)
其中 , 目标图像深度是int类型 , 通常用“-1”表示与原始图像一致;核大小主要包括(3 , 3)和(5 , 5) , 如下所示 。
文章图片
normalize属性表示是否对目标图像进行归一化处理 。 当normalize为true时需要执行均值化处理 , 当normalize为false时 , 不进行均值化处理 , 实际上为求周围各像素的和 , 很容易发生溢出 , 溢出时均为白色 , 对应像素值为255 。
文章图片
在图像简单平滑中 , 算法利用卷积模板逐一处理图像中每个像素 , 这一过程可以形象地比作对原始图像的像素一一进行过滤整理 , 在图像处理中把邻域像素逐一处理的算法过程称为滤波器 。 平滑线性滤波器的工作原理是利用模板对邻域内像素灰度进行加权平均 , 也称为均值滤波器 。
代码如下所示:
#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表示进行归一化处理 , 此时与均值滤波相同 , 输出结果如下图所示:
文章图片
下面是图像左上角处理前后的像素结果:
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()
推荐阅读
- 天下快谈|网友:这下川普要慌了,又一好消息传来!美国巨头突然“认怂”
- 凤仙郡天下杂谈|“百相生”开启社交4.0时代,寻找三观一致的你
- 少年一梦|绝招在手,天下我有,网络货运六大杀手锏
- 极速说天下|Pro尊享版来了?或改名“Ultra”立足中高端,本月发布,K30
- 潮车行天下|玛莎拉蒂海王星全新引擎震撼登场,首次引进F1尖端技术
- 搞机研究社|安兔兔发布6月份android手机性能榜:第一个榜单是骁龙865的天下
- 天下有警视频|却对中国无计可施?这一优点太重要了,为啥美国能搞垮四个强国
- 太平洋电脑网|荣耀X10Max、荣耀30青春版今天下午登场,潮流科技一触即发
- 「腾讯」腾讯VS老干妈的大瓜:假公章骗了企鹅;支付宝:希望天下无假章
- 腾讯■腾讯遭遇诈骗,支付宝:希望天下无假章!