這次做的是filter運用
分別有兩個
1.平滑化
(filter範圍內的值分別乘以filter範圍內的色彩值後相加)/filter值的和。
PS. filter值的和不為0
EX:以3*3來說,這9個座標內的色彩值相加/9,再把值傳回。
1,1,1
1,1,1
1,1,1
簡單說就是中心點+8近鄰去平均再傳回,所以值會被周圍色彩值影響變的較為平滑。
===========================================================
原圖
===========================================================
5*5
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
1,1,1,1,1
___________________________________________________________
2.銳利化
這邊Filter跟前面其實很像
(filter範圍內的值分別乘以filter範圍內的色彩值後相加)
PS. filter內的值和要為0
不過要注意因為有負數,所以當抓取RGB色彩值時要轉成int再去做運算
當做完恭喜你,你已經做好了拉普拉斯轉換!!
不過這只是中心點與8近鄰差異量。
所以銳利化 = 中心點色彩值 + 常數C * 拉普拉斯(中心點與8近鄰差異量)。
常數C 為判斷加或減所以值為 +1 or -1 (看中心點為正就加,反之則減) 。
差點忘了!!由於它是屬於+ - 運算,所以可能小值減大值,或大值+大值,發生溢位。
所以要記得收斂到0~255(就超過255就給255,低於0就給0)。
所以公式就是 原圖+(拉普拉斯)
當拉普拉斯為正才顏色較深,反之為負較淺,所以就有銳利效果。
===========================================================
所以
0,-1, 0
-1, 4,-1
0,-1, 0
和
0, 1, 0
1,-4, 1
0, 1, 0
是一樣低
===========================================================
-1,-1,-1
-1, 8,-1
-1,-1,-1
和
1, 1, 1
1,-8, 1
1, 1, 1
由此兩張圖可知,受越多鄰近影響,銳利化程度越明顯。
===========================================================
下圖就貼一下有程式低~~證實
貼一張5*5低
-1,-1,-1,-1,-1
-1,-1,-1,-1,-1
-1,-1,24,-1,-1
-1,-1,-1,-1,-1
-1,-1,-1,-1,-1
補充:
至於為啥轉換過後的圖都有一層白框,
那是因為我們用ScanLine,把它當二維陣列中的一維
3*3
ScanLine[i-1]
ScanLine[ i ]
ScanLine[i+1]
5*5
ScanLine[i-2]
ScanLine[i-1]
ScanLine[ i ]
ScanLine[i+1]
ScanLine[i+2]
而ScanLine[?]------------> ?=0
所以起始位置以3*3來說(1,1)開始填,5*5的話就是(2,2)。
沒有留言:
張貼留言