1. 程式人生 > >自定義比例的GS噪聲和椒鹽噪聲的加入和阿爾法修正的均值濾波的實現

自定義比例的GS噪聲和椒鹽噪聲的加入和阿爾法修正的均值濾波的實現

椒鹽噪聲的加入和GS噪聲的加入程式已經爛大街(GS噪聲公式很不好想,可能會間歇性遺忘),在這主要是展示下特定比例的實現(其實也很簡單)程式碼直接粘了:

jiaoyan:

im=double(imread('board-orig.bmp'));

[m,n]=size(im);

imout=zeros(m,n);

for i=1:m
    for j=1:n
        t=rand;
        if t>0.2
            imout(i,j)=im(i,j);
        elseif t<0.1
                imout(i,j)=255;
            else
                imout(i,j)=0;
            end
        end
end
    im3=uint8(imout);
imshow(im3);

GSNoise:  

function im2 = GSNoise(im, e, sigma)
[m,n] = size(im);
randm=rand(m,n);                    %生成隨機矩陣(0-1)
GSm=randm<0.2;                      %選取百分之20的點加噪
for i = 1:m
    for j = 1:n
        temp = rand(1)*255 - 255/2;  %產生-127-127的隨機數
        sigma2 = sigma*sigma*2;
        PI2 = pi*2;
        sigmaPI2 = sqrt(PI2*sigma);
        GaussValue  = exp(-temp/sigma2)/sigmaPI2;
        im2(i,j) = im(i,j) + (e + sigma*GaussValue)*GSm(i,j);
    end 
end
imshow(im2);
end

帶阿爾法修正的均值濾波主要涉及到一個排序操作,第二次寫卷積,不是很熟練,程式碼可能有冗雜。

AF.m

function im4 = AF(im2,si,d)              %si:卷積和邊長;d:被去掉的首尾數
[m,n] = size(im2);                       %控制檯輸入加噪影象'im2'
NoiseNum = m*n;
s=(si-1)/2;                              %si:要擴充的邊長值
im22=zeros(m+s,n+s);                     %構造擴充邊緣矩陣
im22(s+1:s+m,s+1:s+n)=im2;              
for ii=1:s
im22(ii,s+1:s+n)=im2(1,:);              %上方行
im22(ii+m+s,s+1:s+n)=im2(m,:);          %下方行
im22(s+1:s+m,ii)=im2(:,1);              %左部列
im22(s+1:s+m,ii+n+s)=im2(:,n);          %右部列
end
for iii=1:s
    for jjj=1:s
        im22(iii,jjj)=im2(1,1);        %左上角
        im22(s+m+iii,jjj)=im2(m,1);    %左下角
        im22(iii,s+n+jjj)=im2(1,n);    %右上角
        im22(s+m+iii,s+n+jjj)=im2(m,n);%右下角
    end
end
 for i = s+1:s+m
     for j = s+1:s+n
         pick_=im22(i-(si-1)/2:i+(si-1)/2,j-(si-1)/2:j+(si-1)/2);%取鄰域
         pick=reshape(pick_',1,si*si);                           %變向量方便排序
        % pick=[im1(i-1,j-1),im1(i-1,j),im1(i-1,j+1),im1(i,j-1),im1(i,j),im1(i,j+1),im1(i+1,j-1),im1(i+1,j),im1(i+1,j+1)];
         %pick1=reshape(pick,3,3);
         %pick2=pick1';
         [paixu index]=sort(pick);     %排序並記錄索引      
         zhongjian(1,1:si*si)=1;       %中間矩陣方便計算、轉換
         for k=1:d/2
         zhongjian(1,index(1,k))=0;            %去最小值(椒)
         zhongjian(1,index(1,si*si+1-k))=0;    %去最大值(鹽)
         end
         filter1=reshape(zhongjian,si,si);     %轉回為矩陣
         filter2=filter1';                     %轉回為矩陣
         pick_=double(pick_);
         filter2=double(filter2);
         im4(i-s,j-s)=sum(sum((pick_.*filter2))')/(si*si-d);  %濾波過程,mn-d個畫素取平均;
     end
 end    
     im4=uint8(im4);
     im22=uint8(im22);
     subplot(2,2,1);imshow(im2);title('高斯噪聲');
     subplot(2,2,2);imshow(im4);title('高斯噪聲阿爾法');
     subplot(2,2,3);imshow(im22);title('im22');
end