顯示具有 2009hw7 標籤的文章。 顯示所有文章
顯示具有 2009hw7 標籤的文章。 顯示所有文章

2010年1月19日 星期二

HW7 - 邊緣偵測

這次作業是做將圖片的邊緣顯示出來,將圖片剃度變化的地方突顯出來,所以使用Sobel來運算剃度變化的近似值。Gx是利用圖像與X軸的Sobel運算,Gy則是圖像值與Y軸的Sobel運算。

Gx

Gy
彩色圖

彩色邊緣偵測

灰階圖
徽接邊緣偵測

2010年1月17日 星期日

2009hw7

這次的作業是Sobel運算子實作

原理:
梯度銳化最主要的目的就是要去強調邊緣值
影像色彩的差距變大。

用第六個作業去改
很快就完成了
主要是兩個遮罩的運算
GX:

GY:

會得到兩個值,帶入畢氏定理。

結果:
(執行結果)
(灰階)
(彩)

在寫程式時
不知道怎麼把自已寫的funtion加入
後來問過別人後
知道在程式碼的地方
按右鍵->open source->把
int_fastcall TForm1::GX(int i, intj):
貼到private就可以了

HW7



作業:梯度Sobel

主要的原理就是利用Sebel來把圖片作轉換,不過這次是考完期末考才弄這個作業的。

所以除了研究一下程式碼部分是如何做到這些之外還花了點時間看看課本到底寫了些甚麼....

在之前的作業六模糊可以從像素的週圍取平均來達成,所以銳化就可以反向思考,

用上次的程始碼加以修改來做到這次的轉換

此濾波器在課本內第一個是使用拉普拉斯轉換,但是課本說的非常的文言文

大概看了十多分鐘都看不懂就被我跳過去了(笑)

第二種是使用非線性的一階倒數作轉換,它的作法是在一個3*3的區域內做影像增強

公式是直接複製同學的(因為自己懶得照書上的畫表格)

GY = 銳利化矩陣(對Y維度的差異)*九宮格的色彩值
-1,-2,-1
+0,+0,+0
+1,+2,+1
----------
GX = 銳利化矩陣(對X維度的差異)*九宮格的色彩值
-1,0,1
-2,0,2
-1,0,1

然後對圖片作轉換就可以了

他也稱做梯度轉換,

通常在實做方面都是拿來偵測瑕疵,或是把它當作自動檢測的預處理步驟、或是用來在醫學上做檢測

hw07










↑這是在網路上找到的圖片,也就是濾波器的示意圖,原本應該放在hw6裡面,不過懶的去重新編輯,就把它放到這裡來囉





↑這是這次做梯度銳化的公式,其實梯度銳化就只是要去強調"邊界"的部分,藉由算出Gx水平差異和Gy垂直差異後,將其個別取絕對值後相加→G=|Gx| + |Gy| 後就可以得到我們要的結果。
在這之中,Gx和Gy的公式很容易搞錯......Gx是要算水平差異,所以0應該擺垂直的,這樣才能算出"左右"的差別,而不是把0擺水平......(應該是這樣子吧)。實際上寫程式的時候,因為公式的關係,最後兩個結果還是要相加,搞錯了也不會影響結果阿~~~囧

↓這是我的實作圖














其實這張圖還是有一點彩度,所以很多細節的地方看起來會很亂......
所以我就大概歸類了一下
當G >250 則 G=255
當25< G <100 則 G=50
當100< G <250 則 G=150
其他G=0之後
↓圖片就會簡單許多,看起來也比較不會覺得很雜亂




其實這次的梯度運算公式只知道個大概,反正把水平or垂直變化大的地方特別顯示出來,就可以達到銳化的效果了吧!

HW7


梯度銳化Sobel
兩個銳利化矩陣跟中心點的差值
先用水平做遮罩
-1 -2 -1
0 0 0
1 2 1
再加上垂直遮罩
-1 0 1
-2 0 2
-1 0 1
將這2個矩陣做平方運算後相加
相加後的結果再放回去原點
產生出來的效果為上圖
這樣的效果跟作業6不一樣
雖然都是銳化
公式不一樣就差好
多老師教了我們這麼多圖片效果
讓我好喜歡影像處理這門課喔~^^

HW7

第七個作業是梯度Sobel , 把一張圖做邊緣偵測 (應該就是把邊緣像素
的差距明顯化..我自己的解釋) , 跟上次作業其實很像, 只是一個要銳利化
一個要模糊化 ,實作的方法就是用兩個遮罩(一個對X方向偵測 , 一個是
對Y方向的偵測)
↓下面就是使用的兩個遮罩










