九、数字图像处理Matlab实验 第五章 图像复原与重建

在这里插入图片描述

实验所用教材配图资源:数字图像处理-冈萨雷斯-第三版(教材配图)
实验Matlab代码资源:数字图像处理 第五章 图像复原与重建(Matlab实验代码)

一、空间域复原:均值滤波器(算术均值滤波器、几何均值滤波器) P204

1.1 实验内容

显示对被加了高斯噪声的图片进行 算术 与 几何 均值滤波的结果

1.2 文件目录结构

在这里插入图片描述

1.3 Matlab代码

% 显示对被加了高斯噪声的图片进行 算术 与 几何 均值滤波的结果 P204
close all;clear all;clc;
% 读入图像
in = imread('Fig0507(ckt-board-orig).tif');
% 对图像加入高斯噪声(均值为0,方差为400)
g_in = double(imnoise(in, 'gaussian', 0,0.004));
 
% 使用掩模尺寸为 3*3 的算术均值滤波器对图像进行滤波
% 使用掩模尺寸为 3*3 的几何均值滤波器对图像进行滤波
size_ = 3;
out_arith = arithmetic(g_in,size_);
out_geo = geometry(g_in,size_);
 
show_ = {in,g_in,out_arith,out_geo};
title_ = {'(a)X射线图像','(b)被加性高斯噪声污染的图像','(c)使用大小为3*3的算术均值滤波器对图像滤波后的结果','(c)使用大小为3*3的几何均值滤波器对图像滤波后的结果'};
% 显示图像
figure;
for i = 1:length(show_)
    subplot(1,4,i);
    imshow(show_{i},[]);
    title(title_(i));
end
 

1.4 实验结果

在这里插入图片描述


二、空间域复原:均值滤波器(逆谐波均值滤波器) P205

2.1 实验内容

显示逆谐波均值滤波器对椒盐噪声的过滤实验

2.2 文件目录结构

在这里插入图片描述

2.3 Matlab代码

% 显示逆谐波均值滤波器对椒盐噪声的过滤实验 P205
close all;clear all;clc;
% 读入图像
in = imread('Fig0507(ckt-board-orig).tif');
[row,column] = size(in);
% 对原图像加胡椒噪声
p_in = double(imread('Fig0508(a)(circuit-board-pepper-prob-pt1).tif'));
 
% 对原图像加盐噪声
s_in = double(imread('Fig0508(b)(circuit-board-salt-prob-pt1).tif'));
 
 
size_ = 3;
a = (size_ - 1) / 2;
q_p = 1.5;
q_s = -1.5;
% 盐噪声的输出
s_out = [];
% 胡椒噪声的输出
p_out = [];
for r = 1:row
    if r <= a || r >= row - a
        continue;
    end
    for c = 1:column
       if c <= a || c >= column - a
        continue;
       end 
       
       % 掩模的中的操作
       sum1_a = 0;
       sum1_b = 0;
       sum2_a = 0;
       sum2_b = 0;
       for r1 = r - a : r + a
           for c1 = c - a : c + a
             % 使用大小为3*3、Q = 1.5的 逆谐波均值滤波器对胡椒噪声过滤
             sum1_a = sum1_a + p_in(r1,c1)^(q_p+1);  
             sum1_b = sum1_b + p_in(r1,c1)^q_p;
             % 使用大小为3*3、Q = -1.5的 逆谐波均值滤波器对盐噪声过滤
             sum2_a = sum2_a + s_in(r1,c1)^(q_s+1);
             sum2_b = sum2_b + s_in(r1,c1)^q_s;
           end
       end
       if sum1_b == 0
           sum1_b = 1;
       end
       p_out(r,c) = sum1_a / sum1_b;
       
       if sum2_b == 0
           sum2_b = 1;
       end
       s_out(r,c) = sum2_a / sum2_b;
    end
end
 
 
% 显示图像
show_ = {p_in,s_in,p_out,s_out};
title_ = {'(a)被概率为0.1的胡椒噪声污染的图像','(b)被相同概率的盐粒噪声污染的图像','(c)使用大小为 3*3 、阶数为1.5的逆谐波均值滤波器对图(a)滤波后的结果','(d)使用Q = -1.5的逆谐波均值滤波器对图(b)滤波后的结果'};
n = 4;
% show_ = {p_out,s_out};
% title_ = {'(a)使用大小为3*3 且 Q = -1.5的逆谐波滤波器对胡椒污染的图像进行过滤','(b)使用大小为3*3 且 Q = 1.5的逆谐波滤波器对盐污染的图像进行过滤'};
figure;
for i = 1:length(show_)
    subplot(1,n,i);
    imshow(show_{i},[]);
    title(title_{i});
end
 

2.4 实验结果

在这里插入图片描述

在这里插入图片描述


三、空间域复原:中值滤波器 P207

3.1 实验内容

使用中值滤波器对椒盐噪声进行滤波

3.2 文件目录结构

在这里插入图片描述

3.3 Matlab代码

