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

2010年1月20日 星期三

HW06_new

濾波器(spatial filtering) :濾波器可以柔化圖片也可以使圖片更加的清晰
濾波器的原理:
先設定一個大小遮罩後,經過運算的到新的像素結果,將像素分成固定階乘的方行矩陣(square matrix),然後再以輸入的方式來決定主要顯示像素會受到旁邊像素影響的比例多少,然後再將處理完的影像輸出,這次我以3*3(一般3*3濾波器遮罩)來做,這9個座標內的色彩值相加除以9,再把值傳回去,因此最中心的像素會受到周圍8宮格像素的影響,數值會被周圍色彩值影響變化成較為平滑得樣子.再影像中任一位置(x,y)處的平均值是以(x,y)為中心之3*3鄰域中9個強度的和在除以9,要小心,9個權重的值總和不等於0,否則"任何數/0"是會有錯誤.
銳利化->9個點個別*權重相加之後的結果,如果=正,數值變大顏色會變深,如果=負,數值變小顏色會變淺





今天我把濾波器課本內容及作業重新理解了一次,可能因為把前面作業全部都重新理解過的關係,所以理解起來很快就懂了!雖然不是很完美,可是我有進步了一些,希望老師看的到我的努力,可以加點分數,謝謝老師...

2010年1月19日 星期二

hw6

作業6:空間濾波器

這次作業的原理是這樣:

在一空間遮罩中

其像素為與其他相近鄰域像素

經過加乘後相加再取平均值

再輸出



經過這個程序處理之後

影像通常都會有被柔(銳)化的感覺

如下圖:


2010年1月17日 星期日

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+.......;

HW6

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

HM6



這次的作業就比較有趣一些
可以把影像柔化(銳化)
右邊那張圖看起來是不是有老花的效果呢?
取值的方法是用以前學過矩陣類似
算出的值R在放到中間格
R=W1Z1+W2Z2+W3Z3+.......+WmnZmn
一開始認為這應該不難
不過實際想要怎麼寫的時候就有些卡住了= =
最後的結果就如上圖所示

2010年1月16日 星期六

HW6

這次的作業是做一個空間濾波器
先放上執行結果圖

這是一個3*3的遮罩

結果運算出來以後

把新圖放在(1,1)這個點上

再往右進行遮罩

當結果運算出來以後

再將它放置在(1,2)這個點上

以此類推

將整張圖片掃過一次

從執行結果可看出

右邊的圖片比起左邊的圖片 顯得來的一些模糊

hw6


空間濾波(filter)的基本原理是
可在影像本身上直接達成類似的平滑狀態
濾波則是只接受或拒絕某些頻率的成分
關於這次作業是一個3*3的濾波遮罩
每一格輸入的值(共有9格)
代表著這9個座標之值先相加再除以9
將得到的色彩值傳回去
我覺得我的圖要看到平滑效果
要看左邊那隻黑色狗狗比較明顯
才有平滑效果的感覺:)

HW06


上面圖是這次關於空間律波轉換的概念呈現

用遮罩的方法把圖片顯示出來

雖然有老師程式碼的幫助有少了不少時間

但在實際去弄的時候發現有小困難出現

就是當從黑白圖片變成彩色圖片去測試時需要把自定變數的地方設為 3

即 bPtrResultImage[l*j+k] 中的 l 值作修改

如果沒有修改會發生只有三分之一或三分之二的部分被切掉,像是 ↓


所以才會考慮加一個 l 值去作一些測試

不過在此還有一些問題讓我蠻困惑的

因為當初想到如果有被切掉是不是因為RGB值沒有完全掃到呢?

所以在k迴圈裡把*l 通通改成*k----> bPtrResultImage[k*j+k]

結果圖是有完整的跑出來了卻也得到了下面的結果 ↓


最後索性把有關 k 值的東西都刪掉,得到的結果更是驚奇 ↓


圖片完全變成黃色,雖然老師原本的範例沒有 *3 的話

圖片只有出現三分之一,至少還會有一些顏色都還在

但是為了想要呈現全部所以加上*3的動作,但是Run過之後的圖片全轉成黃色了

這著實讓我蠻困惑的就是了


但透過這次這次作業絕的律波處理似乎值得再繼續把玩一番!

但針對這作業內容的部分

