关于多图像平均法降噪问题的全面分析

音频技术

95人已加入

描述

  在实际获取和传输图像的过程往往会发生图像失真,所得到图像和原始图像有某种程度的差别。这些都是因为有外界的噪声加入到图像中,因此在对采集到的图像进行处理前,需要先对图像进行预处理,就是要对噪声图像进

  行滤波,平滑噪声图像。传统的降噪方法有中值滤波、均值滤波、维纳滤波等,这些方法对于非平稳过程信号有着明显的局限性。

  多幅图像平均法处理常用于摄像机的视频图像中,用以减少电视摄像机光电摄像管或CCD器件所引起的噪声,这是对同一景物连续摄取多幅图像并数字化,再对多幅图

  多幅图像平均法的原理

  多幅图像平均法是对同一景物重复采集M次相加后取平均值的方法来消除噪声的。 图像成像的模型[4]可描述为:

  降噪

  可见,多图像平均法输出的方差是原图像的M1,随着M的增大,噪声的抑制作用越强。本算法的流程图如图1所示。

  降噪

  多图片平均法降噪

  在相机采集到的图像中,往往会存在一定的噪声。这种噪声一般来说在空间域是互不相关的,并且是一种加性噪声。对于一幅相机采集到的图像,可以表示为无噪声图像和加性噪声的组成,也即:

  g(x,y)=f(x,y)+η(x,y)(1)

  其中:g(x,y)为采集图像,f(x,y)为无噪声图像,η(x,y)为噪声。

  去噪的过程就是从已知的g(x,y)来近似得到f(x,y)的过程。

  对于同一个场景拍摄的多张图像来说,fi(x,y)是相同的,而ηi(x,y)是随机的且相互之间不相关,相同场景的k幅图像图像的均值可以表示如下

  g¯(x,y)=1K∑i=1K[fi(x,y)+ηi(x,y)]=f(x,y)+1K∑i=1Kηi(x,y)(2)

  由于噪点随机且不相关,可得其平均图像的期望

  E{g¯(x,y)}=f(x,y)(3)

  平均图像的方差

  σ2g¯(x,y)=1Kσ2η(x,y)(4)

  即

  σg¯(x,y)=1K−−√ση(x,y)(5)

  从式(3)中我们可以发现,同场景的多幅图像的均值的期望是无噪点图像,但是会存在一些扰动,这些扰动的标准差(5)就决定了噪声的强度。我们对图像去噪的本质就是减少在空间域上的标准差。从式(5)中我们不难发现,通过增大K值,即增加平均图像的数量,即可减少噪声。

  但同时我们可以发现:σ∝1K√,∂σ∂K=−12K3√,随着K值的增大,σ的变化越来越小,用平均法去噪时,单单通过提高图像数量的作用是很小的。

  实验目的

  1. 验证同场景下多图像平均可以进行去噪。

  2. 随着图像数量的增大,图像噪点变化越来越小。

  数据集

  同一场景的179幅照片,用短时间采集完成。

  以下是其中的一幅图片

  

  其局部细节:

  

  可以发现图像上的噪点是比较多的。

  程序设计

  程序的处理过程为:

  * 读取图像

  * 求平均值

  * 显示图像

  程序源码:

  matlab

  % get image file names

  DIR = ‘imgs’;

  imgFiles = dir([DIR , ‘/*.jpg’]);

  [N, C]= size(imgFiles);

  % get the image size

  img = im2double(imread([DIR , ‘/’, imgFiles(1).name]));

  figure(1);

  imshow(img);

  img = img / N;

  % calculate the average

  for m = 2:N

  img = img + im2double(imread([DIR , ‘/’, imgFiles(m).name])) / N;

  end

  figure(2);

  imshow(img);

  C++(OpenCV2.4)

  #include 《opencv2/core/core.hpp》

  #include 《opencv2/imgproc/imgproc.hpp》

  #include 《opencv2/highgui/highgui.hpp》

  #include 《sstream》

  #include 《exception》

  #include 《iostream》

  void denoise()

  {

  const int N = 179;

  cv::Mat avrg_img;

  for (int i = 0; i 《 N; i++){

  std::ostringstream oss;

  oss 《《 “imgs/img (” 《《 i+1 《《 “).jpg”;

  cv::Mat image = cv::imread(oss.str());

  // convert to double

  image.convertTo(image, CV_32F, 1.0 / 255.0);

  if (i == 0){

  cv::namedWindow(“noisy image”);

  cv::imshow(“noisy image”, image);

  avrg_img = image / N;

  }

  else

  avrg_img += image / N;

  }

  cv::namedWindow(“denoised image”);

  cv::imshow(“denoised image”, avrg_img);

  avrg_img.convertTo(avrg_img, CV_8UC3, 255.0);

  cv::imwrite(“denoised.jpg”, avrg_img);

  }

  int main()

  {

  try{

  denoise();

  }

  catch (std::exception &e){

  std::cerr 《《 e.what() 《《 std::endl;

  }

  cv::waitKey();

  return 0;

  }

  测试

  对179张图片进行测试,结果如下:

  

  对照原图:

  

  可以看出,噪点明显减少了,从而验证了多图像平均法去噪的可行性。

  改变平均的图片数量,K取2,3.。.10,可以得到一系列图像,如以下gif所示:

  

  可以看出,从原图到K=2,噪点减少显著,而从K=9到K=10,噪点变化较少,验证了之前的数学模型。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
llsluoluo33 2018-08-12
0 回复 举报
我是主动降噪芯片中国原厂的,可提供降噪方案和降噪芯片,协助解决技术难点,电话和微信18503002452   qq 2208962322 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分