星期五, 1月 05, 2007

雜訊去除


形態學

Opening(斷開)運算:
opening運算是先被侵蝕後再膨脹,通常是用來平滑影像輪廓,截斷窄的細頸,消除細的突支,其原理如下:
(一)膨脹:將物體的邊界往外膨脹若干像素的方法。 如下圖:


(二)侵蝕:與膨脹相反的動作,這是一種從物體的邊界上,將物體往內收縮若干像素。
如下圖:


斷開圖如下



標記法:
兩像素間關係有下述兩種性質:
(一)像素的近鄰(neighbors):
在座標(x,y)處的像素P有水平和垂直方向的近鄰,其座標為
(x-1,y),(x+1,y),(x,y+1),(x,y-1),
這樣一組像素稱P點的4-近鄰(4-nieghbors)。

P的四個對角近鄰的座標為(x-1,y+1),(x+1,y+1),(x-1,y-1),(x+1,y-1),
這些點與4-近鄰在一起,稱為P的8-近鄰(8-neighbors)。

(二)連通性(Connectivity):
像素間的連通性是用於確定影像中物體邊界和區域組成成分的重要概念。
要判斷兩個像素是否連通,必須要確定它們是否在某種意義中相鄰(比如它們是否為4-近鄰),
並且它們的灰度值是否滿足特定的相似準則,(比如灰度值是否相同)。
在此我們用V來定義連通性的灰階集合,並介紹二種類型的連通:
(a)4-連通:
若某一像素Q 位於4-近鄰( P)中,且Q和P的像素值位於所定的灰度值(V)中,則稱4-連通。
(b)8-連通:
若某一像素Q位於8-近鄰( P)中,且Q和P的像素值位於所定的灰度值(V)中,則稱8-連通。

(三)標記法原理:
標記法是使用在二值化影像,白色為255,黑色為0,p表掃描過程中之像素值;
先由左而右,再由上而下掃描影像,在此只考慮4-連通分量。
當掃描到為0的時則移動到下一掃描位置,當掃描到p為255的,並根據其連通性檢查p點的左方和上方,如果它們均為0的為話,給p一個新的標記值,如果這二個近鄰中只有一個為255,
則把它的標記給予p,如果它們都是255且標記相同,則把這個標記給予p。
如果它們都是255但標記不同,則把其中一個標記給予p,並標明這兩個標記是等價的。
掃描結束後所有值為255的點都被標記過了,但有些標記是可能是等價的,所以再對影像作第二次掃描,將所有被記錄為等價的標記值改成相同的標記。

clear all
close all
clc
a=imread('su.jpg'); % 輸入影像
[c1,c2,c3]=size(a);

b=rgb2ycbcr(a); % 轉換成ycbcr
cb=b(:,:,2);
cr=b(:,:,3);

cb(cb<=125)=255; % cb的判斷式,是人臉為白色 cb(cb~=255)=0; cr(cr>=137)=255; % cr的判斷式,是人臉為白色
cr(cr~=255)=0;

rr=and(cr,cb); % 二者相同
figure(3);imshow(uint8(rr.*255))

se=strel('disk',2);%用open過濾膚色圖像
bw= imopen(rr,se);
figure(4);imshow(bw)

%用open過濾後的圖,再用標記法來找出最大區塊
l=bwlabel(bw,8); % 標記法

stats=regionprops(l,'Area'); % 找出相同的並統計
allArea=[stats.Area];
tt=max(allArea); % 找出最大的區塊
idx=find(allArea==tt);
bw2=ismember(l,idx);
figure(5);imshow(bw2)%過濾後的人臉圖像

%執行結圖
原始圖







膚色切割圖









去除雜訊







找出最大區塊圖





失敗的例子

1 則留言:

z 提到...

那麼我想請問雜訊為何會連續接成一條線呢

花蓮的海豚

花蓮的海豚