% 使用中值滤波器对椒盐噪声进行滤波 P207
close all;clear all;clc;
% 读入图片
in = imread('Fig0507(ckt-board-orig).tif');
% 加入p = 0.1的椒盐噪声
in_salt_pepper = imnoise (in, 'salt & pepper',0.1);
 
% 一次中值滤波
size_ = 3;
out1 = median_filter(in_salt_pepper,size_);
out2 = median_filter(out1,size_);
out3 = median_filter(out2,size_);
% 显示图像
show_ = {in_salt_pepper,out1,out2,out3};
title_ = {'(a)被概率为0.1的椒盐噪声污染的图像','(b)使用大小为 3*3 的中值滤波器对图像滤波一次后的结果','(c)对图(b)再进行一次中值滤波','(d)对图(c)再进行一次滤波'};
 
figure;
for i = 1:length(show_)
    subplot(1,4,i);
    imshow(show_{i},[]);
    title(title_{i});
end

3.4 实验结果

在这里插入图片描述


四、空间域复原:最大值、最小值滤波器 P207

4.1 实验内容

显示使用最大值和最小值滤波器对椒盐噪声图像进行过滤

4.2 文件目录结构

在这里插入图片描述

4.3 Matlab代码

% 显示使用最大值和最小值滤波器对椒盐噪声图像进行过滤 P207
close all;clear all;clc;
% 读入图像
in = imread('Fig0507(ckt-board-orig).tif');
 
% 对原图像加胡椒噪声
p_in = double(imread('Fig0508(a)(circuit-board-pepper-prob-pt1).tif'));
 
% 对原图像加盐噪声
s_in = double(imread('Fig0508(b)(circuit-board-salt-prob-pt1).tif'));
 
% 使用最大值滤波器对胡椒噪声过滤
size_ = 3;
p_out = max_filter(p_in,size_);
 
% 使用最小值滤波器对盐噪声过滤
s_out = min_filter(s_in,size_);
 
% 显示图像
show_ = {p_in,s_in,p_out,s_out};
title_ = {'(a)加入胡椒噪声的图像','(b)加入盐噪声的图像','(c)使用最大值滤波器对图(a)进行过滤','(d)使用最小值滤波器对图(b)进行过滤'};
figure;
for i = 1:length(show_)
    subplot(1,4,i);
    imshow(show_{i},[]);
    title(title_{i});
end

4.4 实验结果

在这里插入图片描述


五、空间域复原:修正的阿尔法均值滤波器 P207

5.1 实验内容

显示使用修正的阿尔法均值滤波器对均匀噪声和椒盐噪声污染的图像进行过滤

5.2 文件目录结构

在这里插入图片描述

5.3 Matlab代码

% 显示使用修正的阿尔法均值滤波器对均匀噪声和椒盐噪声污染的图像进行过滤 P207
close all;clear all;clc;
% 读入图像
in = imread('Fig0507(ckt-board-orig).tif');
% 加入均匀噪声
u_in = imnoise(in,'speckle',0.008);
 
% 加入椒盐噪声
mix_in = imnoise(u_in,'salt & pepper',0.1);
mix_in = double(mix_in);
% 使用算术滤波器进行过滤
size_ = 5;
arith_out = arithmetic(mix_in,size_);
 
% 使用几何滤波器进行过滤
geo_out = geometry(mix_in,size_);
 
% 使用中值滤波器进行过滤
med_out = median_filter(mix_in,size_);
 
% 使用修正的阿尔法均值滤波器过滤
amend_out = amend_aerfa_average_filter(mix_in,size_,5);
 
% 显示图像
show_ = {u_in,mix_in,arith_out,geo_out,med_out,amend_out};
title_ = {'(a)被加性均匀噪声污染的图像','(b)再被加性椒盐噪声污染的图像','(c)使用大小为 5*5 的算术均值滤波器对图(b)滤波后的结果','(d)使用大小为 5*5 的几何均值滤波器对图(b)滤波后的结果','(e)使用大小为 5*5 的中值滤波器对图(b)进行滤波后的结果','(f)使用大小为 5*5 且 d=5 的修正后的阿尔法均值滤波器对图(b)滤波后的结果 '};
figure;
for i = 1:length(show_)
    subplot(2,3,i);
    imshow(show_{i},[]);
    title(title_{i});
end

5.4 实验结果

在这里插入图片描述


六、空间域复原:自适应局部降低噪声滤波器 P209

6.1 实验内容

显示自适应局部降低噪声滤波器的滤波的实验

6.2 文件目录结构

在这里插入图片描述

6.3 Matlab代码

% 显示自适应局部降低噪声滤波器的滤波的实验 P208
close all;clear all;clc;
% 读入图像
in = imread('Fig0513(a)(ckt_gaussian_var_1000_mean_0).tif');
 
% 加入高斯噪声
g_in = double(in);
% 算术均值滤波器滤波
size_ = 7;
arith_out = arithmetic(g_in,size_);
 
% 几何均值滤波器滤波
geo_out = geometry(g_in,size_);
 
% 自适应局部降低噪声滤波器滤波
arnf_out = area_reduce_noise_filter(g_in,size_,1000);
 
