2010年12月31日 星期五

HW04












































圖片好像分的太開,所以效果不明顯,這次作業基本上就是把兩張圖片分別取出紅跟藍兩色,再把兩張圖所截取的顏色還有第一張圖的綠色放在一起輸出在同一個ScrollBox裡,這樣不會像是課堂上老師給我們看的只有紅藍兩色的圖,而是在綠色加入後,變成色彩上比較真實豐富的圖。

HW4 模糊化&銳利化&胡椒鹽圖的處理

這次的作業做模糊化和銳利化和胡椒鹽圖的處理

一開始我是先做模糊化,經過朋友的教導後,就自己打程式看看,但打完後卻跑不出來有BUG,所以再次求助朋友,經過兩過人抓BUG後,程式可以跑了,但圖片依然沒有,還是呈現白色狀態,這次就把老師給請出來了,經過老師畫圖解說,對這個作業的演算法,有更深的了解,而取9方格的位址也懂了,但依然還是有BUG,圖片還是白色,經過某位同學,終於把BUG抓了出來,以下是完成的程式碼。













以下是模糊化的原圖



















以下是經過模糊化的圖片



















之後就要做銳利化的部分了,一開始就先跑去問老師演算法,知道說他是取9方格的5個位址,只有中間的位址是乘5,其他都乘(-1),而取位址剛做模糊化時就會了,所以就變得簡單多了,把這些全部加起來,原本以為降就好了,但跑出來的圖很奇怪,再次尋求老師幫助,才知道有些顏色會超過255或者是小於0,所以要先判斷,超過255就給他255,小於0就給他0,其他就原本的值就好了,這樣打完後,也以為降就好了,結果判斷是那邊有錯,那3個判斷,分別用if、if、else, 但聽老師說才知道錯了,要打if、else if、else,這樣才對,作業因此就完成啦!!!

以下是銳利的程式碼


























下面的圖是銳利化的原圖




















以下是經過銳利化後的圖片




















接下來是找一張有胡椒鹽的圖,變成平滑的圖,再做這個作業之前,我去問了一下同學的演算法,把9個方格的像素去做sorting,經過排序後,把中間那個位置得像素存回去,即可完成,聽完後覺得似乎挺簡單,不過說到sorting,就想到資料結構的東西,天阿~~早忘記了,好險我之前的作業有放在網路硬碟,我開啟以前做sorting的作業,複習了一下sorting的方法,把它放在我的程式上面,作業就打好啦!!!以下我是做彩色的,RGB三個顏色分別要各自sorting一次,並把中間值放回去,下圖是其中一個顏色的程式碼























而下面是胡椒鹽的原圖






















而下面是把胡椒鹽處理過後的圖





HW2 均化與直方圖統計



均化:是先掃過圖片中的像素中的數值,再用統計的觀念計算出PDF。
我在下面這行程式卡很久
imResult->Picture->Bitmap->PixelFormat = image1->Picture->Bitmap->PixelFormat;
一直找不到錯誤,所以圖片都不出來,
然後RGB找值的時候也有遇到問題,不過還好同學有幫我找到錯誤,所以作業成功的做出來了。

hw02

原圖














原圖的RGB












均化後的圖片..














均化後直方





































在這次的作業中,其實花的滿久的時間來想這程式如何寫,當然後來問很多人才清楚這個程式如何寫好,想不太出來要如何寫出這個程式,上課時老師講解演算法的時候,還是不太懂,所以卡了一會,後來參考了以前的範例程式,之後仔細的跑過一遍流程,就大概瞭解了,就開始動手寫和一直Debug,剛開始寫均化還滿不太順手的,一直到後來的直方圖,只要用MoveTO LineTO來做個調整就比較順手了,這次其實還卡滿久的,但是與同學互相討論之後,就懂了不少。


直方圖均化與統計

直方圖均化與統計












直方圖統計

















