数字图像处理实验九维纳滤波

1、运动模糊图像

2、逆滤波结果

3、计算噪信比K值滤波结果

4、调节噪信比K参数,显示不同的维纳滤波结果

clear;
clc;
close all;

f = checkerboard(8);                  %调用棋盘板图像

%%将图像的数据格式转换为double型
f=im2double(f);                       %将灰度图像由uint8转为double

%%建立退化模型
PSF = fspecial('motion',27,55);          %对图像进行27个像素点,55度角的模糊建模                     
gb = imfilter(f,PSF,'circular');         %将图像与退化模型叠加 

%%添加噪声
noise = imnoise(zeros(size(f)),'gaussian',0,0.0001);%高斯噪声。均值为0,方差0.002  
g = gb + noise;                         %添加噪声的退化图像

%%当K=0时,相当于直接逆滤波
fr1 = deconvwnr(g,PSF);    %%逆滤波 {维纳滤波(退化图像,点扩散函数(退化模型),噪信比为0)}

%%通过比率进行维纳滤波
Sn = abs(fft2(noise)).^2;                %噪声功率谱                   
nA = sum(Sn(:))/numel(noise);            %噪声平均功率                   
Sf = abs(fft2(f)).^2;                    %图像功率谱                   
fA = sum(Sf(:))/numel(f);                %图像平均功率   
K = sum(noise(:).^2)/sum(f(:).^2);       %计算常数比率K                 
fr2 = deconvwnr(g,PSF,K);                %使用常数比率的维纳滤波复原

%%通过将自相关函数进行维纳滤波
NCORR = fftshift(real(ifft2(Sn)));       %噪声自相关函数
ICORR = fftshift(real(ifft2(Sf)));       %原图像自相关函数
fr3 = deconvwnr(g,PSF,NCORR,ICORR);      %使用自相关函数的滤波结果

%%形成一个3×3得窗口
subplot(2,3,1);imshow(f);title('原图像');
subplot(2,3,2);imshow(gb);title('运动模糊图像');
subplot(2,3,3);imshow(noise,[ ]);title('高斯噪声图像');
subplot(2,3,4);imshow(fr1);title('逆滤波结果(有噪声)');
subplot(2,3,5);imshow(fr2);title('计算噪信比K值滤波结果');
subplot(2,3,6);imshow(fr3);title('使用自相关函数的维纳滤波结果');

 

posted @   放氮气的蜗牛  阅读(77)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示