【实验三】图像复原

【实验目的】

1、理解退化模型。

2、掌握常用的图像复原方法。

【实验内容】

1、模拟噪声的行为和影响的能力是图像复原的核心。

2、空域滤波

 【实验作业】

1、产生至少 2 种不同类型的噪声,并绘制原图像、加噪后图像及对应直方图于一个图形窗口中[subplot(m,n,p)]。

%1.1
lena = imread('实验三\实验三材料\lena.bmp');
lena1 = imnoise(lena,'gaussian');
A = imhist(lena1);
subplot(2,3,1),imshow(lena)
title('原图像');
subplot(2,3,2),imshow(lena1)
title('高斯白噪声图像');%噪声类型1
subplot(2,3,3),plot(A)
title('直方图');
lena2 = imnoise(lena,'salt & pepper',0.2);%噪声类型2
B = imhist(lena2);
subplot(2,3,4),imshow(lena)
title('原图像');
subplot(2,3,5),imshow(lena2)
title('椒盐噪声图像');
subplot(2,3,6),plot(B)
title('直方图');

 2、对有椒盐噪声图像进行 5×5 方形窗口中值滤波。 (附加内容:自编程实现均值、中值、自适应中值滤波器)

%1.2
C = medfilt2(lena2,[5 5]);
figure,subplot(1,2,1),imshow(lena2)
title('椒盐噪声图像');
subplot(1,2,2),imshow(C)
title('5×5 方形窗口中值滤波');

 附加内容:


clc;
clear;
f=imread('实验三\实验三材料\lena.bmp');
image_gray=im2gray(f);%得到灰度图像
ff =image_gray;
ff(:) = 0;
alreadyProcessed = false(size(image_gray));%生成逻辑非的矩阵
% 迭代.
Smax=7;
for k = 3:2:Smax
zmin = ordfilt2(image_gray, 1, ones(k, k), 'symmetric');
zmax = ordfilt2(image_gray, k * k, ones(k, k), 'symmetric');
zmed = medfilt2(image_gray, [k k], 'symmetric');
processUsingLevelB = (zmed > zmin) & (zmax > zmed) & ...
~alreadyProcessed; 
zB = (image_gray > zmin) & (zmax > image_gray);
outputZxy = processUsingLevelB & zB;
outputZmed = processUsingLevelB & ~zB;
ff(outputZxy) = image_gray(outputZxy);
ff(outputZmed) = zmed(outputZmed);
alreadyProcessed = alreadyProcessed | processUsingLevelB;
if all(alreadyProcessed(:))
break;
end
end
ff(~alreadyProcessed) = zmed(~alreadyProcessed);
f1=imnoise(image_gray,'salt & pepper',0.2);%添加椒盐噪声后的图像,与题1.1的噪声数值相同
f2=medfilt2(f1,[3,3]);%中值滤波后的图像
subplot(2,2,1);
imshow(image_gray);
title('原图');
subplot(2,2,2);
imshow(f1);
title('椒盐噪声污染后的图像');
subplot(2,2,3);
imshow(f2);
title('中值滤波');
subplot(2,2,4);
imshow(ff);
title('自适应中值滤波');

 自适应中值滤波器参考代码:

[1] CSDN: http://t.csdn.cn/MfyUv

[2]

function f = adpmedian(g, Smax)
% ADPMEDIAN Perform adaptivev median filtering.
%   F = ADPMEDIAN(G, SMAX) performs adaptive median filtering of image G.
%   The median filter starts at size 3-by-3 and iterates up to size
%   SMAX-by-SMAX. SMAX must be an odd integer greater than 1.

% SMAX must be an odd, positive integer greater than 1.
if (Smax <= 1)|(Smax/2 == round(Smax/2))|(Smax ~= round(Smax))
    error('Smax must be an odd integer >1.')
end
% Initial setup
f = g;
f(:) = 0;
alreadyProcessed = false(size(g));
% Begin filtering
for k = 3:2:Smax
    zmin = ordfilt2(g, 1, ones(k,k), 'symmetric');
    zmax = ordfilt2(g, k*k, ones(k,k), 'symmetric');
    zmed = medfilt2(g, [k k], 'symmetric');
    processUsingLevelB = (zmed > zmin) & (zmax > zmed) &  ~alreadyProcessed;
    zB = (g > zmin) & (zmax > g);
    outputZxy = processUsingLevelB & zB;
    outputZmed = processUsingLevelB & ~zB;
    f(outputZxy) = g(outputZxy);
    f(outputZmed) = zmed(outputZmed);
    
    alreadyProcessed = alreadyProcessed | processUsingLevelB;
    if all(alreadyProcessed(:))
        break;
    end
end
% Output zmed for any remaining unprocessed pixels. Note that this zmed was
% computed using a window of size Smax-by-Smax, which is the final value of
% k in the loop.
f(~alreadyProcessed) = zmed(~alreadyProcessed);
end

【实验资料】

https://download.csdn.net/download/weixin_56463218/87684264?spm=1001.2014.3001.5501

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellenionia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值