一、圖像退化
一般來說,圖像的退化模型可以表示為
其中g(shù)(x,y) 表示退化后的圖像,h(x,y)表示退化模型,f(x,y)表示原圖像,n(x,y)表示噪聲。
在頻域上面可以表示為
下面介紹常見的兩種退化模型:基于大氣湍流物理特性的大氣湍流模型和運(yùn)動(dòng)模糊模型。
1.大氣湍流模型
退化模型:
伴隨著k值的增大,得到的圖像越來越模糊,一般情況下:k=0.0025劇烈湍流;k=0.001中等湍流;k=0.00025低湍流。
偽代碼:
{
讀取圖片;
轉(zhuǎn)成double型;
轉(zhuǎn)換到頻域空間;
頻譜移到中心;
使用模型執(zhí)行退化;
退化模型與原圖像相乘求退化后圖像;
進(jìn)行傅里葉反變換即可。
}
代碼如下:
%% 讀取圖像
image=imread('demo-1.jpg');
subplot(231);
imshow(image);
title('原圖像');
f=im2double(image);
%% 劇烈大氣湍流退化模型
F=fft2(f);%換到頻域,信號(hào)在低頻,噪聲在高頻
F=fftshift(F);%頻譜移到矩陣中心
%執(zhí)行
[W,H]=size(F);
[u,v]=meshgrid(1:W,1:H);%生成矩陣
H_turbulence=exp(-0.0025* ( (u-W/2).^2+(v-H/2).^2).^(5/6) );
F=F.*H_turbulence;
%傅里葉反變換
X=ifftshift(F);
turimg=ifft2(X);
turimg=uint8(abs(turimg)*256);
subplot(232);
imshow(turimg);
title('退化圖像');
2.運(yùn)動(dòng)模糊模型
退化模型:
其中T=1, a=0.1, b=0.1。
加性噪聲——高斯噪聲:
noise=imnoise(motion_blur,'gaussian',noise_mean,noise_var);
noise_mean=0,noise_var=0.01
代碼如下:
pic=imread('demo-1.jpg');
figure('name','demo2');
subplot(231);imshow(pic);title('原圖像');
pic=im2double(pic);
[width,height]=size(pic);
%% 運(yùn)動(dòng)模糊(+噪聲
H_motion = fspecial('motion', 28, 90);%運(yùn)動(dòng)長(zhǎng)度為28,逆時(shí)針運(yùn)動(dòng)角度為90°
motion_blur = imfilter(pic, H_motion, 'conv', 'circular');%卷積濾波
noise_mean=0; %添加均值為0
noise_var=0.001; %方差為0.001的高斯噪聲
motion_blur_noise=imnoise(motion_blur,'gaussian',noise_mean,noise_var);
subplot(232);imshow(motion_blur,[]);title('運(yùn)動(dòng)模糊');
subplot(233);imshow(motion_blur_noise,[]);title('運(yùn)動(dòng)模糊加噪聲');
二、圖像復(fù)原
1.逆濾波
使用退化函數(shù)處理圖像,然后加上適當(dāng)?shù)目杉有栽肼暭纯赡鏋V波實(shí)驗(yàn)。已獲得退化函數(shù)后,用退化函數(shù)除退化圖像的傅里葉變換計(jì)算原始圖像傅里葉變換的估計(jì):
即使知道退化函數(shù),也不能準(zhǔn)確的復(fù)原未退化的圖像;如果退化函數(shù)是0或者是很小的值,噪聲容
易被放大。
實(shí)現(xiàn)思路:
由于H(0,0)在頻率域中通常是H(u, v)的最高值。因此,通過將頻率限制在原點(diǎn)附近分析,就減少了遇
到零值的概率。
偽代碼:
{
將信號(hào)頻譜集中于低頻區(qū)域,噪聲集中于高頻區(qū)域;
頻譜移到矩陣中心;
以頻譜中心為圓心,內(nèi)部直接逆濾波,外部賦值為0
}
代碼如下:
%% 逆濾波復(fù)原
fourier_H=fft2(H_motion,width,height); %統(tǒng)一大小
fourier_degrade_img1=fft2(motion_blur); %G(u,v)=H(u,v)F(u,v),已知G(u,v),H(u,v),求F(u,v)
restore_one=ifft2(fourier_degrade_img1./fourier_H); h=fspecial('gaussian',width,5);
restore_three=imfilter(restore_one,h,'conv','circular');
subplot(234);imshow(im2uint8(restore_three),[]);title('逆濾波+運(yùn)動(dòng)模糊');
fourier_degrade_img2=fft2(motion_blur_noise); %G(u,v)=H(u,v)F(u,v)+N(u,v)
restore_two=ifft2(fourier_degrade_img2./fourier_H);
restore_four=imfilter(restore_two,h,'conv','circular');
subplot(235);imshow(im2uint8(restore_four),[]);title('逆濾波+運(yùn)動(dòng)模糊加噪聲');
2.維納濾波
重點(diǎn)在于尋找信噪比。
代碼如下:
%% 維納濾波
fourier_H_motion=fft2(H_motion,width,height); %H(u,v)
pow_H_motion=abs(fourier_H_motion).^2; %|H(u,v)|^2
noise=motion_blur_noise-motion_blur; %提取噪聲分量
fourier_noise=fft2(noise); % N(u,v) 噪聲傅里葉變換
fourier_double_gray_pic=fft2(pic); %F(u,v)為未經(jīng)過退化的圖片
nsr=abs(fourier_noise).^2./abs(fourier_double_gray_pic).^2; %噪信比=|N(u,v)|^2/|F(u,v)|^2
H_w=1./fourier_H_motion.*pow_H_motion./(pow_H_motion+nsr); %H_w(u,v)=1/H(u,v)*|H(u,v)|^2/[|H(u,v)|^2+NSR]
fourier_motion_blur_noise=fft2(motion_blur_noise); %G(u,v)
restore_with_noise=ifft2(fourier_motion_blur_noise.*H_w); %輸出頻域=G(u,v)H_w(u,v),時(shí)域?yàn)轭l域傅里葉逆變換
subplot(236);imshow(restore_with_noise,[]);title('維納濾波')
三、實(shí)現(xiàn)結(jié)果
四、附錄
1.圖片
demo-1.jpg
demo-2.jpg
myMatlab.m
clc;
clear;
close all;
%% 官方運(yùn)動(dòng)模糊+維納濾波
I = im2double(imread('demo-1.jpg'));
figure,subplot(2,3,1),imshow(I);
title('原圖');
%運(yùn)動(dòng)模糊
LEN = 28;
THETA = 90;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
subplot(2,3,2),imshow(blurred);
title('運(yùn)動(dòng)模糊退化');
wnr1 = deconvwnr(blurred, PSF, 0);
subplot(2,3,3),imshow(wnr1);
title('運(yùn)動(dòng)模糊復(fù)原');
%運(yùn)動(dòng)模糊+噪聲
noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred, 'gaussian', ...
noise_mean, noise_var);
subplot(2,3,4),imshow(blurred_noisy)
title('運(yùn)動(dòng)模糊+噪聲')
wnr2 = deconvwnr(blurred_noisy, PSF, 0);
subplot(2,3,5),imshow(wnr2)
title('模糊+噪聲 逆濾波');
signal_var = var(I(:));
wnr3 = deconvwnr(blurred_noisy, PSF, noise_var / signal_var);
subplot(2,3,6),imshow(wnr3)
title('模糊+噪聲 維納濾波');
mymotion.m文章來源:http://www.zghlxwxcb.cn/news/detail-445459.html
clc;
clear;
close all;
pic=imread('demo-1.jpg');
figure('name','demo2');
subplot(231);imshow(pic);title('原圖像');
pic=im2double(pic);
[width,height]=size(pic);
%% 運(yùn)動(dòng)模糊(+噪聲
H_motion = fspecial('motion', 28, 90);%運(yùn)動(dòng)長(zhǎng)度為28,逆時(shí)針運(yùn)動(dòng)角度為90°
motion_blur = imfilter(pic, H_motion, 'conv', 'circular');%卷積濾波
noise_mean=0; %添加均值為0
noise_var=0.001; %方差為0.001的高斯噪聲
motion_blur_noise=imnoise(motion_blur,'gaussian',noise_mean,noise_var);
subplot(232);imshow(motion_blur,[]);title('運(yùn)動(dòng)模糊');
subplot(233);imshow(motion_blur_noise,[]);title('運(yùn)動(dòng)模糊加噪聲');
%% 逆濾波復(fù)原
fourier_H=fft2(H_motion,width,height); %變大小
fourier_degrade_img1=fft2(motion_blur); % G(u,v)=H(u,v)F(u,v),已知G(u,v),H(u,v),求F(u,v)
restore_1=ifft2(fourier_degrade_img1./fourier_H); %
h=fspecial('gaussian',width,5);
restore_2=imfilter(restore_1,h,'conv','circular');
subplot(234);imshow(im2uint8(restore_2),[]);title('逆濾波+運(yùn)動(dòng)模糊');
fourier_degrade_img2=fft2(motion_blur_noise); %G(u,v)=H(u,v)F(u,v)+N(u,v)
restore_3=ifft2(fourier_degrade_img2./fourier_H);
restore_4=imfilter(restore_3,h,'conv','circular');
subplot(235);imshow(im2uint8(restore_4),[]);title('逆濾波+運(yùn)動(dòng)模糊加噪聲');
%% 維納濾波
fourier_H_motion=fft2(H_motion,width,height); %H(u,v)
pow_H_motion=abs(fourier_H_motion).^2; %|H(u,v)|^2
noise=motion_blur_noise-motion_blur; %提取噪聲分量
fourier_noise=fft2(noise); % N(u,v) 噪聲傅里葉變換
fourier_double_gray_pic=fft2(pic); %F(u,v)為未經(jīng)過退化的圖片
nsr=abs(fourier_noise).^2./abs(fourier_double_gray_pic).^2; %噪信比=|N(u,v)|^2/|F(u,v)|^2
H_w=1./fourier_H_motion.*pow_H_motion./(pow_H_motion+nsr); %H_w(u,v)=1/H(u,v)*|H(u,v)|^2/[|H(u,v)|^2+NSR]
fourier_motion_blur_noise=fft2(motion_blur_noise); %G(u,v)
restore_with_noise=ifft2(fourier_motion_blur_noise.*H_w); %輸出頻域=G(u,v)H_w(u,v),時(shí)域?yàn)轭l域傅里葉逆變換
subplot(236);imshow(restore_with_noise,[]);title('維納濾波')
myturbulence.m文章來源地址http://www.zghlxwxcb.cn/news/detail-445459.html
clc;
clear;
close all;
%% 讀取圖像
image=imread('demo-2.jpg');
subplot(231);
imshow(image);
title('原圖像');
f=im2double(image);
%% 劇烈大氣湍流退化模型
F=fft2(f);%換到頻域,信號(hào)在低頻,噪聲在高頻
F=fftshift(F);%頻譜移到矩陣中心
%執(zhí)行
[W,H]=size(F);
[u,v]=meshgrid(1:W,1:H);%生成矩陣
H_turbulence=exp(-0.0025* ( (u-W/2).^2+(v-H/2).^2).^(5/6) );
F=F.*H_turbulence;
%傅里葉反變換
X=ifftshift(F);
turimg=ifft2(X);
turimg=uint8(abs(turimg)*256);
subplot(232);
imshow(turimg);
title('大氣湍流退化');
%% 直接逆濾波
FDeblurred=F./H;
IDeblurred=real(ifft2(ifftshift(FDeblurred)));
subplot(233), imshow(uint8(255.*mat2gray(IDeblurred)));
title('直接逆濾波');
到了這里,關(guān)于數(shù)字圖像處理——圖像退化(大氣湍流模型與運(yùn)動(dòng)模糊模型)與圖像復(fù)原(逆濾波與維納濾波)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!