是採用 Mask1*bPOriIma[3*(j-1)+k]

再根據公式去設定

1 2 1

2 4 2

1 2 1

就可以得到第一張圖的結果

但差別真的不大,要仔細看才可以感覺到真正的差別












HW06





















這次的作業講到了柔化和銳利化的功能第一個想到的就是朋友拍的這張照片105MM 柔焦鏡 因為是長焦段鏡頭,會產生景深和壓縮感所以很容易產生立體感 我猜~如果數位相機要做到這個功能也不過就只是把相機"對焦區"以外的範圍柔化而已吧!不過這種功能,對於強調"人像"到還滿好用的!原本只是路人阿罵,拍起來也有專業的model感覺了呢

切回正題柔化的功能,我們可以利用濾波器的技術來做一個遮罩





如↑圖以(x, y)為中心把自己*權重*1/9 加上 周圍八個點個別*權重*1/9相加後除去權重總合
就可以做到柔化的效果,但要注意,這9個權重的值總和不能=0,否則"任何數/0"是會爆掉的

↓我是原圖



















↓把值全部設成1,就會出現朦朧美的柔化效果:)



















↓把中間的值設為-10,其他為1時



















這是我在玩銳利化的效果時,不小心發生的問題......
出現了溢位,就只好把>255的變成255,<0的變成0

↓即使打上-50也可以很漂亮:P



















↓中間值=50,其他為1時



















如果固定周圍八個點為1,中間的值如果越大
就會越接近原圖的樣貌,畢竟周圍的點影響中心點的能力太小了



再來是銳利化的效果
其實跟前面的差不多,只是遮罩的這9個權重的值總和要=0
把9個點個別*權重相加之後的結果再加上原本的色彩值,就可以達到銳利化的效果
但要記得,色彩值必須轉換成int,畢竟輸入的值有負數...
這裡也很容易溢位的情形,所以一樣要把值固定在0~255之間

把9個點個別*權重相加之後的結果↓
如果為正,數值變大顏色會變深
如果為負,數值變小顏色會變淺
所謂銳利化的感覺大概是這樣

↓當中間值=-8,其他為1時



















↓當中間值=-4,中間值的上下左右=1,其他=0時









雖然效果沒有上一張圖來的明顯
但是自然多了:)

hw6

這次的作業:空間濾波器。
我在它本身的意思上看了課本很多次。

問了許多人才知道,是要計算的像素作為中心點,其他作為他周圍九宮格的鄰近點,
之後再除上1/9可以將他們的像素平均起來。
意思知道之後,再來遇到的難題就是看懂老師的程式碼。
程式碼沒註解的地方,經過詢問之後約略清楚再做甚麼後,
開始設九宮格的欄位,給使用者去設定九宮格的強度。

之後利用ScanLine去找他得鄰近點。
bPtrOriginalImage0 = (Byte *)imOriginal->Picture->Bitmap->ScanLine[i-1]; bPtrOriginalImage1 = (Byte *)imOriginal->Picture->Bitmap->ScanLine[i]; bPtrOriginalImage2 = (Byte *)imOriginal->Picture->Bitmap->ScanLine[i+1];
再彩色濾波上,還要去考慮ScanLine的特性,當b=i時,g=i+1,r=i+2。

每一格在分別去乘上使用者所輸入的各個強度。
圖片出來之後就會有柔化,更清楚的效果。

再看別人的成果圖,我大多看不出有甚麼變化。
然後對著鈔票上的人頭作空間濾波時,才清楚空間濾波器的功用可以將圖片造成這樣的改變。


以下執行結果,可以看到人頭上的黑線條,全部都變成周遭皮膚的顏色,
做過空間濾波之後,看起來變得像是一張黑白像片。














以下是彩色的空間濾波的成果圖。




2010年1月15日 星期五

hw6


這次的作業是做一個空間濾波器

是一個3*3的濾波遮罩

這是跟同學討論出來的

運算方式是將圖片(1,1)這個點為中心的3*3正方形與遮罩器做運算後的運算結果

但是最後四個點會呈現白色

如果要讓他有顏色的話就只能做擴充

這是濾波出來之後的結果

雖然只有一點點模糊

但是看得出來

HW6


這次的作業是做一個空間濾波器

