matlab練習程序(圖像濾波時的邊界處理2)


  我真是弱爆了,我原來以為邊界處理用我上一篇的方法就能很好的處理了,結果效果並不好。我只是和標准的imfilter函數進行了比較,其實imfilter函數還有一些參數我沒用上,比如‘replicate’,'symmetric'等,如果加上這些參數,我的效果就比不上matlab的效果了,所以這次不用上一篇的方法了,就用邊界擴展好了。

  邊界擴展是把原圖的四周都加上r個像素,並且把這r個像素的值用原圖最外圍的r個像素來替代,然后再對新圖像濾波,取原圖的大小就行了。這種方法雖然在時間與空間復雜度上比我上一篇方法稍高,不過效果的確很好,代碼也很簡潔。

clear all;
close all;
clc;
r=20;
w=fspecial('average',[2*r+1 2*r+1]);

img=imread('lena.jpg');
img=mat2gray(img);
[m n]=size(img);
imshow(img);

imgn=zeros(m+2*r+1,n+2*r+1);
imgn(r+1:m+r,r+1:n+r)=img;

imgn(1:r,r+1:n+r)=img(1:r,1:n);                 %擴展上邊界
imgn(1:m+r,n+r+1:n+2*r+1)=imgn(1:m+r,n:n+r);    %擴展右邊界
imgn(m+r+1:m+2*r+1,r+1:n+2*r+1)=imgn(m:m+r,r+1:n+2*r+1);    %擴展下邊界
imgn(1:m+2*r+1,1:r)=imgn(1:m+2*r+1,r+1:2*r);       %擴展左邊界


for i=r+1:m+r
    for j=r+1:n+r        
        s=imgn(i-r:i+r,j-r:j+r).*w;
        imgn(i,j)=sum(sum(s))/sum(sum(w));
    
    end
end
figure;
imshow(mat2gray(imgn(r+1:m+r,r+1:n+r)));

figure;
img=imfilter(img,w,'replicate');
imshow(mat2gray(img))

下面是處理后的效果,可以看出相比上一篇中圖像這里四周的黑色已經沒有了。雖然后面兩幅有些不同,不過那只是邊界擴展時用的方法不同而已,用不同的方法擴展邊界肯定會有不同的效果哦。

原圖

自己的方法濾波

直接調用系統函數濾波


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM