图像平均及其在降噪方面的应用
来源:互联网 发布:win10禁止安装软件设置 编辑:程序博客网 时间:2024/06/10 03:49
图像平均及其在降噪方面的应用
图像平均以及图像平均在应对椒盐/高斯/相机噪声方面的对比分析
概述:
图像平均操作是减少图像噪声的一种简单方式。
我们可以简单地从图像列表中计算出一幅平均图像。
假设所有的图像具有相同的大小,我们可以将这些图像简单地相加,然后除以图像的数目,来计算平均图像。
算法步骤:
对列表中的数字图像进行图像平均的处理顺序如下:
a.输入或者获取文件名列表
b.读取路径列表中的图像文件,转化为数组进行相加
c.将累加结果除以图像数量,进行平均
d.将平均结果构建为图片
e.输出图像
编程实例:
# -*- coding: utf-8 -*-from PIL import Imagefrom pylab import *from numpy import*import os#通过目录路径获取其中具有特定后缀名(JPG)的文件名列表def get_imlist(path): return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.JPG')]#读取路径列表中的图片,进行简单相加,并除以文件数量def compute_average(imlist): averageim = array(Image.open(imlist[0]), 'f') for imname in imlist[1:]: try: averageim += array(Image.open(imname)) except: print imname + '...skipped' averageim /= len(imlist) return array(averageim, 'uint8')#通过样本文件夹路径获取图片样本imlist = get_imlist("./photosource3")#进行图片平均im_a = compute_average(imlist)#显示图片imshow(im_a)show()
降噪——椒盐噪声:
这里我使用之前博客(《椒盐噪声》)中提到的生成椒盐噪声的方法,对同一张图片使用0.8的SNR(信噪比)连续生成8张带有大量椒盐噪声的测试图片,并对其进行平均操作:
椒盐噪声的生成 SaltAndPepperNoise.py:
# -*- coding: utf-8 -*-from PIL import Imagefrom pylab import *from numpy import*#读取图片,灰度化,并转为数组img = im = array(Image.open('./source/test.jpg').convert('L'))#信噪比SNR = 0.8#计算总像素数目 SP, 得到要加噪的像素数目 NP = SP * (1-SNR)noiseNum=int((1- SNR)*img.shape[0]*img.shape[1])#于随机位置将像素值随机指定为0或者255for i in range(noiseNum): randX=random.random_integers(0,img.shape[0]-1) randY=random.random_integers(0,img.shape[1]-1) if random.random_integers(0,1)==0: img[randX,randY]=0 else: img[randX,randY]=255 #显示图像gray()imshow(img)show()
原图
椒盐噪声图之一(SNR = 0.8):
图像平均(4张):
图像平均(8张):
可以看出,图像平均起到了一定的降噪效果,并且随着平均图片的增加,清晰度也显著增加,相对于椒盐噪声,虽然然均值率滤波的信噪比比较低,去除椒盐噪声最常用的算法是中值滤波,但是直观的效果上图像平均是最好的,毕竟是基于多张图片的降噪方式。与此同时,面对高斯噪声,仍然是图像平均法在直观效果上比较优秀,下面我们测试一下高斯噪声。
降噪——高斯噪声:
这里我使用之前博客(《高斯噪声》)中提到的生成高斯噪声的方法,对同一张图片使用sigma = 30连续生成8张带有大量高斯噪声的测试图片,并对其进行平均操作:
高斯噪声的生成 GaussNoise.py:
# -*- coding: utf-8 -*-from PIL import Imagefrom pylab import *from numpy import*import random#读取图片并转为数组im = array(Image.open('./source/test.jpg'))#设定高斯函数的偏移means = 0#设定高斯函数的标准差sigma = 30#r通道r = im[:,:,0].flatten()#g通道g = im[:,:,1].flatten()#b通道b = im[:,:,2].flatten()#计算新的像素值for i in range(im.shape[0]*im.shape[1]): pr = int(r[i]) + random.gauss(0,sigma) pg = int(g[i]) + random.gauss(0,sigma) pb = int(b[i]) + random.gauss(0,sigma) if(pr < 0): pr = 0 if(pr > 255): pr = 255 if(pg < 0): pg = 0 if(pg > 255): pg = 255 if(pb < 0): pb = 0 if(pb > 255): pb = 255 r[i] = pr g[i] = pg b[i] = pbim[:,:,0] = r.reshape([im.shape[0],im.shape[1]])im[:,:,1] = g.reshape([im.shape[0],im.shape[1]])im[:,:,2] = b.reshape([im.shape[0],im.shape[1]])#显示图像imshow(im)show()
高斯噪声图之一(sigma = 30):
图像平均(4张):
图像平均(8张):
可以很明显的看出,图像平均的降噪效果还是比较明显的,随着平均图片的增加,清晰度逐渐增加,根据从网上找到的一篇论文的描述,常规降噪方法中,图像平均是直观效果最好的方法。
降噪——相机噪声:
相机在高感光度下拍摄照片会明显看到大量噪点,感光度越高噪点越多,相机拍摄照片时产生的噪点来自于传感器噪点。
数码相机传感器中的每个像素上都有一个或者更多光电二极管,光电二极管把落在象素上的光子转化为电子信号,然后计算出颜色值和其他值,最终构成一幅完整的图像。如果同一个象素在同一个进光量下曝光数次,该象素得出的颜色值可能会不尽相同,而这些微小的差异就形成了传感器的噪点。
就算在没有光进入传感器的情况下,传感器本身的电子运动也会产生一些信号,额外的信号便是噪音。
象素面积越小,产生噪点的机会越多,这就是小型数码相机照出来的相片噪点较多的原因(相对于数码单反)。专业级照相机通常拥有高质量的象素和强大的图像处理器,把噪点水平降到最低,甚至在高感光度下没有噪点出现。
这里我用老爸的单反对着我小时候的水粉画在同一位置用25600的高ISO连续拍了一组样本,照片太大,上传的图片已经压缩过了,在最后我会提供下载链接,下面是平均结果:
相机噪声图信息:
相机噪声图之一(ISO = 25600):
图像平均(14张):
可以比较明显的看出,红色蓝色波纹状的噪点基本都消失了,效果还是非常理想的。
结语:
本篇博客主要介绍了图像平均以及图像平均在应对椒盐/高斯/相机噪声方面的对比分析,总体来讲作为使用多张照片的降噪方式,虽然实现与原理十分简单,但是极大程度的保留了图片信息,直观效果非常明显,希望这篇博文对大家有所帮助~
照片样本下载地址:
http://download.csdn.net/detail/sunmc1204953974/9426150
- 图像平均及其在降噪方面的应用
- Lines_gauss——检测图像中的线条及其宽度,在视觉表面检测方面应用广泛。
- UVa 297 - Quadtrees 四叉树, 及其在编码图像的应用
- 关于Kriging算法的总结及其在三维属性建模方面的应用(草稿)
- Spring AOP在函数接口调用性能分析及其日志处理方面的应用
- 调研报告—FPGA在图像处理方面的应用以及发展
- 应用图在地图方面的应用
- 设计(15) 根树的枚举及其在LSI剖析识别和在程序整理简化方面的应用
- 基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用。
- 基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用。
- 基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用
- 基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用。
- ACE在服务器编程方面的应用
- matlab 在排列组合方面的应用 (1)
- matlab 在排列组合方面的应用 (2)
- PHP在安全方面的另类应用
- 计算机视觉在工业方面的应用
- TL431在电源方面的应用
- android wear端数据和手机端数据
- Operations-ansible-01
- POJ 1270 Following Orders(拓扑排序:输出所有可能)
- Operations-ansible-02
- 掌握需求过程
- 图像平均及其在降噪方面的应用
- extjs查找表单中的文本框值
- 美化博客的一些实用方法
- 思考
- 《App研发录》读书笔记 (4) 第4章 Android命名规范和编码规范
- MongoDB_类型操作符
- HTML5(八)canvas转换之万花筒
- QT 5 初学1 多窗口切分-续
- Navicat连接SQL Server2000提示错误08001