图像修复与去噪

article/2025/9/28 2:47:37

 博主简介

博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c++,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的,如果有错误之处,大家可以指正。

专栏简介:   本专栏主要研究计算机视觉,涉及算法,案例实践,网络模型等知识。包括一些常用的数据处理算法,也会介绍很多的Python第三方库。如果需要,点击这里订阅专栏   。

给大家分享一个我很喜欢的一句话:“每天多努力一点,不为别的,只为日后,能够多一些选择,选择舒心的日子,选择自己喜欢的人!”


图像的修复

图像修复的意思就是说将缺失的部分补全。那么图像为什么会破损?并不是图像在传输过程中出了问题,而是有两个主要原因:污染和噪声,就比如说,戴眼镜的同学都知道,眼镜戴久了,会出现很多污渍。这时候就会特别模糊。差不多就是这个意思。那我们如何去修复喃,除了现在的软件修复,我们用代码如何取实现喃?

如果说要修复缺失的图像其实是非常不容易的,计算机不知道他原来的样子,颜色,形状,而我们可能知道,但是没办法告诉计算机,我们就只能让计算机根据缺失部分周围的颜色进行合成。然后填充。但是如果需要修复的面积太大,就很难修复了。所以,其实图像修复都是基于原图像进行解析,修复。不能凭空绘制出原图像。

在OpenCV中,我们使用cv2.inpaint()函数进行图像修复。此函数的参数为img(输入图像)、mask(输入掩模,用来标记需要修复的区域,其余区域标为0)、dst(输出图片)、radius(每个像素复杂的半径)、以及修复方式(flag)。常用的修复方式为Navier Stokes和A.Telea's。需要注意的是,这里暂且只支持8位的图像(0~255).当损坏的部分面积很小,能进行修复。如果破损太大,只能进行部分修复。

#对破损图片进行修复
import cv2
import numpy as np
#读取破损图片
damaged=cv2.imread('F:\Image\\test13.jpg')
#读取或设置mask,注意mask必须是一通道coordinates = []
coordinate1 = [[[40, 13], [16,13], [16,33], [20,32]]]
coordinate2 = [[[30, 30], [60,30], [60,60], [30,60]]]
coordinate1 = np.array(coordinate1)
coordinate2 = np.array(coordinate2)
coordinates.append(coordinate1)
coordinates.append(coordinate2)
mask = np.zeros(damaged.shape[:2], dtype=np.int8)
mask = cv2.fillPoly(mask, coordinates, 255)
repaired=cv2.inpaint(damaged,int(mask),5,cv2.INPAINT_NS)
cv2.imshow('1',damaged)
cv2.imshow('2',repaired)
cv2.waitKey(0)

图像的去噪

当然,图像破损的第二个原因就是噪声,在许多场景中,噪声的主要来源是光线太亮或者太暗。这是由于在低光条件下,成像增益增加,导致噪声被放大。这种噪声的特点是孤立性与随机性,所以我们常常称其为椒盐噪声。顾名思义,就像在菜上面撒的椒盐一样,分布非常随机。

最新的的去噪方法为非局部均值去噪,也称为NL-means,是由Buades和Antoni在2005年首次提出来的,和高斯滤波(高斯去噪)不同,高斯滤波是采用了对周围各个像素去均值的手法,而非局部均值去噪则是在整张图片中寻找相似点,然后再对这些取平均值。

d_{p1,p2}=\sqrt{\frac{1}{6s+3}\sum_{c=1}^{3}\sum _{jB(0,s)}(I_{c}(p_{1})-I_{c}(p_{2}))^{2}}

其中,c是通道索引,例如RGB,c=1、2、3对应的就是RGB;I_{c}(p)表示p在通道c上的色彩强度;B(0,s)表示以像素为中心、半径为s的窗口。用这个公式,我们就能刻画两个像素之间的距离。显然,距离越小,两个像素越接近。

当然,一般来说距离越远的点相关性越小,所以会根据距离给定指数衰减函数,最后通过所有像素的加权平均对当前的像素进行更新。

在OPenCV中,我们尝试用的是快速非局部均值去噪,也称为FNLMD,顾名思义就是在原来的算法基础上,加快了速度,更注重效率。函数为cv2.fastNlMeansDenoising(),如果是彩色图片,则函数为cv2.fastNlMeansDenoisingColored(),此函数的可选参数为输入图像(img)、输出图像(outputArray)、权重衰减因子(h)、色彩权重衰减因子(hColor)、比较窗口大小(teplateWindowsize)、搜索窗口大小(searchWindowSize)。需要注意的是对于彩色图像,要先转换到LAB颜色空间,应用算法去噪后,再转为彩色图片。