我做得是一個3*3的濾波遮罩
將這9個座標內的色彩值相加然後除以9
得到的值再傳回去
則數值就會被周圍色彩值影響
變成較平滑的樣子
上圖示我的成果
希望沒有太差:)

2010年1月14日 星期四

HW6




這次作業在上課時已經做一部分了,主要是將圖片的每個像素點,與周圍
的像素點做加權運算後再平均,來獲得圖像可以均勻化的效果,也就是利
用遮罩的方式,將每個需要處理的pixel加上周圍的8個pixels除以9之後
,當作新的pixel值,可以得到柔化的圖片,根據輸入的權重不同,柔化
的程度也不同,這次作業只有一些小問題而已,已經很順利的解決。

HW6

第六次的作業呢是以Spatial filter 為主題

這次的作業雖然說一開始有老師的範例程式碼幫助

但是一開始所設置的部分是以黑白圖片為主的變化

一旦換作是彩色圖片就會呈現圖片只跑三分之一的狀況

所以修改了部分程式碼

將原本的判定設為掃描三次圖片

讓整張圖片呈現完整的狀況

但是黑白圖片畢竟成像和彩色圖片不同

所以即使掃描圖片三次成功的讓圖片完整呈現

也會發生顏色不對的狀況

因為一開始在跑三分之一圖片的時候

發現都是出現單一顏色的狀況

所以除了單單作跑三次掃描乘三次迴圈之外

另外在顏色加乘的地方需要再加上數值改變的情形

修改前原本程式碼:

POriIma0[j-1]

修改後的程式碼:

Mask1*bPOriIma[(j-1)*3+k]

接著在設定公式的方面我採用的是:

1  2  1
2  4  2
1  2  1
 
所以對於模糊的變化量並不會很明顯,圖片要放大點才顯得出效果!

很明顯的看到下圖執行後的結果:


在數字儀表板數字以及方向盤上的英文字可以明顯的發現

左邊原圖的字體較為清晰

而右邊經過 Spatial filter 修改過的圖片字體較為模糊了


為了方便原圖比較所以我將圖片另存讓大家比較

修改後:



修改前:


這次作業說難並不難

只是要多想想要怎樣將圖片原本的黑白輸入修改

變成彩色的輸入修改

這樣就可以簡單完成了!


2010年1月8日 星期五

HW6


hw6 : 空間濾波器

效果:
  可以使影像變模糊化或銳利化。



