廢話不多說,我們再看一次3x3遮罩的程式
int median(int *sort)
{
int i,j,n;
int max;
for( i=0; i<5; i++ ){
for( j=1, n=0, max=sort[0]; j<9; j++ ){
if( max<sort[j] ){
max = sort[j];
n = j;
}
}
sort[n] = -1;
}
return max;
}
以上程式為:3x3遮罩,共遮罩了9格,而中值是第5個位置
上圖為原始影像
上圖為3x3遮罩、排小至大順序後取第5位
上圖為3x3遮罩、排小至大順序後取第2位
上圖為3x3遮罩、排小至大順序後取第8位
===========================分格線===========================
接下來我們了解5x5的遮罩方式會否有不同?
int median(int *sort)
{
int i,j,n;
int max;
for( i=0; i<13; i++ ){
for( j=1, n=0, max=sort[0]; j<25; j++ ){
if( max<sort[j] ){
max = sort[j];
n = j;
}
}
sort[n] = -1;
}
return max;
}
5x5的遮罩,共需要為25個像素處理,而中位數是13
我們看看結果
上圖為5x5遮罩、排小至大順序後取第13位
上圖為5x5遮罩、排小至大順序後取第2位
上圖為5x5遮罩、排小至大順序後取第24位
===========================分格線===========================
5x5的遮罩看似比較好,那我們推論是否遮罩愈大,處理雜訊能力愈強
為了證明理論,我又做了7x7的遮罩
程式如下:
int median(int *sort)
{
int i,j,n;
int max;
for( i=0; i<25; i++ ){
for( j=1, n=0, max=sort[0]; j<49; j++ ){
if( max<sort[j] ){
max = sort[j];
n = j;
}
}
sort[n] = -1;
}
return max;
}
7x7的遮罩,共需要為49個像素處理,而中位數是25
上圖為7x7遮罩、排小至大順序後取第25位
上圖為7x7遮罩、排小至大順序後取第5位
上圖為7x7遮罩、排小至大順序後取第48位
===========================結論===========================
我們從以上的結果得知,遮罩愈大,處理雜訊能力愈強
但同時,較大的遮罩,對於雜訊的定義也較低
所以人類認為資訊的部份,卻被程式判定為雜訊
而排順序後,取不同的位置,也可以幫助影像判定雜訊
取較前的位置,影像會減少雜訊,
取較後的位置,影像則會放大雜訊的效果
遮罩愈大,也會把方形的直角處理成曲邊,這個也是需要注意的地方
影像利用排序統計濾波器處理雜訊後,可繼續為影像作細線化,令影像的邊界更明顯。