Matlab图像噪声处理

一.内容

对一幅灰度图像f(x,y) 

(1)对f(x,y)加高斯白噪声和椒盐噪声; 

(2)分别画出原图和加噪后的图像及其各自对应的直方图;

(3)用几何均值滤波分别对加高斯噪声和椒盐噪声图进行滤波处理,并进行比较; 

(4)用自适应中值滤波分别对加高斯噪声和椒盐噪声图进行滤波处理;并进行比较。 

注:滤波窗口可根据需要自行设定。

二.分析

1.对f(x,y)加高斯白噪声和椒盐噪声,并画出原图和加噪后的图像及其各自对应的直方图;

 

temp_image = imread('lena.jpg');
I = rgb2gray(temp_image);
figure()
subplot(2,3,1)
imshow(I),title('原图');
subplot(2,3,4)
imhist(I),title('原图直方图')%显示原始图像直方图
J = imnoise(I,'salt & pepper',0.02);%椒盐噪声
subplot(2,3,2)
imshow(J),title('椒盐噪声');
subplot(2,3,5)
imhist(J),title('椒盐直方图')%显示椒盐图像直方图
G = imnoise(I,'gaussian',0.02,0.02);%高斯噪声
subplot(2,3,3)
imshow(G);title('高斯噪声');
subplot(2,3,6)
imhist(G),title('高斯直方图')%显示高斯图像直方图
 
 
Matlab图像噪声处理_第1张图片

2.用几何均值滤波分别对加高斯噪声和椒盐噪声图进行滤波处理,并进行比较;

几何均值滤波函数:

 
%gmean函数(几何均值滤波):
function f = gmean(g,m,n)
    g = im2double(g);
    f = exp(imfilter(log(g),ones(m,n),'replicate')).^(1/m/n);
end

3.用自适应中值滤波分别对加高斯噪声和椒盐噪声图进行滤波处理;并进行比较。

自适应中值滤波函数:

 

%RAMF函数(自适应中值滤波函数):
function f = RAMF(img)
[Im,In] = size(img);
nmin = 3;
nmax = 9;
Imf = img;
I_ex = [zeros((nmax-1)/2,In+(nmax-1));zeros(Im,(nmax-1)/2),img,zeros(Im,(nmax-1)/2);zeros((nmax-1)/2,In+(nmax-1))];
for x = 1:Im     
    for y = 1:In          
        for n = nmin:2:nmax                                
          Sxy =  
I_ex(x+(nmax-1)/2-(n-1)/2:x+(nmax-1)/2+(n-1)/2,y+(nmax-1)/2-(n-1)/2:y+(nmax-1)/2+(n-1)/2);                  
            Smax = max(max(Sxy));%求出窗口内像素的最大值                 
            Smin = min(min(Sxy));%求出窗口内像素的最小值               
            Smed = median(median(Sxy));%求出窗口内像素的中值              
            %判断中值是否是噪声点              
            if Smed > Smin && Smed < Smax                
                %若中值既大于最小值又小于最大值,则不是             
                %是,则退出该if语句,增大窗口尺寸,再次判断            
                %不是,则判断该点的原值是不是噪声点                 
                if Imf(x,y) <= Smin || Imf(x,y) >= Smax                      
                    %若该点的原值既大于最小值又小于最大值,则不是                  
                    %不是,则输出原值,即不作处理                
                    %是,则输出中值                  
                    Imf(x,y) = Smed;                 
                end
                break%有输出则不再进行循环判断             
            end
        end
        %当n=max时,输出中值      
        Imf(x,y) = Smed;   
    end
end
f = Imf;
end
 

4.滤波并比较显示:

I_1 = gmean(I,3,3);J_1 = gmean(J,3,3);G_1 = gmean(G,3,3);%3*3几何均值滤波
figure()
subplot(3,2,1)
imshow(I_1);title('原图几何滤波');
subplot(3,2,3)
imshow(J_1);title('椒盐几何滤波');
subplot(3,2,5)
imshow(G_1);title('高斯几何滤波');
I_2 = RAMF(I);J_2 = RAMF(J);G_2 = RAMF(G);%自适应中值滤波
subplot(3,2,2)
imshow(I_2);title('原图自适应中值滤波');
subplot(3,2,4)
imshow(J_2);title('椒盐自适应中值滤波');
subplot(3,2,6)
imshow(G_2);title('高斯自适应中值滤波');
 

Matlab图像噪声处理_第2张图片

你可能感兴趣的:(图像处理)