2012年10月24日 星期三

HW2 01360654

本次作業是要撰寫色彩統計資訊。主要是用BCB撰寫程式以分析圖像再利用Histogram呈現出來,在Histogram頁面裡的Channel則可以選擇要顯示RGB的顏色,Histogram Type可以選Original及Cumulative。首先,先點選File->Open載入一張較為深暗的影像當作範例圖片,這樣均化後才能與原圖做出明顯的比較。

圖(一)原圖均化前
圖(二)原圖均化後
圖(三)Histogram


圖(一)是還沒均化前,在這張照片是晚上拍的,除了路燈照射下來的光線其餘都是暗暗的,圖(一)所呈現的直方圖為圖(四)不管是R還是G還是B都非常的密集的集中在左邊,經過均化後不但變散了較密集的地方也變成又編了,把原本較昏暗的圖像變得清楚許多了。
而圖(三)則可以依照要看的Histogram Type、Channel及SAVE做出動做,在右下方也可以看到游標在直方圖裡面所以計算出來的的color level、pixel、countpixel ratio、累積像數值及百分比。


圖(四)原圖的直方圖              圖(五)原圖的累積圖
圖(六)均化後的直方圖             圖(七)均化後的累積圖
圖(六)圖(七)是經過均化後的Histogram,可以在圖(二)觀察出來明顯的變亮許多,經過這次的作業,讓我更加明白直方圖的作用。
以前都只是使用相機的使用者,現在能夠了解分析過後的圖像會呈現出另一個效果。


心得:

        選課之前,有去系辦詢問是否能加選其他年級的選修,結果是可以的,又加上這門課並無先修課程,所以在這樣的因緣際會下,讓我能夠在大一就能接觸這方面的課程,並且能夠更深入多媒體領域。
        雖然這是第二個作業,但也是第一分需要操作BCB軟體,就真的要拿出一位Programmer的真正實力了撰寫程式了。其實在這之前並未接觸過BCB這套軟體,雖然在高中時有學過VB,但說實在實際上要操作時,並不是非常的了解也碰到許多不懂的地方,因此常常跑到圖書館翻閱有關BCB的相關書籍,在苦讀幾週後,再把老師上課的講義以及上課所抄寫筆記慢慢得再複習一遍,才開始撰寫功課內容,在過程當中也發現其實這並不難,就是要多花一些時間慢慢的認識那些看不懂的語言, 也花了很長一段時間認真的解讀老師所寫的程式內容,讓我也要知道自己不懂的地方還有很多要學的東西也必須慢慢的摸索,好好的充實自己以可以在這門課可以真正的學到東西。

已經上課上了五週了,這門課就是要在課後要實際的複習操作才不會到寫作業時感到非常陌生,希望能夠在這個領域培養出更強大的興趣以增進自己的專業。



2012年10月21日 星期日

98360826_資工四甲_王至嘉_HW2

第一次作業主要是要從圖中讀出裡面pixel的分佈,進行分析還有均化的動作
我們必需先讀進一張圖,先看其原圖的Histogram的分佈
再進行Histogram的Equalization,觀察原圖與經過Equalization之後其變化的差異
而Equalization核心想法感覺有點似是等比例放大的感覺
我們要先計算出原圖中pixel分佈佔0~255的百分之幾,再讓每個Pixel乘上比例
平移到其相對應的位置,讓整張照片可以由暗變明亮、有色彩
但並不是每個暗的地方都一定會變得有色彩,其中的原因為,每個點pixel的色彩值都是不同的
有可能它的RGB的值相同,所以就不會有色彩出現,只會出現黑、灰的色彩而已

接下來的實驗部分
第一張圖為老師上課用到的圖
在夜晚拍照,可是沒有開閃光
此為原圖
因為原圖的光線來源太弱
導致此圖的Pixel都集中在Histogram的前半部










如此圖所示


