顯示具有 2008w14 標籤的文章。 顯示所有文章
顯示具有 2008w14 標籤的文章。 顯示所有文章

2008年12月5日 星期五

CH5(修改)

關於醫工年會的事情
我要參加的是12/13號的
所以會正常來上課!!.......不好意思,跟老師說了錯誤的時間

CH5
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.這次後面感覺難度有點變高了....也可能是沒讀很清楚的關係,後來要在研究一下

2008年12月4日 星期四

ch5

ch5

一開始讀第五章有大略看過覺得好難,
所以有先從圖片和課文中的粗體字先看或上網查資料,
這樣就有比較好懂,不過也只是先寫會的部分。

5-1
原本只知道在講結合mask和function稱為filter(影像濾波)、
linear filter(是對影像進行模糊化亦可達到去除雜訊的效果),
而在課本的Figure5.1 可以了解,之後的Figure5.2又清楚的
知道整個流程。

Spatial filtering(空間濾波器 ) 需要的三步驟:
1.mask位置在current pixel上。
2.所有filter的乘積值符合neighborhood
3.加總所有值。
spatial filtering與spatial convolution(空間迴旋運算)是同類,
而spatial convolution處理數位影像之空間頻域特性。

指令 magic(5)為5x5的矩陣,裡頭的數字是從1到25不會重複,
而且各行、各列和對角線的和都相等。真的好神奇。
mean2(x(1:3,2:4))是矩陣x的第一列到第三列和第二列到第四列的平均值。

5-2
Ignore the edges:忽略邊緣,結果顯示的圖會比原來小。
Pad with zero:忽略邊緣的值,都填零。

5-3
這小節的指令有用到5-1、5-2,
filter2(filter,image,shape) -->是在做liner filtering.
filter2(filter,image,'same') -->是 use zero padding.
filter2(filter,image,'valid') -->結果影像會比原本的小.
filter2(filter,image,'valid') -->結果影像會比原本的大.
zeros(7,7) 為7x7的零矩陣.
fspecial('average',[5,7]) 為一個5x7的average filter.

5-4
frequencies: 測量因距離改變的灰階值。
High-frequency components:短距離而灰階直有很大的改變。
相反的,Low -frequency components:長距離而灰階直有很小的改變。
high-pass filter:忽略High-frequency components和減少或消除Low -frequency components。
low-pass filter:忽略Low -frequency components和減少或消除High-frequency components。
Make negative values positive:完全處理負數值,不處理大於255,因此只能使用在特殊情況。
Clip values:x值經由filter得到y值,而且不適用於超過255。

5-5
Gaussion Filters是low-pass filter的一類,以下是重要理由:1.在數學好的表現,特別是Gaussion Filter的Fourier transform,也是另一個Gaussion。2.是旋轉對稱,對於一些edge-detection algorithm是好的開始。3.是可分離的。4.兩個Gaussion的迴旋是另一個Gaussion。

5-6
Spatial flitering可以使圖片邊緣清晰化,也有不同的說法如edge enhancement、edge crispening、unsharp masking。

* Ursharp Masking
假設原圖為 A, 那麼 Unsharp Mask 會先將原圖模糊化得到一張影像 B,
再將 A - B 得到兩者之間的差異, 最後將差異加回原圖。

* High-Boost Filtering增強原始影像已被模糊的地方或細微處。

5-7
nonlinear filter,在mask裡nonlinear filter是由灰階值的nonlinear function得到的。
maximum filter和minimum filter也是rank-order filter。
由p111頁知:maximum filter會變亮,minimum filter會變暗。

而指令nlfilter(c,[3,3],'max(x(:))')一張圖片C是3X3矩陣執行maximum filter,但是比較慢。
若用colfilt(c,[3,3],'sliding',@max)會比較快,sliding 指的是重疊的neighborhoods。
ordfilt2(c,9,ones(3,3))需要的三個值,分別是image c、選擇要輸出的index value、mask的定義。
這一小節希望老師可以在課堂講解清楚一點。

5-8
只處理有興趣的區域稱為regions of interest or ROIs,
而處理的processing稱為ROI processing。
指令roipoly是把圖像中所要的區塊顯示圈出來。

Chapter 5

  第五章的內容是在第四章裡有提到過的Neighborhood Processing,再繼續更深入的說明。一開始我都習慣先把一個章節從頭到尾大概翻過一次,我覺得這一章好像特別長,而且有蠻多經過影像處理後的圖片,看起來Neighborhood Processing的應用範圍應該是很廣的。

  5.1主要是在介紹Neighborhood Processing的基本處理方式,以下是我看完這一節的感覺。我覺得它跟Point operations(單一點處理:需要原本影像一個點的資料,處理後對應到新影像的一個點)相同的地方在於,原本影像的點處理後,都會對應到新影像上面的一個點。不同的地方就是Neighborhood Processing需要用到原本影像的點旁邊很多鄰近點來做計算,但是Point operations只需要一個點就可以計算了。這邊只要看P.89頁的圖5.2,應該就可以比較容易了解我上面到底在說什麼了。

  在這一節裡面有幾個名詞,Mask指的是一個原本影像要處理的點加上它鄰近點形成的矩形(或是其他形狀)。將一個Mask與function做運算後得到的矩陣就叫做Filter。不過那個linear filter我就不是很了解了,線性指的是什麼意思呢?
