2010年1月17日 星期日

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

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

他也稱做梯度轉換,

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

HW5











作業:位元平面切片

圖片的儲存單位是像素,那像素又是由位元組成的數字單位

這次的作業是把一個位元組所構成的圖片拆成一個一個位元,然後把它分成數個圖片,

正常來說,應該是用一個由八位元所組成的圖片來作範例,

不過之前的作業也都是用這一張圖片來展示,

所以這次還是使用這張圖片,

所以切出來不會像是使用八位元的圖片來的明顯。

在程式中是把圖片拆成八個位元來顯示

不過理論是懂了,但是在程式實作方面還是參考同學寫出來的東西,

因為實在想不通如何把圖片轉成位元像素再轉乘二進制在做強度轉換。

可能是因為那堂課有是沒聽到老師怎麼解釋八,

書上也說得很簡單,把原理說完而已。

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垂直變化大的地方特別顯示出來,就可以達到銳化的效果了吧!

2009hw6

這次的作業是空間濾波器的實作

原理:
將遮罩中所有像素值加總後求其平均,然後寫入遮罩中間的對應
像素中。所以一次只處理一個像素的值。
先分成3x3的矩陣,然後用輸入的方式來決定中間的像素
會受到旁邊像素值影響的比例,最後輸出。
所以如果周圍的比例很低的話,會和原圖很像。
結果畫面:
執行的介面(彩)
(灰)
用判斷圖片為8bit或24bit來分別處理灰階和彩圖。
if(Image2->Picture->Bitmap->pixelformat==pf8bit)
if(Image2->Picture->Bitmap->pixelformat==fp24bit)
結果:
(原圖)
(濾波後)


出來的圖片像被柔化後的效果。
在對顏色取值時,一開始都怪怪的
後來翻書和google以後
才知道在取顏色時是用+3的方式
例如取藍色,先取i後再用i+3取下一個像素的值
rimageb[i]=oimageb[i-3]*f1+oimageb[i]*f2+oimage[i+3]*f3+.......;

HW4



Gamma=2顯示圖片較暗




Gamma=0.5時顏色會變淺



GAMMA值的變換
s = c * r ^ γ 
s:轉換後的值
r:原始值
c:常數值
γ:Gamma值
可以把調整後的色彩控制在0~255之間
gamma>1 (調暗) ,gamma<1(調淺)
藉由調暗調亮來改變圖片的清晰度與美觀度
現在才知道原來BCB做影像處理有這麼多效果可以呈現

HW1


RGB一直是我覺得最難的部分
因為以前學過另外一種也是用BCB的
在寫程式的時候
我總是會搞混運算元加來加去的部分
可能是我的邏輯思考比較弱
但是老師教得比較簡單
分別宣告3個陣列
再用for迴圈來儲存每個pexel的RGB值
這種方式比較簡單直覺化
看完老師的程式碼我就懂了:)

HW7


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

HW6

將要計算的像素作為中心點
其他作為他周圍九宮格的鄰近點
相加後再除上9將得到的色彩直傳回
圖片出來之後就會有柔化,更清楚的效果
這張照片做出來的效果很明顯
原來BCB也可以做出這種效果
讓我覺得很神奇
這樣以後我也可以美化自己的照片了~哈

HW5



這次的作業是利用一張由像素夠成的圖片
每個像素由8位元組成
所以一張影像等於8張重疊的影像
每向左一位元做AND運算再*255分變黑白
就可把影像轉成下列結果
1-bit




2-bit



3-bit





4-bit


5-bit



6-bit




7-bit




8-bit



一開始我放的圖片顏色不多


所以做出來的結果很不明顯
後來換了一張較多色彩的圖片後


每一張顯示出來的結果都很明顯


我覺得這個作業很有趣也很有效果



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)
依照數學原理來說 , 應該差值會更明顯 , 可是跑出來的結果幾乎完全相同?