% 显示图像
show_ = {g_in,arith_out,geo_out,arnf_out};
title_ = {'(a)均值为0、方差为1000的加性高斯噪声污染的图像','(b)算术均值滤波的结果','(c)几何均值滤波的结果','(d)自适应降噪滤波的结果'};
figure;
for i = 1:length(show_)
    subplot(1,4,i);
    img = show_{i};
    img(img < 0) = 0;
    imshow(img,[]);
    title(title_{i});
end

6.4 实验结果

在这里插入图片描述


七、空间域复原:自适应中值滤波器 P210

7.1 实验内容

显示自适应中值滤波器滤波的实验

7.2 文件目录结构

在这里插入图片描述

7.3 Matlab代码

% 显示自适应中值滤波器滤波的实验 P210
close all;clear all;clc;
% 读入图片
in = imread('Fig0507(ckt-board-orig).tif');
% 加入p = 0.25的椒盐噪声
sp_in = imnoise (in, 'salt & pepper',0.25);
sp_in = double(sp_in);
% 使用 7*7 中值滤波器进行滤波
size_ = 7;
med_out = median_filter(sp_in,size_);
 
% 使用7*7的自适应中值滤波器
amf_out = adapter_med_filter(sp_in,size_);
 
%显示图像
show_ = {sp_in,med_out,amf_out};
title_ = {'(a)被概率为0.25的椒盐噪声污染的图像','(b)使用大小为7*7的中值滤波器对图像过滤的结果','(c)使用 Smax = 7的自适应的中值滤波器对图像滤波的结果'};
 
figure;
for i = 1:length(show_)
    subplot(1,3,i);
    imshow(show_{i},[]);
    title(title_{i});
end

7.4 实验结果

在这里插入图片描述


八、频率域消除周期噪声:带阻滤波器 P212

8.1 实验内容

显示带阻滤波器滤波的实验

8.2 文件目录结构

在这里插入图片描述

8.3 Matlab代码

% 显示带阻滤波器滤波的实验 P212
close all;clear all;clc;
% 读入图像
in = imread('Fig0516(applo17_boulder_noisy).tif');
[row,column] = size(in);
% 傅里叶变换(中心化)
dft_out = fftshift(fft2(double(in)));
 
% 布特沃斯带阻滤波器过滤
% 带宽
w = 10;
% 截止频率
% x = 190;
% y = 358;
% d0 = sqrt((x - row / 2 - 1)^2 + (y - column / 2 - 1)^2);
d0 = 180;
% 布特沃斯阶数
n = 2;
h_br = br_filter(row,column,w,d0,n);
% 过滤
g_br = dft_out .* h_br;
idft_br_out = real(ifft2(ifftshift(g_br)));
 
% 布特沃斯带通滤波器过滤
h_bp = ones(row,column) - h_br;
g_bp = dft_out .* h_bp;
idft_bp_out = real(ifft2(ifftshift(g_bp)));
 
% 显示图像
show_ = {in,log(1 + abs(dft_out)),h_br,idft_br_out,idft_bp_out};
title_ = {'(a)被正弦噪声污染的图像','(b)图(a)的谱','(c)布特沃斯带阻滤波器(白色代表1)','(d)带阻滤波的结果','(e)带通滤波结果'};
figure;
for i = 1:length(show_)
    subplot(2,4,i);
    imshow(show_{i},[]);
    title(title_{i});
end

8.4 实验结果

在这里插入图片描述


九、频率域消除周期噪声:陷波滤波器 P213

9.1 实验内容

显示陷波带阻滤波器滤波的实验

9.2 文件目录结构

在这里插入图片描述

9.3 Matlab代码

% 显示陷波带阻滤波器滤波的实验 P213
close all;clear all;clc;
% 读入图像
in = imread('Fig0519(florida_satellite_original).tif');
[row,column] = size(in);
 
% 傅里叶变换(中心化)
dft_out = fftshift(fft2(double(in)));
 
% 陷波带阻矩形滤波器
d0 = 10;
h_nr = nr_rectangle_filter(row,column,column/2 - 1,d0) .* nr_rectangle_filter(row,column,column/2,d0) .* nr_rectangle_filter(row,column,column/2 + 2,d0);
 
% 陷波带通矩形滤波器
h_np = double(ones(row,column)) - h_nr;
 
% 陷波带阻矩形滤波器滤波
g_nr = h_nr .* dft_out;
idft_nr_out = real(ifft2(ifftshift(g_nr)));
 
% 陷波带通矩形滤波器滤波
g_np = h_np .* dft_out;
idft_np_out = real(ifft2(ifftshift(g_np)));
 
% 显示图像
show_ = {in,log(1 + abs(dft_out)),h_np,idft_np_out,idft_nr_out};
title_ = {'(a)原图像','(b)原图像而定频谱','(c)垂直的带通矩形滤波器','(d)干扰信息的空间模式','(e)过滤干扰后的图像'};
figure;
for i = 1:length(show_)
    subplot(2,4,i);
    imshow(show_{i},[]);
    title(title_{i});
end

9.4 实验结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ModelBulider

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

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

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

打赏作者

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

抵扣说明:

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

余额充值