我們利用Equalization處理此圖之後,會發現原本幾近一片黑的圖片變成一張記載著漂亮山間走道的圖,上面還有一隻紫嘯鶇

而它的直方圖也不再集中在前半部了,而是依照比例的散開
在累積直方圖的結果上
原圖尚未執行Histogram Equalization的時候,我們可以清楚的看到
所有有斜率的部份都集中在前面的地方,而中後段的部份可以看到它是完全沒有斜率的
也就表示說,原圖的Pixel集中在前面就累積完了。
而在經過Histogram Equalization之後,我們可以發現前半部的地方,RGB 三種顏色有一些是有在累積的,有些則是到中後段才開始累積,由此我們可以發現,一張影像如果亮度並沒有很亮的話,那麼其Pixel色彩值會集中到0~255中偏小的數值,而亮度較亮的影像,其Pixel的色彩值會偏向較高的數值。

再來我們來比較一下我們的程式與市面上PhotoShop它們相同功能的處理
我們可以發現,我們程式的圖,經Equalization所處理出來的圖較PhotoShop處理出來的圖是較明亮的,但也比較粗糙,其原因為乘上的比例不同所造成的。
 

用PhotoShop所做出來的Equalization作出來的直方圖相當的平均

而其累積直方圖的走勢也較我們的程式平緩








直方圖&均化 HW


先開啟一張原圖,感覺就是藍色跟紅色色調居多。



按下Histogram鍵轉換成直方圖,藍色跟紅色色彩值分佈較廣,尤其是紅色從暗到亮都有一定的像素,重點是綠色主要分布亮度較低的地方藍色則反,再加上紅色約平均分布,根據直方圖分析才知道原來為何整張圖有一片偏紫藍的感覺。



均化過後對這張影像而言出來的效果是不錯的,影像均化會讓整張照片增強對比的,所以原本這張看起來感覺死氣沉沉的影像變成春天來臨似的。


均化後影像的直方圖


很久沒用BCB寫程式了,連拉個介面會有些困難,但花些時間回溫終於做成勉強像樣的介面,過程中發生不少語法的小error或是compile出來不是預期的結果,再參考研究老師的程式好幾天請教同學終於做出來了,利用BCB寫影像處理的程式真的很有成就感,其中因為可以利用上面眾多的物件讓你做成你想要的樣式再來就是要宣告的變數跟陣列好多。撰寫過程中腦袋要非常清楚,所以對我來而言做得蠻煎熬的,也代表著我應該要加把勁加強自己的程度。


2012年10月19日 星期五

99361130 莊鈞凱 HW2

  這次作業我最大的收穫是Histogram的運用 ,經由分析相片(圖片)的Histogram來了解整張相片是如何構圖成像 ,以往在使用數位相機也只是使用「Auto」模式來進行拍照 ,對於整張圖片的色調、明暗度則完全沒有概念. 然而經由這次撰寫程式的經驗 ,也了解到我們可以從相片中獲取什麼資訊 ,又可以對相片做什麼樣的處理 .不同於實景 ,相片是間接呈現於眼前 ,經由程式來判斷、修改相片資訊 ,可以得到不同於實景的感受.

(圖一)構圖豐富的海灘相片

(圖二)海灘的Histogram

  (圖一)所呈現出的視覺感受使人感覺非常舒服 ,天邊的夕陽予人光亮的感覺 ,而端看礁石可以發現背光面的陰影 ,海面上的波浪也非常立體. 再來看看轉換成Histogram的(圖二) ,對應了我們觀覽相片的感受 ,RGB三色的明暗大體上置中 ,沒有特別集中於光亮處或是暗處 ,再細加端詳會發現除了置中處的色彩外 ,整個Histogram偏亮面較暗面多 ,可能是天邊的夕陽造成整張構圖小幅度的偏亮 ,然而還是有適當的陰影來造成相片的反差 .總體上來說這張相片在明暗的規劃上是比較完美的.

(圖三)手機拍攝夜景

