iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 9
1

上一次的影像處理是說細線化,把物件的邊界更分明
這一次再介紹一種影像處理的方式
面對一些影像的雜訊(通常雜訊為高頻,即白點),我們可以利用排序統計濾波器(又名:中值濾波法)

這方式處理影像也是類似利用遮罩的方式處理,我們以3x3的遮罩為例
1)從整個影像左上角開始處理
2)中間像素開始,往八方面延伸,形成3x3的遮罩
3)把3x3遮罩中,9個像素從小至大排順序
4)把順序第5位的像素,代替並更新中間像素

目的:因為雜訊為高頻,即像素會突然上升,形成白點
因此以3x3遮罩,並按小至大排順序,是希望把雜訊分割
按遮罩中的像素比率,平滑影像

======================分格線======================

https://ithelp.ithome.com.tw/upload/images/20171227/20107818yJ0wl761sB.png
上圖為3x3的遮罩
我們可以看到整個影像明顯是較為暗沉(像素較低)
因此可以明顯知道遮罩中有2處雜訊(分別為231,211)
把這9個像素取出
6,8,2,4,231,4,211,7,5
再按小至大排順序
2,4,4,5,6,7,8,231,211
把順序第5位的像素,代替並更新中間像素
因此「6」便會代替「231」
https://ithelp.ithome.com.tw/upload/images/20171227/20107818ApEGjD8tKg.png

好處:解決輸出影像模糊化的問題
缺點:1)因為處理是用排順序方式,因此如果在遮罩中出現多次高頻雜訊,便無法使用
2)3x3的遮罩最高只可以容納4個高頻雜訊
3)正常影像要與高頻雜訊產生較明顯的差距

======================分格線======================

概念是這樣,程式碼如下
我先大概解說

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;
}

sort:為輸入function的像素
max:為排順序後第5位最高的像素
i:為找出排順序後的中位數

======================分格線======================

https://ithelp.ithome.com.tw/upload/images/20171227/20107818KYPxYuMn4Q.png
上圖為原始影像
影像有許多雜訊

https://ithelp.ithome.com.tw/upload/images/20171227/20107818Tzrfgb2tTd.png
上圖為利用3x3遮罩處理後之影像

例子2

https://ithelp.ithome.com.tw/upload/images/20171227/20107818x27AX0YLhe.png
上圖為原始影像
可以觀看到不同程度的雜訊

https://ithelp.ithome.com.tw/upload/images/20171227/20107818HD2WjMTpY0.png
上圖為利用3x3遮罩處理後之影像
對於不同程度的雜訊,也有不同程度的影響

======================心得======================
一直打混是不行的,要開始研究一下新程式
今天先到這,程式解說、優缺點、優化方式,請大家耐心等待...
又面對畢業專題、期未考...希望還可以堅持30天
可以在這裡宣傳的嗎?我最近缺實習跟公司的訓練營....(希望不要因為學校被優先刷走


上一篇
陣列中找出正方形 [2]程式
下一篇
[影像處理系列] 排序統計濾波器[2]
系列文
提神?看程式比喝咖啡更有效。30

1 則留言

0
微中子
iT邦新手 4 級 ‧ 2017-12-27 21:31:49

最近沒啥公司在開實習缺

我要留言

立即登入留言