在實(shí)際獲取和傳輸圖像的過程往往會(huì)發(fā)生圖像失真,所得到圖像和原始圖像有某種程度的差別。這些都是因?yàn)橛型饨绲脑肼暭尤氲綀D像中,因此在對(duì)采集到的圖像進(jìn)行處理前,需要先對(duì)圖像進(jìn)行預(yù)處理,就是要對(duì)噪聲圖像進(jìn)
行濾波,平滑噪聲圖像。傳統(tǒng)的降噪方法有中值濾波、均值濾波、維納濾波等,這些方法對(duì)于非平穩(wěn)過程信號(hào)有著明顯的局限性。
多幅圖像平均法處理常用于攝像機(jī)的視頻圖像中,用以減少電視攝像機(jī)光電攝像管或CCD器件所引起的噪聲,這是對(duì)同一景物連續(xù)攝取多幅圖像并數(shù)字化,再對(duì)多幅圖
多幅圖像平均法的原理
多幅圖像平均法是對(duì)同一景物重復(fù)采集M次相加后取平均值的方法來消除噪聲的。 圖像成像的模型[4]可描述為:
可見,多圖像平均法輸出的方差是原圖像的M1,隨著M的增大,噪聲的抑制作用越強(qiáng)。本算法的流程圖如圖1所示。
多圖片平均法降噪
在相機(jī)采集到的圖像中,往往會(huì)存在一定的噪聲。這種噪聲一般來說在空間域是互不相關(guān)的,并且是一種加性噪聲。對(duì)于一幅相機(jī)采集到的圖像,可以表示為無噪聲圖像和加性噪聲的組成,也即:
g(x,y)=f(x,y)+η(x,y)(1)
其中:g(x,y)為采集圖像,f(x,y)為無噪聲圖像,η(x,y)為噪聲。
去噪的過程就是從已知的g(x,y)來近似得到f(x,y)的過程。
對(duì)于同一個(gè)場(chǎng)景拍攝的多張圖像來說,fi(x,y)是相同的,而ηi(x,y)是隨機(jī)的且相互之間不相關(guān),相同場(chǎng)景的k幅圖像圖像的均值可以表示如下
gˉ(x,y)=1K∑i=1K[fi(x,y)+ηi(x,y)]=f(x,y)+1K∑i=1Kηi(x,y)(2)
由于噪點(diǎn)隨機(jī)且不相關(guān),可得其平均圖像的期望
E{gˉ(x,y)}=f(x,y)(3)
平均圖像的方差
σ2gˉ(x,y)=1Kσ2η(x,y)(4)
即
σgˉ(x,y)=1K??√ση(x,y)(5)
從式(3)中我們可以發(fā)現(xiàn),同場(chǎng)景的多幅圖像的均值的期望是無噪點(diǎn)圖像,但是會(huì)存在一些擾動(dòng),這些擾動(dòng)的標(biāo)準(zhǔn)差(5)就決定了噪聲的強(qiáng)度。我們對(duì)圖像去噪的本質(zhì)就是減少在空間域上的標(biāo)準(zhǔn)差。從式(5)中我們不難發(fā)現(xiàn),通過增大K值,即增加平均圖像的數(shù)量,即可減少噪聲。
但同時(shí)我們可以發(fā)現(xiàn):σ∝1K√,?σ?K=?12K3√,隨著K值的增大,σ的變化越來越小,用平均法去噪時(shí),單單通過提高圖像數(shù)量的作用是很小的。
實(shí)驗(yàn)?zāi)康?/p>
1. 驗(yàn)證同場(chǎng)景下多圖像平均可以進(jìn)行去噪。
2. 隨著圖像數(shù)量的增大,圖像噪點(diǎn)變化越來越小。
數(shù)據(jù)集
同一場(chǎng)景的179幅照片,用短時(shí)間采集完成。
以下是其中的一幅圖片
其局部細(xì)節(jié):
可以發(fā)現(xiàn)圖像上的噪點(diǎn)是比較多的。
程序設(shè)計(jì)
程序的處理過程為:
* 讀取圖像
* 求平均值
* 顯示圖像
程序源碼:
% get image file names
DIR = ‘imgs’;
imgFiles = dir([DIR , ‘/*.jpg’]);
?。跱, 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;
}
測(cè)試
對(duì)179張圖片進(jìn)行測(cè)試,結(jié)果如下:
對(duì)照原圖:
可以看出,噪點(diǎn)明顯減少了,從而驗(yàn)證了多圖像平均法去噪的可行性。
改變平均的圖片數(shù)量,K取2,3.。.10,可以得到一系列圖像,如以下gif所示:
可以看出,從原圖到K=2,噪點(diǎn)減少顯著,而從K=9到K=10,噪點(diǎn)變化較少,驗(yàn)證了之前的數(shù)學(xué)模型。
評(píng)論