%%%%%%------------------图像复原之空间滤波---------------------------------
clc;
clear;
%读入图像,并转换为double型
I=imread('D:\Gray Files\5-13.tif');
I_D=im2double(I);
[MM,NN]=size(I_D);
%%%%%----------------------3、自适应滤波器---------------------------------
%%======================= 3.1 自适应噪声削减滤波器=========================
%此测试图像,叠加了均值为0,方差为1000的加性高斯白噪声
%定义子窗口的尺寸
m=7;
n=7;
%确定要扩展的行列数
len_m=floor(m/2);
len_n=floor(n/2);
%将原始图像进行扩展,这里采用了镜像扩展,以进行图像边缘计算
I_D_pad=padarray(I_D,[len_m,len_n],'symmetric');
%获得扩展后的图像尺寸
[M,N]=size(I_D_pad);
%加性高斯白噪声的方差
var_noise=1000;
J_AdaptiveReduction=zeros(MM,NN);
%逐点叠加窗口的噪声削减
for i=1+len_m:M-len_m
for j=1+len_n:N-len_n
%从扩展图像中取出子图像
Block=I_D_pad(i-len_m:i+len_m,j-len_n:j+len_n);
%将多维矩阵转换为一维数组
Block=Block(:);
%求局部图像的方差
var_block=var(Block);
%求局部图像的均值
mb=mean(Block);
if var_noise>var_block
v=1;
else
v=var_noise/var_block;
end
%叠加到原始图像上
J_AdaptiveReduction(i-len_m,j-len_n)=I_D(i-len_m,j-len_n)-v*(I_D(i-len_m,j-len_n)-mb);
end
end
imshow(J_AdaptiveReduction);
title('自适应噪声削减滤波器');