数字图像处理实验九维纳滤波
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('使用自相关函数的维纳滤波结果');
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了