我要參加的是12/13號的
所以會正常來上課!!.......不好意思,跟老師說了錯誤的時間
Neighborhood Processing
The ideal is to move a mask
=>矩形or其他形狀覆蓋在圖像上
=>創造一個新的影像(其內部的像素值是由覆蓋在原圖上的遮罩與原圖之像素值計算而來的)
*The combination of mask and function is call a filter
=>如果此種用於產生新像素值計算的公式為線性的則稱為linear filter
使用方法參照P88、P89
=>就是遮罩中間的位置設為原點,其餘則照X軸Y軸方式改變,因此與影像上的像素點對照來計算(這個直接表達不好表達,要用圖比較好說)
使用公式
(使用的遮罩為大小3x5的,所以X軸設中間為0,整個範圍為-1~1,而Y軸範圍為-2~2)
Spatial filtering thus requires three steps:
使用空間過濾的步驟
1.Position the mask over the current pixel.
把遮罩置於current pixel的正上方
2.Form all products of filter elements with the corresponding elements of the neighborhood.
遮罩內所有不同位置的值與影像上被罩住的像素值組合
3.Add all the products.
最後相加全部計算後的數值
Convolution:
=>allied to spatial filtering
=>將遮罩旋轉180度去計算
=>
=>The importance of convolution will become apparent when we investigate the Fourier transform,and the convolution theorem
5.2Notation標記法
=>以矩陣的方式表示遮罩
5.2.1Edges of the image
=>由fig5.3可看到在最邊邊的像素值會無法計算到(遮罩過去的話會有無法計算的部分)
有以下方法
(1)ignore the edge忽略邊緣
=>結果會圖片大小會小於原始圖
=>如果遮罩很大,會造成失去很多數值
(2)Pad with zeros填入零
=>將超過範圍的地方全部表示為零
=>其結果出來的圖大小與原圖大小相同
5.3Filtering in MATLAB
使用語法Filter2
x=imresd(blocks.tif);
a=ones(3.3)/9 %MASK
>> xs=filter2(a,x,'same');
使用same=>與原圖大小一樣
利用Pad with zeros的方式去計算
>> xf=filter2(a,x,'full');
使用full=>會超過範圍大小
是利用Pad with zeros的方式去計算的(看起來是所有mask遮到的地方有數值就會執行的關係,所以才會變較大)
>> xv=filter2(a,x,'valid');
利用ignore the edge的方式
故比原圖小
fspecial
=>用於產生mask
=>課本中是使用average去取得
=> fspecial(‘average’,3)
=>即表示產生3x3的矩,其內部數值1/(3x3)最後取得的值
=>也就表示只要能除盡,則遮罩內全部數值相加結果為1
執行
c=imread('cameraman.tif');
f1=fspecial('average');
cf1=filter2(f1,c); =>當沒有設定要選3種格式的其中一種的話
直接算成原圖大小的
>> imshow(c)
figure,imshow(cf1/255) %由於出來的陣列為double的格式,所以才需要加上除255的方式(之前沒注意,最後跑出一片空白…..)
當寫入的mask的大小範圍越大
其圖像也不太一樣
左圖為mask是3x3
右圖為mask是9x9的
由於mask矩陣範圍越大,造成要進行填補零才能計算的範圍也變大,也因此,周圍變暗
5.4Frequencies: low-and High-pass filters(低通跟高通濾波器)
=>事實上在影像的部分,高頻跟低頻的差別在於內部數值的變化大小
=>高頻為內部灰階數值變化較大的
=>低頻為變化較小的
上圖為將圖形的陣列值以兩列互相比較,所看的變化(用來跑出這張圖的是cameraman.tif)
(語法就不放'上來了,x軸以及Y軸各為單數列以及雙數列,然後顯示此圖的像素值而已)
使用這個方法就可以看出高低頻的狀況(這張低頻還蠻多的@@,高頻也不少)
High-pass filter(高通濾波器)
=>簡單的說就是只讓高頻的部分通過,將低頻的部分縮減或排除
課本上有個假設的高通mask
=>[1 -2 1; -2 4 -2;1 -2 1]
=>主要是因為周圍設定的變化跟中間的差異很大,故產生出來的結果,會由於高頻的變化較明顯,而被顯現出來(因高頻的矩陣裡面的數值全部相加等於零,低頻不能通過)
(如果是低頻遇到此種的話,因為數值太接近=>相加以後會變成較小的數值=>故顏色變較深)
=>高通濾波主要用於邊緣偵測以及邊緣增強
Low-pass filter(低通濾波器)
=>只讓低頻部分通過,將高頻部分縮減或排除
(這邊就暫時不操作MATLAB= =)
後面的內容後來補上!!
12/12
Values outside the range 0~255
=>if we use the linear filter. The value may be outside the rang.
=>we need to consider ways of dealing with values outside this displayable range.
(1)Make negative values positive
=>this technique can be used only in specific circumstances.
(只有在一些特殊狀況下才可使用,ex.只有少數幾個數值為負值或是那些數直接近零)
=>不適用大於255的數值
(2)Clip values
=>使用方式為
=>當超出0~255範圍的數值過多時使用此種方式,會破壞從filter那邊得到的結果
(3)Scaling transformation
=>將利用filter而改變以後產生的最低數值設為,最高值設為
=>將範圍從gL~gH的範圍改成0~255
=>方法:
語法練習:
c=imread('cameraman.tif');
f2=[1 -2 1; -2 4 -2; 1 -2 1];
cf2=filter2(f2,c);
figure, imshow(mat2gray(cf2))
cf2min=min(cf2(:));
cf2max=max(cf2(:));
cf2g=(cf2-cf2min)/(cf2max-cf2min);
figure,imshow(cf2)
產生的圖
以上兩個結果的圖相同!!
在這邊看不太出來,不過實際上是使用高通濾波,邊緣有被凸顯出來(不過也不是看得很清楚)
5.5 Gaussian Filters
=>屬於low-pass filter
=>公式為 (一維的公式)
σ
=>is the standard deviation(標準差)
Gaussian
=>they are mathematically very well behaved.
數學上的一種非常好的表現?
(在這邊才知道傅立葉轉換也算是Gaussian)<=這應該沒翻譯錯吧?有看到有人跟我翻得不太一樣 =>They are rotationally symmetric.
(旋轉對稱?)
=>They are separable.
=>The convolution of two Gaussians is another Gaussian.
(兩個Gaussians的convolution結果是為另一個Gaussians
=>感覺跟前面一開始的遮罩使用方法來計算有關)
二維公式
5.6 Edge Sharpening(邊緣銳利化)
=>Spatial filtering can be used to make edges in an slight sharper and crisper.
=>對人眼所觀看到的有較好的結果
=>有以下名稱 edge enhancement 、 edge crispening or unsharp masking.
5.6.1 Unsharp Masking
=>the idea of unsharp masking is to subtract a scaled unsharp version of the image from the original
(想法是利用將原圖減去一個非銳利的形式)
語法:
f=fspecial('average');
>> xf=filter2(f,x);
>> x=imread('emu.tif');
>> xf=filter2(f,x);
>> xu=double(x)-xf/1.5;
>> imshow(xu/70)
>> figure,imshow(x)
左圖為使用unsharp masking
右圖為原圖
這個方法是利用將影像的數值轉乘一個類似但是較模糊不清的影像
上圖為使用xf=filter2(f,x);產生的結果
我們使用的mask為f=fspecial('average');
產生出一個3x3的陣列,內容全部為0.1111
(數值1平均分布分配在陣列中……)
由於f=fspecial('average');產生出的結果是一個低通濾波器(模糊化)
上圖的結果就會變模糊
但是如果利用相減的方式
可使edge的不部分產生變化較大的結果(凸顯邊緣)
(參照P106 fig5.12)
(不太確定解釋的正不正確)
5.6.2 High-Boost filtering
=>與 unsharp masking有關的filter
=>high boost=A(original)-(low pass)
=>A (Amplification factor 放大率因素)
最後還是來不及看完
心得與問題:
1.這次的難度上略有提高,只是這次的少不是這個原因= =(因為最近在趕報告.......)
2.這次在寫的途中有稍微看過同學們寫的,這次大家寫的量明顯增多0_0,大家到期中以後都變的更積極了,而且在寫報告時感覺我變混了= =
3.這次後面感覺難度有點變高了....也可能是沒讀很清楚的關係,後來要在研究一下
你可以翻到 p.146 觀察一下 Fourier transform 的公式, 和你所了解的 convolution 運算方式相不相同。也許會給你一些啟發。
回覆刪除書上有些內容, 一兩句話看不懂, 沒有關係, 只要你持續閱讀與學習, 有一天會突然參悟出原來作者為什麼會這樣寫, 會這樣描述。這就是學習的真實狀況。
驚!!(上午4點0_0)
回覆刪除感謝老師回答
我昨天晚上 10 點半就睡了, 早上 4 點被蚊子吵醒, 喝杯水就看一下同學寫作業的情況, 又看了一下 2004 年做的投影片後, 5 點又跑去睡到 7 點 ...
回覆刪除