(圖四)手機拍攝夜景的Histogram

  (圖三)是用手機拍攝的夜景 ,我們可以很清楚的知道相片中的光源嚴重不足 ,只能依稀看到是街景 ,但相片中的景物卻沒有辦法很清楚的判別出來 .再讓我們看看(圖四)的Histogram ,果不其然色彩大多集中在暗處 ,已經算是曝光嚴重不足的Histogram型態 ,致使我們無法清楚的判別出相片中的景物 ,接著我們使用均化來處理這張相片.

(圖五)均化後的結果

(圖六)均化後的Histogram

  (圖五)即是均化後的相片 ,明顯的可以發現相片變得比較亮了 ,相片中景象的輪廓則更加的清楚 ,看看均化後的(圖六) ,暗處的色彩被平均的分配到了每個明暗度 ,致使我們對於相片中的色彩可以看得比較清楚 .另外我們會發現均化後的相片中有許多雜點 ,因為這是手機所拍攝出的相片 ,我認為可能是因為手機的相機畫素、感光元件較差 ,同時又因為拍照時的曝光不足 ,而動態元件是有範圍限制的 ,導致Histogram更加左方的色彩無法截取到 ,使我們在均化時被吃掉的色彩值是無法處理的.

  這次作業中為了更加了解相片Histogram的意義 ,也找了一些相關資料 ,與老師的上課內容相互對應 ,使我對於這周的作業內容更加有感覺 ,進而學到了更多的知識 ,比如說在這次作業之前 ,我只知道在大陽光下拍照會美美的 ,但知其所以卻不知其所以然 ,現在我了解到於太陽光底下拍照時 ,由於光線變化大 ,相片於Histogram中的光暗資訊會比較平均 ,又同時具備了高光位及低光位 ,有了較大的反差 ,相片看起來就更加的生動 .

  對於Histogram的運用上我得到了一些想法 ,讓我們再看一張圖

(圖七)天空中雲朵的相片

  (圖七)是拍攝天空的相片 ,看起來漂亮是漂亮 ,但看起來總覺得怪怪的 ,這時候我們把它轉換成Histogram圖.

(圖八)雲朵相片轉換成Histogram圖

  (圖八)是我們轉換成Histogram的結果 ,這個結果大出我們所料 ,因為在想像中拍攝天空的相片不是色彩應該大多分布於亮光位嗎? 但這張相片在高光位幾乎沒有色彩 ,色彩大多集中在暗光位及中間 ,推論可能是拍攝照片時光圈及快門的設定關係 ,是不是拍攝者特別所為就不知道了 .重要的是經由Histogram的分析 ,我們也可以學著分析相片 ,來得到一些更有用的資訊.

  於程式的撰寫上 ,由於缺了一個禮拜的課 ,沒有詳細聽到老師對於Histogram的上課內容是比較可惜的地方 ,好在在之後的加課時間再向老師詢問時 ,釐清了之前所不了解的部分 ,成功的把直方圖實作出來 ,對我來說當初最大的問題點在於捉取圖片的像素內容 ,後來經過老師講解 ,才知道原來利用ScanLine的函式 ,可以從圖片一行一行的捉取出RGB資料 ,而有了圖片資訊 ,在後續的Histogram作圖及相關的計算就簡單多了.

  周周的作業都讓我一點一滴的從「做中學」 ,越來越加了解影像處理這門學問 ,以往對我來說像迷一般的學程 ,經由一次次的學習不斷的更加清晰 ,在學習的過程中由於很貼近生活 ,也讓我得到了很多樂趣 ,對影像處理也越來越有興趣.

96360210 黃彥羲


原圖

均化







