SayCoo論壇

查看: 5311|回復: 5
打印 上一主題 下一主題

matlab 作平滑濾波 3X3 5X5 全彩黑白

[複製鏈接]
跳轉到指定樓層
1
發表於 2006-8-25 19:35:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這幾天練習的時候寫的...

首先是3X3 濾波 + 2值化

clear all, close all;
[x,map]=imread('F:\My Documents\My Pictures\boa\cu.jpg');
figure, imshow(x); %make 1 figure to show image.
%m=rgb2gray(x);% rgb -> gray
%figure(2), imshow(m);
m=double(x)
[x,y,z]=size(x) ;
imfull=zeros(x,y,z); %Matrix of full image
fil=zeros(1,9); %matrix of filter with 3 * 3.
for q=1:3 ;% rgb
    for o=2:x-1 ;% every 2nd to the one before the last
        for p=2:y-1; % every 2nd to the one before the last
            fil(1) = m(o-1,p-1,q);%matrix (1,1)
            fil(2) = m(o-1,p,q);%matrix (1,2)
            fil(3) = m(o-1,p+1,q);%matrix (1,3)
            fil(4) = m(o,p-1,q);%matrix (2,1)
            fil(5) = m(o,p,q);%matrix (2,2)
            fil(6) = m(o,p+1,q);%matrix (2,3)
            fil(7) = m(o+1,p-1,q);%matrix (3,1)
            fil(8) = m(o+1,p,q);%matrix (3,2)
            fil(9) = m(o+1,p+1,q);%matrix (3,3)
            imfull(o,p,q) = sum(sum(fil))/9;
        end
    end
end
n=uint8(imfull);
figure(3),imshow(n);
BW=im2bw(n,0.7);
figure(4), imshow(BW);

[ 本帖最後由 zet0r 於 2006-8-25 07:36 PM 編輯 ]
2
 樓主| 發表於 2006-8-25 19:37:57 | 只看該作者
這是先轉灰階, 再濾波之後才2值化.
可以比對依下差別

clear all, close all;
[x,map]=imread('F:\My Documents\My Pictures\boa\cu.jpg');
figure, imshow(x); %make 1 figure to show image.
m=rgb2gray(x);% rgb -> gray
figure(2), imshow(m);
[x,y,z]=size(m) ;
b=zeros(x,y,z); %Matrix of full image
r=zeros(1,9); %matrix of filter with 3 * 3.
for q=1:3 ;% rgb
for o=2:x-1 ;% every 2nd to the one before the last
      for p=2:y-1; % every 2nd to the one before the last
        r(1) = m(o-1,p-1);%matrix (1,1)
        r(2) = m(o-1,p);%matrix (1,2)
        r(3) = m(o-1,p+1);%matrix (1,3)
        r(4) = m(o,p-1);%matrix (2,1)
        r(5) = m(o,p);%matrix (2,2)
        r(6) = m(o,p+1);%matrix (2,3)
        r(7) = m(o+1,p-1);%matrix (3,1)
        r(8) = m(o+1,p);%matrix (3,2)
        r(9) = m(o+1,p+1);%matrix (3,3)
        b(o,p) = sum(r)/9;
    end
end
end
n=uint8(b);
figure(3),imshow(n);
BW=im2bw(n,0.7);
figure(4), imshow(BW);
回復 支持 反對

使用道具 舉報

3
 樓主| 發表於 2006-8-25 19:39:50 | 只看該作者
5X5 彩色平滑濾波, 2值化:

clear all, close all;
[x,map]=imread('F:\My Documents\3-18.jpg');
figure(1), imshow(x); %make 1 figure to show image.
m=double(x);
[x,y,z]=size(m);
r=zeros(x,y,z);
filter=zeros(1,25);
for i=1:3;
    for o=3:x-2;
        for p=3:y-2;
            filter(1)=m(o-2,p-2,i);
            filter(2)=m(o-1,p-2,i);
            filter(3)=m(o,p-2,i);
            filter(4)=m(o+1,p-2,i);
            filter(5)=m(o+2,p-2,i);
            filter(6)=m(o-2,p-1,i);
            filter(7)=m(o-1,p-1,i);
            filter(8)=m(o,p-1,i);
            filter(9)=m(o+1,p-1,i);
            filter(10)=m(o+2,p-1,i);
            filter(11)=m(o-2,p,i);
            filter(12)=m(o-1,p,i);
            filter(13)=m(o,p,i);
            filter(14)=m(o+1,p,i);
            filter(15)=m(o+2,p,i);
            filter(16)=m(o-2,p+1,i);
            filter(17)=m(o-1,p+1,i);
            filter(18)=m(o,p+1,i);
            filter(19)=m(o+1,p+1,i);
            filter(20)=m(o+2,p+1,i);
            filter(21)=m(o-2,p+2,i);
            filter(22)=m(o-1,p+2,i);
            filter(23)=m(o,p+2,i);
            filter(24)=m(o+1,p+2,i);
            filter(25)=m(o+2,p+2,i);
            r(o,p,i)=sum(sum(filter))/25;
        end
    end