#去噪
#对图像进行快速非局部均值去噪
import numpy as np
import cv2
#读取图片
img=cv2.imread('F:\Image\\test12.jpg')
#去噪声,灰度图
denoised=cv2.fastNlMeansDenoising(img,None,10,7,21)
#去噪声,彩色图
lab=cv2.cvtColor(img,cv2.COLOR_BGR2LAB)
denoised=cv2.fastNlMeansDenoisingColored(lab,None,10,10,7,21)
denoised=cv2.cvtColor(denoised,cv2.COLOR_LAB2BGR)
#显示图片
cv2.imshow('图片',denoised)
cv2.waitKey(0)

                      对比两张图片。似乎第二张更加的模糊,这是由于色彩权重因子过大导致的,调整色彩权重因             

 子大小即可。这张是不是就好很多了。当然,和原图可能没有很大的出入,这是因为这张图片 本身就是模糊的,我们可以换一张图片进行测试。

 这两张是不是就差别比较明显了。总的来说,图像去噪,就是对于光线过于强烈时拍摄的图片进行处理。具体参数,可以自己根据情况来调整。

图像轮廓

图像轮廓,从字面意思上看就是图像的轮廓,比如说,你在抠图的时候,第一步就是找到图片的轮廓,当我们需要将图片和物体分离的时候,就需要找到物体的轮廓。表示轮廓的方法有很多,其中最常见的就是向量法,有一系列的二维顶点来表示,每个值是一个向量,将所有的向量首尾相连,就画出了轮廓线。

其实寻找轮廓很简单,对于图像而言,除了最内和最外的的轮廓,其他的轮廓其实都同时是更小一级物体的外轮廓和大一级物体的内轮廓。将各个轮廓连接起来,就形成了轮廓树。如图 :

在OPenCV中,我们使用cv2.findContours()函数进行查找轮廓。此函数的可选参数为输入图像(img)、轮廓的检索模式(mode)、检索模式共有四种:只检测外轮廓(cv2.RETR_EXTERNAL)、检测的轮廓比建立等级关系(cv2.RETR_LIST)、建立两个等级的轮廓(cv2.RETR_CCOMMP)、建立一个等级树结构的轮廓(cv2.RETR_TREE)。路阔的近似办法(method)。需要注意的是,该函数的返回值有两个,一个是轮廓,另一个是每条轮廓对应的属性。


#对图片查找轮廓
import cv2
import numpy as np
img=cv2.imread('F:\Image\\test14.jpg')
#转为二值图
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,binary=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
#查找轮廓
contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
#画出轮廓
cv2.drawContours(img,contours,-1,(0,0,0),3)
#显示图片
cv2.imshow('1',img)
cv2.waitKey(0)

 当然我们可以对找到的轮廓 进行优化。OPenCV中有很多的优化方式,多边形逼近(基于DP逼近算法),使用多边形 逼近轮廓,使得顶点变少,函数为cv2.approxPolyDP();获得最小矩形框cv2.minAreaRect();获得最小包围圈cv2.minEnclosingcircle();拟合最佳轮廓线cv2.fitLine().

图像金字塔

图像金字塔,顾名思义就是有图像堆叠而成的金字塔。其实就是降采样。当我们需要对某个图像进行特征提取的时候,就会把脸部特征全部提取出来,当降低采样后,分辨率降低,这时候可能只能提取人脸的轮廓特征,就可以进行人脸轮廓对比。而当需要对比是那个人的时候,就需要更精细的图片了。

在OPenCV中,常使用cv2.pyrUp()和cv2.pyrDown()对图像进行向上和向下采样,使用cv2.buildPyramid()进行图像金字塔的搭建。


#搭建图像金字塔
import numpy as np
import cv2
img=cv2.imread('F:\Image\\test14.jpg')
#进行连续降采样
for i in range(5):img=cv2.pyrDown(img)cv2.imshow('{a}'.format(a=i),img)cv2.waitKey(0)   

 图像金子 塔的作用是不是显得毫无用处?不,它的用处还有其他作用,比如说两个图像的无缝衔接。所以本节的项目实战就是,图像融合。

代码实战:图像融合

采用高斯金字塔法,当降采样 到一定程度后,将两张图片进行融合,就可以消除边缘不匹配的现象。从而达到图像融合。来吧,展示!


