《Python 图像处理.docx》由会员分享,可在线阅读,更多相关《Python 图像处理.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Python图像处理|杨秀璋责编|夕颜题图|视觉中国出品|CSDNboke本篇文章主要讲解Python调用OpenCV实现图像平滑包括四个算法均值滤波、方框滤波、高斯滤波以及中值滤波。全文均是根底知识祈望对您有所帮助。知识点如下1.图像平滑2.均值滤波3.方框滤波4.高斯滤波5.中值滤波PS本文介绍图像平滑想让大众先看看图像处理的效果后面还会补充一些根底知识供大众学习。文章参考自己的boke及网易云课堂李大洋教师的讲解强烈推荐大众学习。图像平滑1.图像增强图像增强是对图像进展处理使其比原始图像更合适于特定的应用它需要与实际应用相结合。对于图像的某些特征如边缘、轮廓、比照度等图像增强是进展强调或
2、者锐化以便于显示、观察或者进一步分析与处理。图像增强的方法是因应用不同而不同的研究内容包括(参考课件以及左飞的?数字图像处理?)2.图像平滑图像平滑是一种区域增强的算法平滑算法有邻域平均法、中指滤波、边界保持类滤波等。在图像产生、传输以及复制经过中常常会因为多方面原因此被噪声干扰或者出现数据丧失降低了图像的质量某一像素假如它与周围像素点相比有明显的不同那么该点被噪声所感染。这就需要对图像进展一定的增强处理以减小这些缺陷带来的影响。简单平滑-邻域平均法3.邻域平均法图像简单平滑是指通过邻域简单平均对图像进展平滑处理的方法用这种方法在一定程度上消除原始图像中的噪声、降低原始图像比照度的作用。它利用
3、卷积运算对图像邻域的像素灰度进展平均进而到达减小图像中噪声影响、降低图像比照度的目的。但邻域平均值主要缺点是在降低噪声的同时使图像变得模糊十分在边缘以及细节处而且邻域越大在去噪才能增强的同时模糊程度越严重。首先给出为图像增加噪声的代码。#-*-coding:utf-8-*-importcv2importnumpyasnp#读取图片imgcv2.imread(test.jpg,cv2.IMREAD_UNCHANGED)rows,cols,chnimg.shape#加噪声foriinrange(5000):xnp.random.randint(0,rows)ynp.random.randint(0
4、,cols)imgx,y,:255cv2.imshow(noise,img)#等待显示cv2.waitKey(0)cv2.destroyAllWindows()输出结果如下所示均值滤波1.原理均值滤波是指任意一点的像素值都是周围N*M个像素值的均值。例如下列图中红色点的像素值为蓝色背景区域像素值之以及除25。其中红色区域的像素值均值滤波处理经过为(19725106156159)(14940107571)(163198*226*223156)(2223768193157)(42722504175)/25其中5*5的矩阵称为核针对原始图像内的像素点采用核进展处理得到结果图像。提取1/25可以将核转
5、换为如下形式2.代码Python调用OpenCV实现均值滤波的核心函数如下resultcv2.blur(原始图像,核大小)其中核大小是以宽度高度表示的元祖形式。常见的形式包括核大小33以及55。代码如下所示#encoding:utf-8importcv2importnumpyasnpimportmatplotlib.pyplotasplt#读取图片imgcv2.imread(test01.png)sourcecv2.cvtColor(img,cv2.COLOR_BGR2RGB)#均值滤波resultcv2.blur(source,(5,5)#显示图形titlesSourceImage,Blur
6、Imageimagessource,resultforiinxrange(2):plt.subplot(1,2,i1),plt.imshow(imagesi,gray)plt.title(titlesi)plt.xticks(),plt.yticks()plt.show()输出结果如下列图所示核设置为1010以及2020会让图像变得更加模糊。假如设置为11处理结果就是原图核中每个权重值一样称为均值。方框滤波方框滤波以及均值滤波核根本一致区别是需不需要均一化处理。OpenCV调用boxFilter()函数实现方框滤波。函数如下resultcv2.boxFilter(原始图像,目的图像深度,核大小
7、,normalize属性)其中目的图像深度是int类型通常用“-1表示与原始图像一致核大小主要包括33以及55如下所示。normalize属性表示是否对目的图像进展归一化处理。当normalize为true时需要执行均值化处理当normalize为false时不进展均值化处理实际上为求周围各像素的以及很容易发生溢出溢出时均为白色对应像素值为255。在图像简单平滑中算法利用卷积模板逐一处理图像中每个像素这一经过可以形象地比作对原始图像的像素一一进展过滤整理在图像处理中把邻域像素逐一处理的算法经过称为滤波器。平滑线性滤波器的工作原理是利用模板对邻域内像素灰度进展加权平均也称为均值滤波器。代码如下所
8、示#encoding:utf-8importcv2importnumpyasnpimportmatplotlib.pyplotasplt#读取图片imgcv2.imread(test01.png)sourcecv2.cvtColor(img,cv2.COLOR_BGR2RGB)#方框滤波resultcv2.boxFilter(source,-1,(5,5),normalize1)#显示图形titlesSourceImage,BoxFilterImageimagessource,resultforiinxrange(2):plt.subplot(1,2,i1),plt.imshow(images
9、i,gray)plt.title(titlesi)plt.xticks(),plt.yticks()plt.show()代码中使用5*5的核normalize1表示进展归一化处理此时与均值滤波一样输出结果如下列图所示下面是图像左上角处理前后的像素结果print(source0:3,0:3,0)#115180106#8315272#555855print(result0:3,0:3,0)#929078#928977#828072假如省略参数normalize那么默认是进展归一化处理。假如normalize0那么不进展归一化处理像素值为周围像素之以及图像更多为白色。#encoding:utf-8i
10、mportcv2importnumpyasnpimportmatplotlib.pyplotasplt#读取图片imgcv2.imread(test01.png)sourcecv2.cvtColor(img,cv2.COLOR_BGR2RGB)#方框滤波resultcv2.boxFilter(source,-1,(5,5),normalize0)#显示图形titlesSourceImage,BoxFilterImageimagessource,resultforiinxrange(2):plt.subplot(1,2,i1),plt.imshow(imagesi,gray)plt.title(
11、titlesi)plt.xticks(),plt.yticks()plt.show()输出结果如下列图所示上图很多像素为白色因为图像求以及结果几乎都是255。假如设置的是2*2矩阵只取四个像素结果要好些。resultcv2.boxFilter(source,-1,(2,2),normalize0)高斯滤波为了克制简单部分平均法的弊端(图像模糊)目前已提出许多保持边缘、细节的部分平滑算法。它们的出发点都集中在怎样选择邻域的大小、形状以及方向、参数加平均及邻域各店的权重系数等。图像高斯平滑也是邻域平均的思想对图像进展平滑的一种方法在图像高斯平滑中对图像进展平均时不同位置的像素被赋予了不同的权重。高
12、斯平滑与简单平滑不同它在对邻域内像素进展平均时给予不同位置的像素不同的权值下列图的所示的3*3以及5*5领域的高斯模板。高斯滤波让临近的像素具有更高的重要度对周围像素计算加权平均值较近的像素具有较大的权重值。如下列图所示中心位置权重最高为0.4。Python中OpenCV主要调用GaussianBlur函数如下dstcv2.GaussianBlur(src,ksize,sigmaX)其中src表示原始图像ksize表示核大小sigmaX表示X方向方差。注意核大小N,N必须是奇数X方向方差主要控制权重。代码如下#encoding:utf-8importcv2importnumpyasnpimpo
13、rtmatplotlib.pyplotasplt#读取图片imgcv2.imread(test01.png)sourcecv2.cvtColor(img,cv2.COLOR_BGR2RGB)#高斯滤波resultcv2.GaussianBlur(source,(3,3),0)#显示图形titlesSourceImage,GaussianBlurImageimagessource,resultforiinxrange(2):plt.subplot(1,2,i1),plt.imshow(imagesi,gray)plt.title(titlesi)plt.xticks(),plt.yticks()
14、plt.show()输出结果如下所示假如使用15*15的核那么图形将更加模糊。中值滤波1.概念在使用邻域平均法去噪的同时也使得边界变得模糊。而中值滤波是非线性的图像处理方法在去噪的同时可以兼顾到边界信息的保存。选一个含有奇数点的窗口W将这个窗口在图像上扫描把窗口中所含的像素点按灰度级的升或者降序排列取位于中间的灰度值来代替该点的灰度值。例如选择滤波的窗口如下列图是一个一维的窗口待处理像素的灰度取这个模板中灰度的中值滤波经过如下如下列图所示将临近像素按照大小排列取排序像素中位于中间位置的值作为中值滤波的像素值。2.代码OpenCV主要调用medianBlur()函数实现中值滤波。图像平滑里中值滤
15、波的效果最好。dstcv2.medianBlur(src,ksize)其中src表示源文件ksize表示核大小。核必须是大于1的奇数如3、5、7等。代码如下所示#encoding:utf-8importcv2importnumpyasnpimportmatplotlib.pyplotasplt#读取图片imgcv2.imread(test01.png)#高斯滤波resultcv2.medianBlur(img,3)#显示图像cv2.imshow(sourceimg,img)cv2.imshow(medianBlur,result)#等待显示cv2.waitKey(0)cv2.destroyAl
16、lWindows()输出结果如下列图所示常用的窗口还有方形、十字形、圆形以及环形。不同形状的窗口产生不同的滤波效果方形以及圆形窗口合适外轮廓线较长的物体图像而十字形窗口对有尖顶角状的图像效果好。中值滤波对于消除孤立点以及线段的干扰特别有用尤其是对于二进噪声但对消除高斯噪声的影响效果不佳。对于一些细节较多的复杂图像可以屡次使用不同的中值滤波。祈望文章对大众有所帮助假如有错误或者缺乏之处还请海涵。版权声明本文为CSDN博主Eastmount的原创文章遵循CC4.0BY-SA版权协议转载请附上原文出处链接及本声明。原文链接s:/推荐浏览性能超越最新序列推荐模型华为诺亚方舟提出记忆增强的图神经网络你点的每个“在看我都认真当成了AI