--------------------------------------------------
  在第13週的時候,老師已經說明linear的意思了,還把他以前做的投影片拿出來看。大家都看到了一個很熟悉的公式,原來在以前的線性代數就已經有教過了,但是卻沒有幾個人真的去了解這個公式所代表的意義。看來我的學習方式有需要改變一下了,像我從小學到現在學過了很多的東西,但是當真正要用到的時候,我卻不知道要用到以前學過的東西來解決問題。

  5.2是在說明可以用矩陣(Matrix)的方式來做Neighborhood Processing的數學運算,矩陣......都已經忘的差不多了XD。

  5.2.1是在說明當要處理影像最旁邊的點時,會遇到最邊邊的點並沒有全部的鄰近點這個問題(因為都在最邊邊了,旁邊當然就沒有東西啦)。課本上有提到用2種方式來解決,一個是Ignore the edges(忽略邊邊),另一個是Pad with zeros(把沒有鄰近點的位置放0進去)。這兩種方法的說明,可能是我自己英文能力的問題,我看得一知半解的不是很確定,希望老師上課的時候能大概的解釋一下
--------------------------------------------------
  這個部分老師也有提到過,他還在黑板畫出大概的示意圖,看了黑板的圖之後我大概就能了解這2種方式的差別了。加上老師也有一個步驟、一個步驟慢慢的舉例說明,聽完之後就比較能知道課本上在說什麼東西了。

  5.3這一小節主要是在介紹用Matlab來實作Neighborhood Processing的影像處理方式。這邊有用到一個函數,filter2(filter,image,shape),shape這邊課本有用到3種,samevalidfull。我看了很久才大概知道它到底是在算什麼,filter應該是給程式每一個點要做影像處理的方式,課本上這邊給的a是說,目標的點要和它周圍的8個點相加再取平均。image則是放入要做影像處理的圖片,課本上的x是在5.1時就已經定義好的矩陣,在課本上p.90頁那邊。shape則是設定這個函數處運算完後要輸出的矩陣大小(還是形狀?)
--------------------------------------------------
  這個問題老師只有大概帶過去一下而已,不過我猜測應該只是設定輸出矩陣的大小吧!因為形狀應該都是矩形的,好像不會有圓形、三角形或是其它奇奇怪怪的形狀等等。
  
  不過在它的範例中,我看的不是很懂它做的是什麼樣的影像處理。看起來好像是在說明不同大小的Mask,做出來的影像處理效果不同。這邊好像也是將鄰近點做平均來輸出,然後影像顏色就會變得比較接近,看起來就變得模模糊糊的。不過程式碼那部分就不是很懂了,好像有出現一個fspecial('average')的函數,還有5.3.1那邊根本就像是在做矩陣的教學,那一小節我就先沒有去看了......

  5.4我覺得這邊開始越來越難了,出現frequencies(頻率)這個字,感覺上難度就增加了。在這邊課本用到fspecial()這個函數做了不同的處理,5.3的時候是用average(平均),這邊用了laplacian和log兩種運算的方式。雖然詳細的部分看不懂,不過看它輸出的圖就大概可以知道,用這個方法可以找出圖片上線條的部分(輪廓),外型就可以很清楚的分辨出來。希望老師能說明一下fspecial()這個函數和這一小節的影像處理方式

--------------------------------------------------
  以上是上個星期的進度,接下來由於篇幅的關係(盡量不要太多,已經快1500字了= =),我就不一一打出課本上的內容了。


  5.5這邊的高斯濾波器(Gaussian Filters)感覺很難,因為這邊的程式碼有用到fspecial()這個函數,但是我還不是很懂這個函數到底是在做什麼用的,而且我也忘記高斯的運算方式了,所以就不是很懂這一寫小節,是用什麼樣的方式來做運算的。我有看到最後那個用高斯濾波器處理後的圖片,感覺跟5.3那邊的結果很像,影像都會變成模模糊糊的樣子。只好等下星期老師來解釋囉......

  5.6這一小節是在用Filter來做影像銳利化的處理,在p.106頁那邊的圖,老師有預告說下星期會講解,我自己看了一下,感覺不是不會很懂,而是非常的不懂。因為那個圖根本就沒有橫軸和縱軸的單位和說明,我完全看不懂它想表示的意思是什麼呢。也只好期待下星期老師的說明說哩 !

  5.7標題就和前面很不一樣,這邊用到的方法是非線性濾波處理。在這邊又用到了另一個函數nlfilter(),我不知道為什麼這邊用了一個最大和最小的函數,然後用filter會將影像處理成p.111那2張圖的樣子......

  5.8這一小節我覺得比較有趣,它教我們用Matlab來做區域性的影像處理。之前教過的影像處理都是一整張圖的,但是在這邊看到它的範例圖片時,就會覺得很特別,它可以只針對一張圖片上的一小個區域來做影像處理,期它的部分還是維持原本的樣子。

  我發現我看原文課本的時候,常常會誤會書上的一些意思,還有漏掉一些蠻重要的東西。像是第13週的時候,老師講解很久的convolution我就沒有注意到,好像我自己會不知不覺的去忽略掉一些很難的東西。看來在英文閱讀能力方面還需要大大的加強了,在閱讀原文書時的集中力降低速度真的是比中文書還要快很多呢......