版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机视觉--OpenCV图像处理教程第三章图像滤波操作IMAGEFILTERINGOPERATION内容要点:图像噪声的概念、图像滤波与图像卷积、图像平滑降噪、图像边缘提取建议课时:8课时讲课人:宋桂岭讲课时间:2026年5月18日目录3.1图像噪声概念理论+实操3.2图像滤波概念理论讲解3.3邻域平滑滤波理论+实操3.4低通滤波及高通滤波理论+实操3.5图像梯度及边缘滤波理论+实操3.6图像清晰度评价项目实战013.1图像噪声理论+实操3.1图像噪声图像噪声ImageNoise图像在生成和传输过程中常常因受到各种噪声的干扰和影响而是图像降质,这对后续图像的处理和图像视觉效应将产生不利影响。噪声种类很多,比如:电噪声,机械噪声,信道噪声和其他噪声。1、椒盐噪声椒盐噪声(salt-and-peppernoise)也称为脉冲噪声,是数字图像的一个常见噪声,它是一种随机出现的白点或者黑点。椒盐噪声是指两种噪声,一种是盐噪声(saltnoise),另一种是椒噪声(peppernoise)。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。2、高斯噪声高斯噪声(gaussnoise)是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。3、斑点噪声斑点噪声是合成孔径雷达(SAR,SyntheticApertureRadar)成像系统的一大特色,源自基本分辨单元内地物的随机散射,在图像上表现为信号相关的小斑点椒盐噪声高斯噪声椒盐噪声斑点噪声周期噪声3.1图像噪声实操:为图像添加噪声①图像准备:下载/sgl_666/opencv/blob/master/code/chp3/data/0499.jpg到data文件夹②添加工具包condaactivateopencv4.7pipinstallscikit-image③创建add_noisy.py文件,输入fromskimage.utilimportrandom_noiseimportcv2importnumpyasnpfrommatplotlibimportpyplotasplt3.1图像噪声④继续输入:img=cv2.imread("data/0499.jpg")img=cv2.resize(img,dsize=None,fx=0.10,fy=0.10,interpolation=cv2.INTER_CUBIC)img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
snoise_img=random_noise(img,mode='salt',amount=0.05)#盐噪声pnoise_img=random_noise(img,mode='pepper',amount=0.05)#椒噪声spnoise_img=random_noise(img,mode='s&p',amount=0.05)#椒盐噪声guassian_img=random_noise(img,mode='gaussian')#高斯噪声speckle_img=random_noise(img,mode='speckle')#speckle均匀噪声/斑点噪声3.1图像噪声⑤结果输出,中文处理:#解决plt中文显示问题plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['font.size']=30#全局设置输出图片大小1920x1080像素plt.rcParams['figure.figsize']=(19.2,10.8)imgs=[img,snoise_img,pnoise_img,spnoise_img,guassian_img,speckle_img]titles=["原始图像","盐噪声","椒噪声","椒盐噪声","高斯噪声","斑点噪声"]
foriinrange(6):img0=plt.subplot(2,3,i+1)img0.set_title(titles[i])plt.imshow(imgs[i],cmap="gray")plt.xticks([])plt.yticks([])
plt.show()cv2.waitKey(0)3.1图像噪声⑥可视化结果023.2图像滤波理论讲解3.2图像滤波图像滤波在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制邻域滤波频域滤波线性滤波:均值滤波、方框滤波、高斯滤波非线性滤波:中值滤波、双边滤波邻域滤波一般通过当前像素与周期像素进行加权平均来实现,称为卷积
:低通滤波:滤除原图像的高频成分,即模糊图像边缘与细节高通滤波:滤除原图像的低频成分,即图像锐化)033.3邻域平滑滤波理论+实操3.3邻域平滑滤波图像平滑也称为图像低通滤波,图像噪音一般为高频①创建img_smooth.py②编写平滑滤波代码importcv2importmatplotlib.pyplotasplt
#输入图像img=cv2.imread('data/0499.jpg')img=cv2.resize(img,dsize=None,fx=0.10,fy=0.10,interpolation=cv2.INTER_CUBIC)3.3邻域平滑滤波③均值滤波#均值滤波img_blur=cv2.blur(img,(3,3))#(3,3)代表卷积核尺寸,随着尺寸变大,图像会越来越模糊img_blur=cv2.cvtColor(img_blur,cv2.COLOR_BGR2RGB)#BGR转化为RGB格式均值滤波采用多次测量取平均值的思想,用每一个像素周围的像素的平均值代替自身。它能够将受到噪声影响的像素使用该噪声周围的像素值进行修复,对椒盐噪声的滤除比较好。但是它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊3.3邻域平滑滤波③均值滤波3.3邻域平滑滤波④方框滤波#方框滤波img_boxFilter1=cv2.boxFilter(img,-1,(3,3),normalize=True)#当normalize=True时,与均值滤波结果相同img_boxFilter1=cv2.cvtColor(img_boxFilter1,cv2.COLOR_BGR2RGB)#BGR转化为RGB格式img_boxFilter2=cv2.boxFilter(img,-1,(3,3),normalize=False)img_boxFilter2=cv2.cvtColor(img_boxFilter2,cv2.COLOR_BGR2RGB)#BGR转化为RGB格式在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。当normalize=True时,与均值滤波结果相同;当normalize=False时,表示对加和后的结果不进行平均操作,大于255的使用255表示,因为不进行平均表示,处理后的图像中可能会出现大量的白色区域3.3邻域平滑滤波⑤高斯滤波#高斯滤波#参数说明:(源图像,核大小,x方向的标准差,y方向的标准差)img_GaussianBlur=cv2.GaussianBlur(img,(3,3),0,0)img_GaussianBlur=cv2.cvtColor(img_GaussianBlur,cv2.COLOR_BGR2RGB)#BGR转化为RGB格式高斯滤波(GaussFilter)基于二维高斯核函数。用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。高斯滤波主要用来去除高斯噪声。3.3邻域平滑滤波⑥中值滤波#中值滤波img_medianBlur=cv2.medianBlur(img,3)img_medianBlur=cv2.cvtColor(img_medianBlur,cv2.COLOR_BGR2RGB)#BGR转化为RGB格式中值滤波将待处理的像素周围像素从小到大排序,取中值代替该像素。其优点为去除脉冲噪声、椒盐噪声的同时又能保留图像边缘细节,但是当卷积核较大时,图像将变得模糊,而且计算量很大3.3邻域平滑滤波⑥中值滤波3.3邻域平滑滤波⑥中值滤波与其他滤波方法的比较3.3邻域平滑滤波⑦双边滤波#双边滤波#参数说明:(源图像,核大小,sigmaColor,sigmaSpace)img_bilateralFilter=cv2.bilateralFilter(img,50,100,100)img_bilateralFilter=cv2.cvtColor(img_bilateralFilter,cv2.COLOR_BGR2RGB)#BGR转化为RGB格式双边滤波由2个函数综合而成,一个函数由像素欧式距离决定滤波器模板的系数,另一个函数由像素的灰度差值决定滤波器的系数。由此,双边滤波结合了高斯滤波以及均值滤波的特点。。3.3邻域平滑滤波⑦双边滤波:美颜效果3.3邻域平滑滤波⑦双边滤波:美颜效果sigmaSpace=10sigmaSpace=35原图3.3邻域平滑滤波⑧可视化输出#输出plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['font.size']=30#全局设置输出图片大小1920x1080像素plt.rcParams['figure.figsize']=(19.2,10.8)titles=['均值平滑','方框滤波','方框滤波2','高斯平滑','中值平滑','双边滤波']images=[img_blur,img_boxFilter1,img_boxFilter2,img_GaussianBlur,img_medianBlur,img_bilateralFilter]
foriinrange(6):plt.subplot(2,3,i+1),plt.imshow(images[i]),plt.title(titles[i])plt.axis('off')plt.show()3.3邻域平滑滤波⑨运行结果3.3邻域平滑滤波实际操作:高斯噪声的生成及去噪操作步骤:①打开图像,②添加高斯噪声,③去除高斯噪声作为课堂练习,代码见/sgl_666/opencv/blob/master/code/chp3/gauss_filter.py043.4频域低通滤波及高通滤波理论+实操3.4频率:低通及高通滤波①创建名为“frequency_filter”的Python文件②输入初始化的代码:importcv2importnumpyasnpfromPILimportImagefrommatplotlibimportpyplotasplt3.4频率:低通及高通滤波③定义低通滤波函数:#低通滤波defLow_Pass_Filter(srcImg_path):img=np.array(Image.open(srcImg_path))img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#傅里叶变换dft=cv2.dft(np.float32(img),flags=cv2.DFT_COMPLEX_OUTPUT)fshift=np.fft.fftshift(dft)
#设置低通滤波器rows,cols=img.shapecrow,ccol=int(rows/2),int(cols/2)#中心位置mask=np.zeros((rows,cols,2),np.uint8)mask[crow-30:crow+30,ccol-30:ccol+30]=1#掩膜图像和频谱图像乘积f=fshift*mask
#傅里叶逆变换ishift=np.fft.ifftshift(f)iimg=cv2.idft(ishift)res=cv2.magnitude(iimg[:,:,0],iimg[:,:,1])
returnres3.4频率:低通及高通滤波④定义高通滤波函数:defHigh_Pass_Filter(srcImg_path):img=np.array(Image.open(srcImg_path))img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#傅里叶变换dft=cv2.dft(np.float32(img),flags=cv2.DFT_COMPLEX_OUTPUT)fshift=np.fft.fftshift(dft)
#设置高通滤波器rows,cols=img.shapecrow,ccol=int(rows/2),int(cols/2)#中心位置mask=np.ones((rows,cols,2),np.uint8)mask[crow-30:crow+30,ccol-30:ccol+30]=0#掩膜图像和频谱图像乘积f=fshift*mask
#傅里叶逆变换ishift=np.fft.ifftshift(f)iimg=cv2.idft(ishift)res=cv2.magnitude(iimg[:,:,0],iimg[:,:,1])
returnres
3.4频率:低通及高通滤波⑤可视化输出:plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['font.size']=30#全局设置输出图片大小1920x1080像素plt.rcParams['figure.figsize']=(19.2,10.8)img_Low_Pass_Filter=Low_Pass_Filter('data/0499.jpg')plt.subplot(121),plt.imshow(img_Low_Pass_Filter,'gray'),plt.title('低通滤波')plt.axis('off')
img_High_Pass_Filter=High_Pass_Filter('data/0499.jpg')plt.subplot(122),plt.imshow(img_High_Pass_Filter,'gray'),plt.title('高通滤波')plt.axis('off')
plt.show()3.4频率:低通及高通滤波⑥运行结果:低通滤波的规则是低频信息能正常通过,而超过设定临界值的高频信息则被阻隔、减弱,使得图像背景和基本内容被保留,而图像边缘被阻挡,图像变模糊。与之对应,高通滤波的规则为高频信息能正常通过,而低于设定临界值的低频信息则被阻隔、减弱,因此高通滤波提取了图像的边缘和噪声3.4频率:低通及高通滤波知识拓展:傅里叶变换参见:傅里叶变换公式详解()/s?id=1764217576330254556&wfr=spider&for=pc053.5图像梯度及边缘滤波理论+实操3.5图像梯度图像梯度是指图像某像素在x和y两个方向上的变化率(与相邻像素比较),是一个二维向量,由2个分量组成X轴的变化、Y轴的变化。
幅值角度图像梯度3.5图像梯度实操importcv2
img=cv2.imread('data/0499.jpg')img=cv2.resize(img,dsize=None,fx=0.20,fy=0.20,interpolation=cv2.INTER_CUBIC)img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)rst=cv2.Sobel(img,cv2.CV_64F,1,0)rst=cv2.convertScaleAbs(rst)cv2.imshow('img',img)cv2.imshow('rst',rst)cv2.waitKey()cv2.destroyAllWindows()①创建名为img_grad.py的Python文件,并添加3.5图像梯度实操②运行看效果可见Y方向边缘增强cv2.Sobel(img,cv2.CV_64F,1,0)被称为索贝尔算子,依旧是卷积操作3.5图像梯度实操importcv2
img=cv2.imread('data/0499.jpg')img=cv2.resize(img,dsize=None,fx=0.20,fy=0.20,interpolation=cv2.INTER_CUBIC)img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)rst=cv2.Sobel(img,cv2.CV_64F,0,1)#修改了这里rst=cv2.convertScaleAbs(rst)cv2.imshow('img',img)cv2.imshow('rst',rst)cv2.waitKey()cv2.destroyAllWindows()②X方向增强:3.5图像梯度实操②X方向增强:3.5图像梯度实操③X、Y方向同时增强:importcv2
img=cv2.imread('data/0499.jpg')img=cv2.resize(img,dsize=None,fx=0.20,fy=0.20,interpolation=cv2.INTER_CUBIC)img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)rst=cv2.Sobel(img,cv2.CV_64F,1,1)#修改了这里rst=cv2.convertScaleAbs(rst)cv2.imshow('img',img)cv2.imshow('rst',rst)cv2.waitKey()cv2.destroyAllWindows()3.5图像梯度实操④强化边缘:sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)sobelx=cv2.convertScaleAbs(sobelx)cv2.imshow("sobelx",sobelx)
sobely=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)sobely=cv2.convertScaleAbs(sobely)cv2.imshow('sobely',sobely)
#图像叠加,得到边缘信息sobelxy=cv2.addWeighted(sobelx,0.5,sobely,0.5,0)cv2.imshow("sobelxy",sobelxy)cv2.waitKey()cv2.destroyAllWindows()3.5图像梯度实操④强化边缘:cv2.addWeighted()
参数说明如下:src1:输入的第一张图片alpha:第一张图片的权重src2:与第一张大小和通道数相同的图片(即相同的image.shape)beta:第二张图片的权重dst:输出,在python中可以直接将dst放在前面作为输出gamma:加到每个总和上的标量,相当于调节亮度3.5图像梯度实操④反向输出:#图像叠加,得到边缘信息sobelxy=cv2.addWeighted(sobelx,0.5,sobely,0.5,0)cv2.imshow("sobelxy",sobelxy)
#反向输出sobelxy=cv2.subtract(255,sobelxy)cv2.imshow("sobelxy_invert",sobelxy)这里使用了OpenCV图像的运算方法:add/substract等,可以阅读OpenCV文档,进行图像操作练习3.5图像梯度实操⑤更多算子:拉普拉斯(Laplacian)算子和坎尼(Canny)算子等laplacian=cv2.Laplacian(img,cv2.CV_64F)cannyEdge=cv2.Canny(img,100,200)cv2.imshow("laplacian",laplacian)cv2.imshow("canny",cannyEdge)cv2.waitKey()cv2.destroyAllWindows()063.6图像清晰度评价项目实战3.6.1图像清晰度评价的意义图像清晰度是衡量图像质量的一个重要指标。对于相机来说,其一般工作在无参考图像的模式下,所以在拍照时需要进行对焦的控制,对焦不准确,图像就会变得比较模糊不清晰。相机对焦是一个调整的过程,图像从模糊到清晰,再到模糊,确定清晰度峰值,再最终到达最清晰的位置。因此,对于成像装置所获得的一组图像进行清晰度评价在工程上有着非常重要的应用价值。图像清晰度评价3.6.2图像清晰度评价--Tenegrad梯度法③读取图像①下载图片:位于/sgl_666/opencv/blob/master/code/chp3/data/circle.png②拷贝至项目data文件夹importmatplotlib.pyplotaspltimportnumpyasnpimportcv2ascvimportglob
#读取图片circle=cv.imread("data/circle.png")cv.imwrite("data/circle00.png",circle)3.6.2图像清晰度评价--Tenegrad梯度法④创建评价数据集,利用不同层级的高斯模糊核函数,这是常见的算法效果实验方法之一blurrange=range(0,55,5)foriinblurrange:ifi==0:continueblur=cv.GaussianBlur(cv.imread("data/circle00.png"),(0,0),i)cv.imwrite(f"data/circle{i:02d}.png",blur)#显示当前结果images=sorted(glob.glob("data/*[0-9].png"))fig,axes=plt.subplots(2,len(images)//2)fori,axinenumerate(axes.flatten()):ax.imshow(cv.imread(images[i]))ax.annotate(f"SigmaX={i*5}",(0,0))ax.set_xticks([])ax.set_yticks([])plt.tight_layout()plt.show()3.6.2图像清晰度评价--Tenegrad梯度法⑥运行,查看当前结果3.6.2图像清晰度评价--Tenegrad梯度法⑦定义Tenegrad清晰度评价函数:deftenengrad(img,ksize=3):''''TENG'algorithm(Krotkov86)'''Gx=cv.Sobel(img,ddepth=cv.CV_64F,d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理人文:促进医护患共同决策
- 护理质量评估与改进措施
- 护理查房中的跨学科合作
- 聚四氢呋喃装置操作工安全培训效果竞赛考核试卷含答案
- 重冶萃取工安全意识强化模拟考核试卷含答案
- 2026年新科教版高中高一数学上册第三单元指数对数运算应用卷含答案
- 平板显示膜回收工诚信水平考核试卷含答案
- 制药灭菌发酵工成果评优考核试卷含答案
- 2026年新科教版高中高二化学下册第一单元反应热计算综合应用卷含答案
- 焊剂烧结熔炼工成果竞赛考核试卷含答案
- 《电动汽车储能系统原理与维修》课件-项目四 北汽新能源EV200动力蓄电池
- 2023RDPAC行业行为准则
- 2025年云南省高考化学试题(学生版+解析版)
- 农药污染土壤的修复技术
- 2026届新疆乌鲁木齐市天山区中考数学对点突破模拟试卷含解析
- 装修工程施工安全管理措施
- 2026届湖南长沙青竹湖重点中学中考语文适应性模拟试题含解析
- 《养老社区停车空间选址及车位配建指标指南》
- 《文言文二则》(第1课时)教学课件
- 公司技术部工作管理制度
- T/CECS 10274-2023防沉降井盖
评论
0/150
提交评论