有兩個公式可用

G = GX + GY

G = (GX^2 + GY^2)^1/2

一開始我用 sqrt [ pow(GX,2) + pow(GY,2) ]
以為作業很簡單 , 很容易就寫出來了XD
可是同學說run出來的結果很奇怪 , 出現雜亂的顏色














我還自作聰明的給他3次方, 最後出現sqrt error ... 後來才想到3次方會有
負值 , 不可以開根號 , 最後問同學才知道自己沒有把值限制在255之間 ,
才有很奇怪的顏色出現

↓下面是最後實作出來結果










黑白影像會更明顯










再來我用 G = abs(GX) + abs(GY)
依照數學原理來說 , 應該差值會更明顯 , 可是跑出來的結果幾乎完全相同?

HW7



與第六次作業類似
利用Sobel系數運算
對X方向作用
-1 -2 -1
0 0 0
1 2 1
對Y方向作用
-1 0 1
-2 0 2
-1 0 1
算出來的值給平方後相加再開根號
最後放回原點
結果就出來哩
其實想法並不是很難

HW7

這次的作業
sobel(梯度銳化)
將垂直
-1 0 1
-2 0 2
-1 0 1
及水平
1 2 1
0 0 0
-1 -2 -1
的遮罩用矩陣的方式平方相加開根號
再將出來的結果帶回原點
就會顯示出
相差大的部份也就是邊緣
這就是我們要的結果

這次作業跟第六次的很相似
只是一個是將圖片便模糊
這是將圖片輪廓給呈現出來
所以我也只是將第六次的作業拿出來做修改而已
這樣就比較容易了
雖然有點投機取巧
不過也沒遇到什麼大問題
ㄏㄏ


















HW7

梯度銳化

這個作業就是使用上一次的作業下去做點修改
加上水平遮罩
-1 -2 -1
0 0 0
1 2 1
和垂直遮罩
-1 0 1
-2 0 2
-1 0 1
帶入原先的九個色彩點中做平方
再把水平和垂直的平方值相加在開根號
得到的值再傳回就可以了

HW07

關於這次作業是用Sobel去作轉換

用兩個遮罩呈現梯度銳化的效果

分別是水平遮罩和垂直遮罩來控制整個的變化



所以利用兩個陣列來把數值平方作加法再行開根號

沒有甚麼太大的問題

這是原圖




然後這是灰階圖作梯度銳化後與原圖的比較


乍看之下好像沒甚麼問題,可是當試著用彩色圖去Run時


彩色圖梯度化

可以看到雖然有作轉換且成功,但仔細一看會看到右半邊臉似乎有很多的紋路出現

一開始是想說會不會是我找的圖才會有這樣的效果

於是想說試著把裡面的值作一些差距上的變化,把1 ˇ -1--->0.1 ˇ -1;2ˇ-2 --->1ˇ-1



有了不一樣的感覺


有感覺到剛剛紋路的問題似乎消失了

可是整張圖卻也變得黯淡許多

於是再回到初始設定試著只把2ˇ-2 --->0.1ˇ-0.1



發現得到這樣的結果

明顯有明亮了一點,可是當min超過0.1時會有溢位的問題產生就是了

不過倒是觀察出當梯度銳化效果明顯時其值越小越好

彩色部分還是有小問題存在( 依然會有彩色出現 )

或許這一部份要在找時間好好釐清會比較瞭解一點

因為灰階圖去跑時沒有問題出現

應該是程式碼有地方想得不夠周全,要再多請教別人了!





HW7

這次的作業是做梯度運算

利用兩個遮罩
\mathbf{G}_y = \begin{bmatrix}  +1 & +2 & +1  \\ 0 & 0 & 0 \\ -1 & -2 & -1  \end{bmatrix} * \mathbf{A} \quad \mbox{and} \quad    \mathbf{G}_x = \begin{bmatrix}  +1 & 0 & -1 \\ +2 & 0 & -2 \\ +1 & 0 & -1  \end{bmatrix} * \mathbf{A}

算出來的值平方後相加開根號再放回去
這是做出來的結果


HW7

作業的主題是梯度銳化,梯度銳化就只是要去強調邊界的部分,藉由算出Gx水平差異和Gy垂直差異後,將其個別取絕對值後相加→G=|Gx| + |Gy| 後就可以得到我們要的結果。避免溢位(超過255設255,低於0設0,把所有值設定在0~255),要注意的地方就是彩色和灰階所使用的矩陣個數不同