一開始的時候真的有被困擾,必須要把OpenPictureDialog1->Execute外面加上if變成if(OpenPictureDialog1->Execute()),否則當你沒選擇檔案的時候,就會跳出該警告。(Save也是)




 

 
 


 
大致寫法是照著範例去更改,比較麻煩是把三張合而為一。
打勾以後取消該色直方圖,一開始是透過把該顏色畫筆改為白色重畫一遍,後來想到乾脆直接用FillRect白色填滿整張圖比較快。
三張圖合體後多了一些小麻煩,例如:MouseMove的事件是共用的,如果透過鼠標的X座標去抓資訊,例如顏色用X%3,會把沒有打勾的顏色資訊也顯示出來,還要多判斷該顏色是不是有勾選。後來看到老師範例裡的做法,如果多色同時勾選,只會顯示一個顏色的資訊(優先R>G>B),其他顏色會被忽略,算是設計上的缺陷吧!



 

Cumulative方面則是多宣告一個跟iHistogram[3][256]很像的CPCount[3][256],256是因為ColorLevel是從0~255,CPCount用來累計在該ColorLevel以前的所有Count。再把範例中iHR = int(( float(iHistogram[k][i]) * fHistogramScalar ) + 0.5)裡改成CPCount[k][i] * fHistogramScalar
,結果就出來了。

做到這邊可以發現,畫直方圖這段程式不斷的被重複,因此我一開始想到了method(function),可是BCB裡的function是不能使用到form裡面物件的。後來想到可以把重複的程式放到一個物件裡,然後給他一個事件(假設物件ABC,事件Click),之後就可以利用ABCClick(Sender);來呼叫這個事件。



均化


有了cumulative的資訊後,均化後的對應值=Cumulative/PixelCount*255,最後把每個點改為對應值即可。均化是照著面積比例去平均分配,因此Level較集中時,效果會比較明顯。我用的圖最大值不超過200,當均化以後,圖就會變亮。



96361115 王柏翰 作業一


原始圖片
   
直方圖


累積直方圖

均化後圖片
均化直方圖
均化累積直方圖

這個作業我覺得最難的地方是在演算法,數學差如我,goolge了以後還是很混亂,大多數人寫的還是讓普通人很難看懂0  30,比較看得懂的說法是"把原本集中在某區塊的機率函數平均分布在所有顏色上面",從0-255的像素值對應0-1,然後把出現的相對機率乘上255成為我們要的均化值,已經簡化了想法以後,做起來其實還是沒那麼簡化。
姑且選了一張電腦裡面唯一的一張BMP檔的圖片,因為是卡通而且高清的,色彩很鮮豔,在做了均化以後也可以很明顯的看出差異,但是就也可以稍微的看出有一點小顆粒,還有後方景物的線條更加的明顯。
另外,均化後的累積值方圖超級平滑的說。

hw1 97360694 楊景盛

原圖

均化前直方圖

累積直方圖

均化後直方圖

均化後累積直方圖

也不是第一次修這門課了,之前也不乏操作bcb的經驗,製作第一次作業還不算太難,希望往後可以持續跟上進度,完成往後的作業,首先我覺得做影像處理的作業並不困難,但必須要掌握一些重點,就是要瞭解製作程式的目的為何,這樣便可以在寫程式的過程當中,不會因為不知道其目的為何,便盲目的卡在過程中,再來就是要注意每週的進度,如此就可以掌握往後的課程節奏,若是要在老師的範例程式加入其他新功能也不會有什麼大問題,另外未來也希望未來除了更熟練的寫出程式外,也可以挑戰一些更加特殊的功能。

99360886 李彥瑾


這是我所
匯入的圖片

G


B


R


RGB

累積

均化後







雖然這是使用老師所撰寫的程式
可是我花了很久的時間把程式碼算是看懂了
不會的地方都有研究一下
看完覺得BCB真的滿好用
而且均化前後的差別滿大的

還有能利用一個晚上大家一起寫程式研究滿好的
不但可以立即的問到自己的不懂
還可以看到他們寫出自己做不到的東西
反而更學習了一點東西

第一次用XE2他真的比6.0好用一百萬倍