#利用图像金字塔进行图像无缝拼接
import numpy as np
import cv2
img=cv2.imread('F:\Image\\test16.jpg')
img1=cv2.imread('F:\Image\\test17.jpg')
#resize到2的幂次方,方便处理
img=cv2.resize(img,(192,192))
img1=cv2.resize(img1,(192,192))
#降采样次数
step=3
#第一张图进行高斯金字塔计算
girl1=img.copy()
gp1=[girl1]
for i in range(step):girl1=cv2.pyrDown(girl1)gp1.append(girl1)
#第二张图进行高斯金字塔计算
girl2=img1.copy()
gp2=[girl2]
for i in range(step):girl2=cv2.pyrDown(girl2)gp2.append(girl2)
#第一张图进行拉普拉斯金字塔计算
lp1=[gp1[step]]
for i in range(step):GE=cv2.pyrUp(gp1[step-i])L=cv2.subtract(gp1[step-i-1],GE)lp1.append(L)
#第二张图片进行拉普拉斯金字塔计算
lp2=[gp2[step]]
for i in range(step):GE=cv2.pyrUp(gp2[step-i])L=cv2.subtract(gp2[step-i-1],GE)lp2.append(L)
#将金字塔中不同尺度层中的两种图像进行合并
mergs=[]
for i in range(step+1):w,h,d=lp1[i].shapemerge=np.hstack((lp1[i][:,0:int(w/2-10/2**i)],lp2[i][:,int(w/2-10/2**i):]))mergs.append(merge)
#将合并的图像进行拉普拉斯金字塔法拼接
merge=mergs[0]
for i in range(step):merge=cv2.pyrUp(merge)merge=cv2.add(merge,mergs[i+1])
#显示最终图像
cv2.imshow('2',merge)
cv2.waitKey(0)

 前张是原图,第三张则是拼接过后的是不是违和感降低很多,但是吧,图像依旧非常的模糊,这个时候就可以使用均衡直方图来对两张照片先进行处理,效果就会好很多。前面也学习了很多图像处理的方法,都可以去尝试尝试。主要就是掌握核心的知识。好了,本节内容到此结束了。拜拜了你嘞!

 

点赞加关注不迷路


http://chatgpt.dhexx.cn/article/qnfU2BRw.shtml

相关文章

小波阈值去噪原理及实现

小波阈值去噪原理及实现 1.小波阈值去噪的基本原理2.小波阈值去噪需要考虑的问题3.小波阈值的实现 1.小波阈值去噪的基本原理 将信号通过小波变换(采用Mallat算法)后,信号产生的小波系数含有信号的重要信息,将信号经小波分解后小…

python 图像平滑去噪(噪声+滤波器)

记录自己用python加opencv实现的图像处理的入门操作,各种平滑去噪滤波器的实现。 包括有:产生的椒盐噪声、高斯噪声等等,以及使用的中值滤波、平均滤波、高斯滤波等等。 分成了两部分来实现:一是自编写函数来实现,二是…

小波阈值去噪

目录 1.概念 2.原理 3.影响降噪效果的因素 3.1小波基的选择 3.2分解层数的选择 3.3阈值的选择 3.4阈值函数的选择 4.MATLAB代码 参考文献 1.概念 小波分析即用Mallat塔式算法对信号进行降阶分解。该算法在每尺度下将信号分解成近似分量与细节分量。近似分量表示信号的…

去噪