GY = 銳利化矩陣(對Y維度的差異)*九宮格的色彩值
-1,-2,-1
+0,+0,+0
+1,+2,+1

GX = 銳利化矩陣(對X維度的差異)*九宮格的色彩值
-1,0,1
-2,0,2
-1,0,1

彩色原圖:


結果:


黑白原圖:
結果:

2010年1月16日 星期六

HW7


本次的作業為Sobel 運算子實作
這次是採用HW6的程式來做延伸
我有上維基百科查了一下
主要用作邊緣檢測,在技術上,它是一離散性差分算
用來運算圖像亮度函數的梯度之近似值,在圖像的任何一點使用此算子
將會產生對應的梯度向量或是其法向量。
它的公式為
G= { (Gx^2)+(Gy^2) } 再開根號 Gx,Gy 他們分別在乘上3*3的矩陣跟上次的公式不一樣


HW7

作業~梯度Sobel

老實說拿第六個作業改蠻快的

就是兩個銳利化矩陣跟中心點的差值

公式是
GY = 銳利化矩陣(對Y維度的差異)*九宮格的色彩值
-1,-2,-1
+0,+0,+0
+1,+2,+1
----------
GX = 銳利化矩陣(對X維度的差異)*九宮格的色彩值
-1,0,1
-2,0,2
-1,0,1

原以為所謂梯度就以距離公式求出:

G = (GY^2+GX^2)^(1/2)

不過後來又看到其他同學有另一個公式

就有點搞不懂梯度的定義了@@

這個該不會表是成向量形式的吧?

G = |GY|+|GX|


=========================================================
原圖


=========================================================
套(GX^2+GY^2)^1/2


=========================================================
套(GX^2+GY^2)^1/2

+

避免溢位(超過255設255,低於0設0,把所有值設定在0~255)



=========================================================
套(GX^2+GY^2)^1/2

+

避免溢位(超過255設255,低於0設0,把所有值設定在0~255)

+

彩階轉灰階

+

設臨界值把色彩值變二元化,並將色彩值反印(0變255,255變0)



感覺上頗有慢畫的風格@@~

感覺有點溫故知新~~(彩階轉灰階)

有看到別的同學再將圖銳利化處理

使雜訊消除讓線條更明顯

當消雜訊而圖變太銳利時,說不定使用平滑也有不錯的效果

之後再做GARMMA把不明顯紋路凸顯

(不過可能要考慮要在銳利或平滑前還後執行,可能就要實做看看了@@)

覺得原來我們做作業當學越多時

應該要學以致用

=========================================================
套G = |GY|+|GX|

效果好像比較細緻一些@@


=========================================================

HW7 - 邊緣偵測 (Sobel operator)。

  嗯,這次的作業是把一張圖片做邊緣偵測,也就是把圖片顏色梯度變化最大的地方顯現出來。實作的方法有很多種,而我是使用兩個Sobel operator的運算遮罩(一個是對x方向作用;一個是對y方向作用)來跟圖片做運算後取絕對值相加,這個方法可以讓出來的結果比較精準。而兩個Sobel operator的運算係數值如下:

對x方向作用↓


對y方向作用↓


我用的公式↓

-------------------------------------------------
M(x,y) : (x,y)這點的梯度大小。
gx : 圖片的值與對x方向作用的sobel遮罩運算結果。
gy : 圖片的值與對y方向作用的sobel遮罩運算結果。
-------------------------------------------------

  這次又是因為遲到沒有聽到老師的講解,一開始當然是找陪我走過一學期的課本啦,但課本的內容並不是描述的很通順(?),在加上一拖拉庫的公式就先昏了,所以進而求救於浩瀚的宇宙,喔不,是無邊的網路。我找到了一些關於Sobel的基本定義和比較清楚的數學函意講解,在我的實作過程中都有幫助到。程式撰寫方面跟上次的作業差不多,要注意的地方就是彩色和灰階所使用的矩陣個數不同(使用channel方式也可),彩色的RGB排列方式...等,以上就簡略帶過,而套用完公式後,還要再經過一些微調,才會使邊緣更清楚俐落。那廢話不多說,來看我的實作結果吧!

彩色原圖↓


彩色圖片邊緣偵測↓


灰階原圖↓


灰階圖片邊緣偵測↓


以上就是我的實作結果,光是找圖就花了不少時間呀(汗),不過努力沒有白費,最後做出了滿意的成果!

補充 :
  後來把SUBARU 的Impreza跑車轉成灰階圖片去跑邊緣偵測,覺得也滿漂亮的~給大家參考一下嚕。

灰階Impreza原圖↓


灰階Impreza邊緣偵測↓