陳先生生日快樂!!!
Neighborhood Processing(鄰近地區的處理)
第五章整個主軸就繞在 Neighborhood Processing
只需要知道和 pixel 鄰近的gray 數值
然後再依據這些已知的 pixel(像素值) 的去改變 gray value。
5.1
講到 Mask ,一個移動的 Mask 是一個限定奇數長度的矩形
然而結合了 Mask 和 function 這兩種則被稱為 filter (濾除)
至於 function p.88~p.89 書上就舉了三個
p.88頁是讓 m 矩陣的pixel value 和相對應的 p 矩陣相乘,然後再把全部加起來。
p.89頁有說到Spatial filtering (空間上的濾除) 需要三個步驟
1. Mask 的位置是在 current pixel 之上。
2.算出濾除的要素和在要素的鄰近地區的所有product(乘積)
3.加上所有的乘積
問:current pixel的意思是?
我查字典current的意思是當前的
是指在 Mask 中任一位置的pixel?
還是?
至於書上寫的Spatial filtering (空間上的濾除) 是
Spatial convolution (空間上的迴旋積運算)
這個convolution運算我就不懂了。
p.90頁有舉例子
在原本的 image 的current pixel 是 e 那一點
並且平均值 也就是在新的 image 所被對應到的pixel 值
Matlab也有指令舉例
對一個5*5的矩陣以3*3的Mask去算平均值
mean2(x(1:3,1:3))
這指令依我的看法
前面的1:3是指從上到下的位置範圍開始
後面的1:3是指從左到右的位置範圍開始
以此類推後面是2:4 是指從左邊第2個開始到第4個範圍
後面是3:5 是指從左邊第3個開始到第3個範圍
整體就是一個3*3的Mask,去算9個value的平均值
所以最後會算出p.91下方的9個vaule
5.2Notation(標記法)
不知道要標記什麼。。。
p.92
寫到平均值的濾除可以用兩個矩陣相乘來表示
5.2.1 Image的邊緣
像figure5.3一個Mask在邊緣上再做平均值的濾除時會因為上方3個pixel是空的
而產生些問題
所以這小節似乎寫了2個方法
Ignore the edges 和 Pad with zero
前面意思是不理會邊緣那些空的pixel
只對在Mask範圍內的pixels作運算
而後面則是填塞0進去那些空的pixel
然後再運算。
5.3 Filtering in Matlab
意思是要轉戰Matlab軟體了。
這裡提到
filter2(filter, image, shape)
這個指令會產生一個跟原本的image相同大小的矩陣。
而
a=ones(3,3)/9
這個指令看起像是一個3*3的矩陣內都放1,然後再分別除以9
所以a矩陣內的值都是0.111
依此類推
x2=zeros(7,7)
x2(2:6,2:6)=x
這兩個指令意思也應該是一個7*7的矩陣內都放0,
然後
前面的2:6是指從上到下第2個位置範圍開始到第6個位置
把x矩陣的值放入
後面的2:6是指從左到右第2個位置範圍開始到第6個位置
把x矩陣的值放入
所以x2矩陣內的值會像書上的所表示。
問:filter2(filter, image, shape)
中的shape我看書上分別有 'same' 、'valid' 以及 'full' 三種表示
不知道那分別是什麼意思?
答:
經過小紅帽同學的解說
'same' 的意思是經過濾除後的矩陣會和原先的image一樣大小
X矩陣
170 240 010 080 150
230 050 070 140 160
040 060 130 200 220
100 120 190 210 030
110 180 250 020 090
a矩陣
0.1111 0.1111 0.111
0.1111 0.1111 0.111
0.1111 0.1111 0.111
而'same' 為了要讓綠除過的矩陣和原先的image一樣大小
所以在濾除過後的矩陣(0,0)位置的值是
Mask這時所蓋住的範圍是 current pixel = 170(詳見p.89圖)
000 000 000
000 170 240
000 230 050
然後再對應的位置相乘再相加
0.1111*0 + 0.1111*0 + 0.1111*0 +
0.1111*0 + 0.1111*170 + 0.1111*240 +
0.1111*0 + 0.1111*230 + 0.1111*50 = 76.6667
依此類推濾除過後的矩陣(0,1)位置的值
Mask所蓋住的範圍是 current pixel = 240
000 000 000
170 240 010
230 050 070
對'same'來說濾除後位置的值 是把原矩陣位置的值放在current pixel 。
========================================================
'valid'則是指對在有效範圍內做運算,只要超出範圍的邊邊的值就不運算。
所以這就和p.90的例子的作法一樣
濾除後的陣列會變小。
========================================================
'full'看他字意思就是全部!
然而這個所展現出來的方式 就是老師上課講解過的火車頭相撞的方法去算
一開始就是開始和a矩陣相乘再相加的值 = (0,0)
000 000 000
000 000 000
000 000 170
(0,1)
000 000 000
000 000 000
000 170 240
以此類推下去。
濾除後的矩陣會變大,因為全部都運算進去了。
========================================================
fspecial 這指令有很多選擇,
可以讓我們很簡單的創造很多不同的濾除
p.95頁 書上就有舉平均值的濾除 用fspecial來做運算
這裡就不再多加敘述了。
5.3.1 Separable Filter
可分離的濾除?
這感覺和p.92頁那邊的例子好像差不多?
就把一個矩陣分成兩個矩陣相乘
像他舉的例子3*3的矩陣
他換成 3*1 的矩陣 乘上 1*3 的矩陣
5.4 Frequencies : Low - and High - Pass Filter
頻率:低頻和高頻的通過濾除
Low - Pass Filter 也就是讓低頻通過
High - Pass Filter也是是讓高頻通過
p.98頁
那個矩陣是和p.97頁下方的矩陣作對應相乘,然後再相加
(150*1)+(152*-2)+(148*1)+(147*-2)+(152*4)+(151*-2)+(152*1)+(148*-2)+(149*1)
=11 = 新的image的pixel
之後就先stop吧
第五章份量蠻多的。慢慢消化中
===========================
p.98就有舉例 fspecial 的運算方法 " laplacian " 和 " log "(Gaussin)
至於 laplacian (拉普拉斯) 在Matlab 是怎麼運算呢?
是和數學方面一樣那樣運算嗎?
p.99有說到
Make negative value positive
(讓負數是存在的?)
書上說明是說這個方法只能在特述情況下
他舉的例子看不明白。。。
Clip value
(刪除數值?)
書上說應用 thresholding type operation
對灰階數值X擴展,經由濾除得到Y值
thresholding type operation 是什麼意思?
這邊真不好說明,書上都有解釋 打上來也沒意思
自己看了又不太解真想略過他
p.100 mat2gray這個指令是
根據書上說法是在任何矩陣裡
最小的value 讓他 = 0.0
最大的value 讓他 = 1.0
然後按照最大最小的比例去轉換數值
而且輸出類型是 double 型態。
5.6 Edge Sharpening
其功能是將影像銳利化及增強對比。
unsharp mask(銳利化遮罩)
銳利化第一章 好像有講過了。
沒有留言:
張貼留言