平滑去噪(低通滤波器) 噪声的产生是因为图像中的某些像素的灰度值发生了突变,使得和周围区域不和谐。除噪其实去除高频噪声,使得图像中的噪声像素的灰度值不那么突兀。 噪声去除有基于卷积(高斯滤波,均值…

图像的去噪

一、图像噪声概要 1. 图像噪声的产生主要源于两个方面: 图像获取过程中 常见的图像传感器CCD和CMOS在采集图像过程中,由于受到工作环境或者电子电路结构的影响,会引入各种噪声,如热噪声、光子噪声、暗电流噪声等。 信号传输过程…

图像去噪方法

图像去噪是指减少数字图像中噪声的过程。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声等的影响,在这种条件下得到的图像称为含噪图像或噪声图像。噪声是干扰图像的重要因素。一幅图像在实际应用中可能存在各种各样的噪声,这些噪声…

搞懂语音去噪

文章目录 1 概述2 传统语音去噪2.1 谱减法2.2 维纳滤波法 3 深度语音去噪参考资料 1 概述 语音去噪(noise reduction)又被称为语音增强(speech enhancement),主要是针对于有人声的音频进行处理,目的是去除那些背景噪声,增强音频中人声的可懂…

几种常用信号平滑去噪的方法(附Matlab代码)

几种常用信号平滑去噪的方法(附Matlab代码) 1 滑动平均法 1.0 移动平均法的方法原理1.1 matlab内自带函数实现移动平均法1.2 利用卷积函数conv()实现移动平均法1.3 利用filter滤波函数实现移动平均法1.4 移动平均的幅频响应1.5 时域和频域的转换关系 2 …

图像噪声、去噪基本方法合集(Python实现)

文章目录 前言本文主要参考冈萨雷斯的数字图像处理 (第4版),介绍图片中一些常见的噪声形式和常用的去噪方法,并且给出相应滤波方法的实现代码。 一、噪声分类1、高斯噪声2、泊松噪声3、椒盐噪声4、瑞利噪声5、爱尔兰(伽…

干货 | 6款漏扫工具来了(附工具下载链接)

渗透测试收集信息完成后,就要根据所收集的信息,扫描目标站点可能存在的漏洞了,包括我们之前提到过的如:SQL注入漏洞、跨站脚本漏洞、文件上传漏洞、文件包含漏洞及命令执行漏洞等,通过这些已知的漏洞,来寻找…

webshell扫描工具

webshell扫描工具,这是一种内部有多个漏洞,可自动进行url采集,自采集多个引擎和友情链接url,轻松日出上百。 演示地址:https://note.youdao.com/s/Xi9S4I16 目录遍历攻击又称(目录爬升,目录回溯…

网站漏洞扫描工具AWVS_v13下载和安装

Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具,它能够测试你的网站安全,检测网站的安全漏洞,如sql 注入,交叉站点脚本等等。 AWVS_v13软件的下载 1、AWVS漏洞扫描工具是一款…

2022-渗透测试-推荐一款好用的网站漏洞扫描工具-WPscan

目录 WPscan简介 WPscan工具利用 查看帮助信息 更新漏洞库 扫描WordPress漏洞 扫描wordpress用户 扫描所使用的主题和漏洞 指定字典暴力破解密码 WPscan简介 WPScan是Kali Linux默认自带的一款漏洞扫描工具,它可以全面检查wp网站的漏洞,从而能够及时应对…

动手实现简易网站目录扫描器——WebScanner

效果展示 项目目录: 引言 不知是否有小伙伴在学习Web安全相关的知识,如果有的话,那应该对XSS,SQL注入,文件上传,一句话脚本等等基本功应该是再熟悉不过了。最初学习的时候是它,实战最先测试的…

网站指纹扫描工具whatweb

目录 前言whatweb简介whatweb的使用 ~~~~~~~~ 因为想要面对一个新的开始,一个人必须有梦想、有希望、有对未来的憧憬。如果没有这些,就不叫新的开始,而叫逃亡。 ​​​​ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…

web扫描工具了解

前言:此文章用于发现web的漏洞查询,信息收集 一.whois查询(可以查到域名,注册商,联系人,更新时间,创建时间,过期时间,域名服务器,DNS) kali中带有…

目录,系统,网站漏洞扫描工具

目录扫描工具 1.yujian yujian是一款可以进行端口扫描和目录扫描的软件,图形化界面,使用也比较简单,例如,今天使用的是它的目录扫描。 yujian针对目录扫描有它自己默认的字典,通过字典对其网站目录进行扫描 这里要…

网站安全在线扫描工具

现在网络上有许多一些关于网站安全检测的工具软件。有收费的,也有免费的。在这我就列举2个免费的在线网站扫描工具。 对于站长的来说: 之前对与网站的的安全检测,我都是直接用***软件***自己网站,再从问题里面进行修复。不过现在已…

网站目录扫描工具

目录 御剑 dirbuster Webdirscan 网站后台扫描工具都是利用目录字典进行爆破扫描,字典越多,扫描到的结果也越多。常用的网站后台扫描工具御剑、dirbuster和Webdirscan,不管哪个工具,要想扫描到更多的东西,都必须要有一个强大的目录字典! 御剑 御剑也是一款好用的网站…

网站扫描(Wker_网站探测工具)

Wker_网站探测工具 对于网站的扫描,我们需要完整详细的数据,才能进行准确的分析。 对于网站的分析,我们大致需要以下一些数据。 一. 域名信息查询 whois查询(联系人,联系邮箱,DNS)SEO查询权重查…