end
r=uint8(r);
figure(2),imshow(r);
BW=im2bw(r,0.7);
figure(4), imshow(BW);
回復 支持 反對

使用道具 舉報

4
 樓主| 發表於 2006-8-25 19:43:02 | 只看該作者
5X5, 彩色, 黑白各別濾波之後再個別顯示出來, 將黑白的作二值化!


clear all, close all;
[x,map]=imread('F:\My Documents\3-18.jpg');





figure(1), imshow(x); %make 1 figure to show image.
blackwhite=rgb2gray(x);
figure(3), imshow(blackwhite);
m=double(x);
m2=double(blackwhite);
[x,y,z]=size(m);
[x2,y2,z2]=size(m2);
r=zeros(x,y,z);
r2=zeros(x2,y2,z2);
filter=zeros(1,25);
filter2=zeros(5,5);
for i=1:3;
    for o=3:x-2;
        for p=3:y-2;
            filter(1)=m(o-2,p-2,i);
            filter(2)=m(o-1,p-2,i);
            filter(3)=m(o,p-2,i);
            filter(4)=m(o+1,p-2,i);
            filter(5)=m(o+2,p-2,i);
            filter(6)=m(o-2,p-1,i);
            filter(7)=m(o-1,p-1,i);
            filter(8)=m(o,p-1,i);
            filter(9)=m(o+1,p-1,i);
            filter(10)=m(o+2,p-1,i);
            filter(11)=m(o-2,p,i);
            filter(12)=m(o-1,p,i);
            filter(13)=m(o,p,i);
            filter(14)=m(o+1,p,i);
            filter(15)=m(o+2,p,i);
            filter(16)=m(o-2,p+1,i);
            filter(17)=m(o-1,p+1,i);
            filter(18)=m(o,p+1,i);
            filter(19)=m(o+1,p+1,i);
            filter(20)=m(o+2,p+1,i);
            filter(21)=m(o-2,p+2,i);
            filter(22)=m(o-1,p+2,i);
            filter(23)=m(o,p+2,i);
            filter(24)=m(o+1,p+2,i);
            filter(25)=m(o+2,p+2,i);
            r(o,p,i)=sum(sum(filter))/25;
        end
    end
end

for i2=1:3;
    for p2=3:y2-2;
        for o2=3:x2-2;
            filter2(1)=m2(o2-2,p2-2);
            filter2(2)=m2(o2-1,p2-2);
            filter2(3)=m2(o2,p2-2);
            filter2(4)=m2(o2+1,p2-2);
            filter2(5)=m2(o2+2,p2-2);
            filter2(6)=m2(o2-2,p2-1);
            filter2(7)=m2(o2-1,p2-1);
            filter2(8)=m2(o2,p2-1);
            filter2(9)=m2(o2+1,p2-1);
            filter2(10)=m2(o2+2,p2-1);
            filter2(11)=m2(o2-2,p2);
            filter2(12)=m2(o2-1,p2);
            filter2(13)=m2(o2,p2);
            filter2(14)=m2(o2+1,p2);
            filter2(15)=m2(o2+2,p2);
            filter2(16)=m2(o2-2,p2+1);
            filter2(17)=m2(o2-1,p2+1);
            filter2(18)=m2(o2,p2+1);
            filter2(19)=m2(o2+1,p2+1);
            filter2(20)=m2(o2+2,p2+1);
            filter2(21)=m2(o2-2,p2+2);
            filter2(22)=m2(o2-1,p2+2);
            filter2(23)=m2(o2,p2+2);
            filter2(24)=m2(o2+1,p2+2);
            filter2(25)=m2(o2+2,p2+2);
            r2(o2,p2)=sum(sum(filter2))/25;
            
               
        end
    end
end
r=uint8(r);
r2=uint8(r2);
figure(2),imshow(r);
figure(5),imshow(r2);
BW=im2bw(r2,0.5);
figure(6), imshow(BW);
回復 支持 反對

使用道具 舉報

5
發表於 2006-8-30 01:03:46 | 只看該作者
你可以用 function 來寫...

這樣程式會更簡潔!!

debug也比較容易!!
回復 支持 反對

使用道具 舉報

6
 樓主| 發表於 2006-8-30 01:43:17 | 只看該作者
沒用過... 我接觸matlab才1個月不到= =!!
你可以幫我舉例看看嘛?
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 加入會員

本版積分規則

手機版|黑名單|SayCoo論壇

GMT+8, 2024-4-30 14:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表