主要是在圖像處理方面,直方圖的圖像通常是指一個直方圖的像素強度值 此柱狀圖是顯示有多少像素的圖像中的每個不同的強度值中找到該映像。 對於8位灰度圖像有256個不同的可能強度,所以柱狀圖顯示圖形顯示256號碼分佈的像素的灰度值之間。 也可以採取直方圖的彩色圖像 ---或者個人直方圖的紅色,綠色和藍色通道可採取或一個三維直方圖可以生產,與三個軸代表紅色,藍色和綠色通道,和亮度在每個點代表的像素數。 確切的輸出操作取決於執行 ---這可能僅僅是一個圖片的需要在合適的直方圖的圖像格式,也可能是某種類型的數據文件代表直方圖統計。

這部分的程式碼看了很久,感覺不是很好懂,而且還運用了新的元件─radio group 使我找了很久,還好問同學之後,比較了解ㄌ!

主要的程式碼是


imHistogram->Canvas->Brush->Color = clWhite;

if (rgHistogramChannel->ItemIndex == 0)

imHistogram->Canvas->Pen->Color = clBlue;

else if (rgHistogramChannel->ItemIndex == 1)

imHistogram->Canvas->Pen->Color = clGreen;

else if (rgHistogramChannel->ItemIndex == 2)

imHistogram->Canvas->Pen->Color = clRed;

else

imHistogram->Canvas->Pen->Color = clWhite;

利用這個程式碼來採取一個三維直方圖可以生產,與三個軸代表紅色,藍色和綠色通道,和亮度在每個點代表的像素數。

心得:感覺這個程式碼,真的很不好懂,但是有去問同學之後,就還好了!!比較知道這三個顏色通道的意思,還有對程式碼,也比較了解。雖然在寫程式的過程中,因為有些元件的關係,找了很多的資料,所以我覺得,雖然有時找到的資料不是我要的,但是可以知道很多不同的東西。

SONY 3D

   SONY 3D展的最後一天,我大約早上10點多就到達現場,可能因為還很早,所以人沒有很多,讓我很順利的就進去參觀。




  一開始工作人員會先給一副3D眼鏡,然後台上會有解說人員介紹這整個活動的目的跟特色,而左右兩邊有兩個模特兒會根據螢幕中的模擬情境而行動,其中有一個是3D的賽車遊戲,由右邊的模特兒試玩,整個過程會顯示在正中央的螢幕中。





  解說完畢後,就到裡面去參觀,後面那個就是3D模擬賽車,在左邊還有各種相機,可以帶3D眼鏡後試拍感受他的3D立體感。



  裡面還有一個小型的電影院,一樣是戴3D眼鏡後再進去看,整個場景非常的立體,感覺那些海洋生物真的在身邊游動呢!



    這本小冊子是在一進去時就會發的,在最後面只要集滿六個體驗區的章,就可以兌換小禮物,我選的就是右邊的那隻有LED燈的筆,感覺這次來參觀這個展覽真的非常有趣,希望以後有機會還能得知這樣的資訊。

HW03模糊化



胡椒鹽原圖



上圖為胡椒鹽圖片



上圖為原圖




上圖為銳利化後




上圖為模糊化後


心得:這次作業越寫越順,一開始先讀原圖,之後把原圖切割,3*3 = 新的一大格,新的一大格為3*3的顏色的平均.打起來還滿順的,但是原本我是用黑白的來打,所以一直顯示黑白害我有錯愕一下!之後有同學的幫助下,才知道j的地方要*3,我一直沒有*3,所以只跑黑白!銳利化比較簡單:)只要把分3*3分割圖,取以中間為主的上下左右4格的色彩值,個別*(-1),只有中間那塊*5後,把色彩值全部加起來就得到答案了!

重點程式碼:

