1 打开图片
所有的滤波原始图片均使用下面的操作方式打开(只处理灰度图像):
% 读取图像 可以处理彩色多通道图片(转化为灰度图像)
[FileName,PathName,FilterIndex] = uigetfile({
'*.png;*.jpg;*.jpeg';'*.*'},'选择一幅待处理图片');
filename = fullfile(PathName, FileName) ;
SrcImg = imread(filename);
% setappdata(0,'SrcData',SrcImg);
% 获取图像的信息
[m n channels] = size(SrcImg);
if(channels > 1)
% 将彩色图象转为灰度图像
SrcImg = rgb2gray(SrcImg);
% 将灰度图像数据保存到SrcImg变量中,即后面滤波需要用到的原始数据,此时没有加噪声
setappdata(0,'SrcImg',SrcImg);
imshow(SrcImg);
else
% 将灰度图像数据保存到SrcImg变量中,即后面滤波需要用到的原始数据,此时没有加噪声
setappdata(0,'SrcImg',SrcImg);
imshow(SrcImg);
end
2 创建我们需要的噪声
对原始图像进行加噪声处理,即操作SrcImg
:
% 获取原始图像数据
SrcImg = getappdata('SrcImg');
% 变换
f = mat2gray(SrcImg,[0 255]);
% 获取图像大小信息
[M,N] = size(f);
%% 高斯噪声
a = 0;
b = 0.08;
n_gaussian = a + b .* randn(m,n);
g_gaussian = f + n_gaussian;
% show image
figure();
imshow(g_gaussian,[0 1]);
% 保存图片
imwrite(g_gaussian,'gaussianNoise.jpg','jpg');
xlabel('Ruselt of Gaussian noise');
%% 瑞利噪声
a = -0.2;
b = 0.03;
n_rayleigh = a + (-b .* log(1 - rand(M,N))).^0.5;
g_rayleigh = f + n_rayleigh;
% show image
figure();
imshow(g_rayleigh,[0 1]);
imwrite(g_rayleigh,'rayleighNoise.jpg','jpg');
xlabel(