图像平均及其在降噪方面的应用

图像平均及其在降噪方面的应用

图像平均以及图像平均在应对椒盐/高斯/相机噪声方面的对比分析

概述:

图像平均操作是减少图像噪声的一种简单方式。

我们可以简单地从图像列表中计算出一幅平均图像。

假设所有的图像具有相同的大小,我们可以将这些图像简单地相加,然后除以图像的数目,来计算平均图像。

算法步骤:

对列表中的数字图像进行图像平均的处理顺序如下:

  • a.输入或者获取文件名列表
  • b.读取路径列表中的图像文件,转化为数组进行相加
  • c.将累加结果除以图像数量,进行平均
  • d.将平均结果构建为图片
  • e.输出图像

编程实例:

# -*- coding: utf-8 -*-

from PIL import Image

from 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 Image

from 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或者255
for 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 Image

from 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] = pb

im[:,:,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

时间: 2024-08-27 06:46:42

图像平均及其在降噪方面的应用的相关文章

图像平均池化 pytorch库中的平均池化

一. 池化简介 平均池化:将图片按照固定大小网格分割,网格内的像素值取网格内所有像素的平均值. 池化:使用均等大小的网格将图片分割,并求网格内代表值的过程. 池化是卷积神经网络(convolutional neural network)中非常重要的处理方式,能够有效地降低图像的维度. 平均池化定义: 二. 将输入图像用4*4网格做平均池化 import cv2 import numpy as np # average pooling def average_pooling(img, G=4):

OpenCV2+入门系列(四):计算图像的直方图,平均灰度,灰度方差

本篇懒得排版,直接在网页html编辑器编辑 在图像处理时,我们常常需要求出图像的直方图.灰度平均值.灰度的方差,这里给出一个opencv2+自带程序,实现这些功能. 直方图 对于直方图,使用cv::calcHist函数可以求出. 原型 void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize,

OpenCV2学习笔记(二):图像的直方图

直方图(Histogram)又称质量分布图.是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况.一般用横轴表示数据类型,纵轴表示分布情况.众所周知,一幅图像是由不同颜色值的像素组成,因此像素值在图像中的分布情况是这幅图像的一个重要特征,因此直方图广泛应用在数字图像处理中. 拍照是现实生活中必不可少的一部分,由于环境亮度.图像拍摄过程中透视光圈设置错误等影响,经常会拍出一些"过暗"的照片,此时美图.PS等美化工具可以派上用场.但是这些工具的算法通常都是不公开的,鉴于研究

多图片平均法降噪

## 理论 ## 在相机采集到的图像中,往往会存在一定的噪声.这种噪声一般来说在空间域是互不相关的,并且是一种加性噪声.对于一幅相机采集到的图像,可以表示为无噪声图像和加性噪声的组成,也即: $$ \begin{equation} \label{imgeq} g(x,y)=f(x,y)+ \eta(x,y) \end{equation} $$ 其中:$g(x,y)$为采集图像,$f(x,y)$为无噪声图像,$\eta(x,y)$为噪声. 去噪的过程就是从已知的$g(x,y)$来近似得到$f(x,

数字图像处理

题目:大规模图像中的目标检测与分类方法 在进行图像目标识别与跟踪时,摄像机所采集的图像,在成像.数字化以及传输过程中,难免会受到各种各样噪声的干扰,图像的质量往往会出现不尽人意的退化,影响了图像的视觉效果.通常这些噪声干扰使得图像退化,表现为图像模糊,特征淹没,这会对图像分析产生不利,使所获得的图像质量较低.对这样的图像直接进行目标的识别与跟踪是比较困难的.抑制使图像退化的各种干扰信号.增强图像中的有用信号,以及将观测到的不同图像在同一约束条件下进行校正处理就显得非常重要. 滤波的目的有两个:一

ORB特征点检测

Oriented FAST and Rotated BRIEF 这篇文章我们将介绍一种新的具有局部不变性的特征 —— ORB特征,从它的名字中可以看出它是对FAST特征点与BREIF特征描述子的一种结合与改进,这个算法是由Ethan Rublee,Vincent Rabaud,Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFT or SURF”的文章中提出.就像文章题目所写一样,ORB是除了SI

ORB特征

ORB特征: 概述: ORB算法是Ethan Rublee在ICCV 2011上提出的一种用于基于视觉信息的特征点检测与描述算法,特征点检测部分利用运算速度特别快的FAST角点检测子,并针对FAST特征不具备方向的问题,加入了FAST特征的方向信息,特征点描述部分则是利用基于像素点二进制位比较的BRIEF特征描述子,并改进了 BRIEF描述子对图像噪声敏感和不具备旋转不变性的缺点. 性能:(SIFT.SURF.ORB) 在对特征点的描述的细致程度上是SIFT算法高于SURF算法,SURF算法有高

Python图像处理库(1)

转自:http://www.ituring.com.cn/tupubarticle/2024 第 1 章 基本的图像操作和处理 本章讲解操作和处理图像的基础知识,将通过大量示例介绍处理图像所需的 Python 工具包,并介绍用于读取图像.图像转换和缩放.计算导数.画图和保存结果等的基本工具.这些工具的使用将贯穿本书的剩余章节. 1.1 PIL:Python图像处理类库 PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图

Python图像处理类库

本章讲解操作和处理图像的基础知识,将通过大量示例介绍处理图像所需的 Python 工具包,并介绍用于读取图像.图像转换和缩放.计算导数.画图和保存结果等的基本工具.这些工具的使用将贯穿本书的剩余章节. 1.1 PIL:Python图像处理类库 PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放.裁剪.旋转.颜色转换等.PIL 是免费的,可以从 http://www.pythonware.com/pr