規則:
  輸入數值完畢後,會先判斷是灰階影像還是彩色影像,再一判斷的結果決定要由哪一個 Image(#number) 元件執行轉換動作。





執行成果:

 1. 當輸入是一張灰階影像時 :
  開啟一張灰階影像後,手動輸入一個 3 * 3 的陣列值使其影像轉換。

 2. 當輸入是一張彩色影像時 :
  開啟一張色彩影像,先做色彩變灰階影像轉換後輸出在另一個 Image(#number) 上,假設該 Image(#number) -> Name -> Image_Trans ,後在輸入 3 * 3 數值按下轉換按鈕時,會先判斷 Image_Trans 是否存在,存在代表已轉換成灰階影像,就可由 Image_Trans 的圖來做轉換。

  其判斷圖像的程式碼如下:
  
   Graphics::TBitmap *Bmp = new Graphics::TBitmap();
//先判斷 Image2 是否有開啟一張影像圖。

//當 Image2->Picture->Bitmap->Empty==true 時,代表還未開啟一張圖像!
   if (Image2->Picture->Bitmap->Empty==true)
     ShowMessage("請載入圖檔!!");
//若以 Image2 已存在時。
  else   

  //開始判斷開啟的影像是否由彩色轉成灰階值,由於這個地方我是以手動操作色彩轉灰階,所以假若開啟的圖像是彩色的,若是直接由彩色圖像做權重加成的轉換,則輸出的圖就會以灰階的型態呈現,但是因為權重是由輸入者輸入,所以輸出的影像也可能會有變成類似紅外線感熱器所呈現的效果,但是是以灰階的型態呈現就是了!
  {
     if(Image17->Picture->Bitmap->Empty==false) //當有轉換成灰階值時
       Bmp->Assign(Image_Trans -> Picture -> Bitmap);
     else                    //當開啟的圖是灰階時
       Bmp->Assign(Image2 -> Picture -> Bitmap);
  }




執行結果圖片說明:

  在右邊上面的圖是以一張黑白影像執行的結果。

  現在右手邊的圖則是以一張彩色影像執行的結果。

 1. 先開啟一張彩色影像(如右圖中的左上方影像)。

 2. 做灰階轉換處理(執行結果在右圖中右下方的影像)。

 3. 輸入權重後執行轉換(執行結果在右圖中的中間下方的影像)。

HW6

空間濾波器
聽起來好像很難@@
簡單來講它的功能就是做類似柔焦的效果
就像鉛筆畫 用手指點在一點
作繞圈的動作 將黑色線條與白紙中 作柔化的動作
用程式的想法也很相同
把每個點與他的周圍做九宮格化
中間的點 藉由四周設定的權重去做運算
得出來後就會比較平衡 先拿一張邊線精準的圖片來做柔焦動作


照得不好 總覺得整張都很模糊....
不過程式執行的時候 邊線清晰跟模糊是差別很大的

回過頭來再做一次這項作業的研究
空間濾波器簡單來講就是做對比的處理
在影像上每個相鄰點的關係做轉換
藉由輸入的數值去判斷周圍像素的影響力

程式碼上的邏輯運算比較令人傷腦筋
步驟包含判斷灰階還是彩色
九宮格的RGB運算式中彩色圖的抓法就比較複雜
彩圖儲存方式為BGRBGR...由此方式一個點一個點的存起來
相對的 以中心點為XY去抓取附近九宮格的位置就比較需要思考
但是架構做起來後面想增加不同運算方式就簡單許多


hw6

此作業在於模糊化將一像素點與他周遭各點依照九宮格的權重(如下圖九宮格)
將周遭的像素點的值加成在一點上再取平均
讓新圖的每個點數值更加接近
如下圖6-1
圖內左圖為模糊化過後的圖
右圖為原圖
可以看出模糊化後線條部分更加不明
而各點色彩會與周遭更加接近
幾次模糊化後
整張圖將會變得幾乎無法分辨的感覺
全因模糊化時會將分界也一併模糊
個人覺得把各點與周遭乘上權重加起來後
更重要的是你要除以甚麼
必須將原本各權重的值加起來當作最後負責平均的數值
才不會讓加權過後的值超過
或是不明確


圖6-1

HW6















(已濾)























(未濾)











跟朋友討論了很久,一開始在灰階成功之後轉戰彩色的部分

卻出現問題,因為圖片只顯示1/3

看到灰階調色盤中的pf8bit

想說改成pf24bit,結果根本八竿子打不上關係(亂搞!)






個人覺得它既然只跑1/3,就乾脆幫它*3

bPtrResultImage [j] 改成 bPtrResultImage [i*j]

內部也些微改過一下

結果造成左邊灰褐色,中間出現黃線條,右邊整個就是黃色的

跟朋友討論過後才知道,原來一個像素點之中有一組RGB

所以假設4*4的圖加上RGB有12格

因為把一個Pixel之中的RGB忽略

原本橫列應該是(RGB,RGB,RGB,RGB)

導致掃描時候,只掃(RGB,R)

這等於只完成4/12

所以會變成圖片只呈現1/3

所以改成 bPtrResultImage[3*j+k]

內部也依次做調整,就可以了






只是之後發現還是跑1/3的原因是因為:沒有做專案的存儲。

導致明明是很正確的程式,結果Run出來還是錯誤的結果

還蠻令人好笑的....嗯。

HW6

這次的作業


一開始在家裡做的時候


可能程式碼有錯誤的地方


才會無法用"彩色的圖"去做"濾波"吧?!


因為跑程式跑了很多次


顯現出來的圖都會被截掉



後來
到學校做的時候
檔案竟然打不開
經過老師的指導之後
才知道原來是因為家裡的版本跟學校不同
所以無法開啟


再經過同學指導後


把圖改成"灰階"的


就可以成功的跑出來了!!!



hw6


這次是作業六:濾波器

由於老師已經有公佈範例程式碼,在加上跟同學的討論,所以成是上面基本上是很快成型的....不過我家的bcb在執行程式的時候會一直跳出"0x060e415b"指令參考的"0x00000000"記憶体。該記憶体不能為"written" 所以煩惱很久,但是後來發現是自己bcb沒有灌完全,再重灌一次就可以執行了