(模糊化)
bPtrImageRow2[j*3] = (byte)((bPtrImageRow3[(j-1)*3]+bPtrImageRow3[j*3]+bPtrImageRow3[(j+1)*3]+ bPtrImageRow4[(j-1)*3]+bPtrImageRow4[j*3]+bPtrImageRow4[(j+1)*3]+ bPtrImageRow5[(j-1)*3]+bPtrImageRow5[j*3]+bPtrImageRow5[(j+1)*3])/9 + 0.5)

(銳利化)
x = (bPtrImageRow3[j*3]*(-1)+ bPtrImageRow4[(j-1)*3]*(-1)+bPtrImageRow4[j*3]*5+bPtrImageRow4[(j+1)*3]*(-1)+bPtrImageRow5[j*3]*(-1) + 0.5)
只是最後要判斷他是否有overflow!!



胡椒鹽:
做法其實很簡單,上禮拜跟同學研究,其實還是用那9個格子,找到影像在記憶體中每一行的起始位置後,取道他們的色彩值後,加以排序,在將排序後的取中間值,丟回我們原本的一大格中!
主要程式碼:
data[0] = bPtrImage3[j-1] ;
data[1] = bPtrImage3[j];
data[2] = bPtrImage3[j+1];
data[3] = bPtrImage4[j-1];
.....(沒打完怕抄襲@@)
以上是將3*3的個個色彩值丟入陣列好做排序!

bPtrImage2 = data[4];
最後在將排序後的值丟會原本的大格中!

HW02


上圖為原圖,其直方圖如下







經過均化後的圖片

直方圖








這次的作業感覺比上次還要難,一開始老師在教演算法的時候聽得不是很懂,但是聽過幾次後大概知道它的概念,可是還是寫不出來。在程式上遇到的困難大概有兩個,一個是演算法方面的問題,剛寫的那幾天都寫不出來,也研究過網路上的程式碼,但是一直有bug,後來還是經過與同學討論才知道原來是我想法錯了XDDD。第二個問題就是直方圖出來不對,呈現的位置會超過頁面,但是經過修改數值後就好了。
結論就是,經過均化後,我家的狗變的好模糊@%^@%&%&

hw02








原圖



原圖RGB



均化後圖片


均化後直方圖



這次的作業剛開始只聽理論的部分聽不太懂,後來看過範例程式和請教同學後才漸漸了解,只要了解後就知道其實並不難寫,剛開始要先寫均化,這裡讓我卡了一點時間,主要是因為有些值一直出不來,Debug完後就寫直方圖。而直方圖就比較好寫了
直方圖最主要程式碼
imNew->Canvas->MoveTo(i*2+1,300)
imNew->Canvas->LineTo(i*2+1,300-t)

這次遇到錯誤也是一直Debug,才能了解錯誤在哪,而不是一直看著程式碼不動,這樣才會有所進步。


Homework4 filtering

平滑化

filter簡單的來說就是模糊化或是用於減少雜訊
就是把權重平均,透過權重把某些像素加到比較重要的像素上
透過積分的方式就可以得到這樣的效果



這次作業的演算法
把9個格子內的像素點的值加起來在除上9
就可使圖片平滑化


Sharping
演算法:把圖像作拉氏轉換
->g(x,y)=f(x,y)-f''(x,y)
=5f(x,y)-[f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)]
使主體更加突顯
在做拉氏轉換了時候,一相減或相加
會使像素值<0或者是>255的overflow,需要處理overflow的問題


銳利化
3*3中位數濾鏡處理 (medium filtering), 去除胡椒鹽雜訊
演算法:把灰階影像的九個值去做Sorting
排序完之後取到的中位數,輸出結果
Ex:10,20,10,15,10,20,30,10,20,100
10,10,10,10,15,20,20,20,30,100
再把15輸出給結果


medium filtering

這次困擾我最久的是,在讀9宮格裡面的值
包含怎麼用到RGB裡面
經過老師的講解
讓我恍然大悟,直接打通任督二脈阿哈哈
還有一點容易忽略掉的
要先做運算再把值轉成byte才會對