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

2010年1月20日 星期三

HW03_new






1.GrayHistogram


以ARect為範圍統計直方圖的程式碼:

Byte *ptr; long GrayCount[256] = {0}, MaxGrayCount = 0; for(int row = 0; row < ptr =" (Byte">Picture->Bitmap->ScanLine[row];



用8bit灰階圖為方法的程式碼:

for(int col = 0; col <> MaxGrayCount) MaxGrayCount = GrayCount[ptr[col]]; } }


初始化直方圖的畫面得程式碼:

Image5->Canvas->Brush->Color = clWhite; Image5->Canvas->FillRect(TRect(0, 0, Image1->Width, Image1->Height));


畫出直方圖畫面的程式碼,利用for迴圈:

for(int index = 0; index <>Canvas->MoveTo(index, Image2->Height); Image5->Canvas->LineTo(index, Image2->Height * (1.0 - (double)GrayCount[index] / (double)MaxGrayCount)); }


2 . RGBHistogram


以下都跟畫出GrayHistogram的方法相同~


用8bit灰階圖為方法的程式碼:
for(int col = 0; col <> MaxGrayCount) MaxGrayCount = GrayCount[ptr[col]]; } }

初始化直方圖的畫面得程式碼:
Image5->Canvas->Brush->Color = clWhite; Image5->Canvas->FillRect(TRect(0, 0, Image1->Width, Image1->Height));

畫出直方圖畫面的程式碼,利用for迴圈:
for(int index = 0; index <>Canvas->MoveTo(index, Image2->Height); Image5->Canvas->LineTo(index, Image2->Height * (1.0 - (double)GrayCount[index] / (double)MaxGrayCount)); }


RGB呈現:利用FOR迴圈將RGB 顯現..


for (int i=0;iHeight;i++) { ptr=(Byte *)bmp->ScanLine[i]; index=0; for (int j=0;jWidth;j++) { b=ptr[index]; g=ptr[index+1]; r=ptr[index+2]; RGBhistogram[0][b]++; RGBhistogram[1][g]++; RGBhistogram[2][r]++; index+=3; if(RGBhistogram[0][b] > MaxBCount) MaxBCount = RGBhistogram[0][b]; if(RGBhistogram[1][g] > MaxGCount) MaxGCount = RGBhistogram[1][g]; if(RGBhistogram[2][r] > MaxRCount) MaxRCount = RGBhistogram[2][r]; } }



心得:


這是作業三~ 我也重新看過程式碼 並且加上註解,就像是我們知道value的範圍是0~255,可以直接宣告一個256的陣列來統計,最後在畫線條的時,再去取得它的出現次數除以它的百分比.這次作業,做起來顯的卡卡的,可能是我還不熟析的關係,我很認真的再去研究了一次程式碼,加上了注解,希望老師可以給我加點分數...謝謝

2009年12月25日 星期五

HW03




這次的作業是把一張圖做RGB值的統計並用直方圖顯示出來
實作方式為利用一個二維陣列和選擇Channel的方式
去記錄RGB個別的值
後來參考了老師的程式
知道了可以使用MoveTo和LineTo畫線的長度
還有使用Image2->Canvas->Pen->Color去畫線的顏色
又看了老師關於之前直方圖均化的範例程式的這兩行
iImageHeight = imOriginal->Picture>Height;
iImageWidth = imOriginal->Picture->Width;
才知道原來多了這兩行
圖片才可以順利進行瀏覽
好不容易完成了這次的作業
有點小小的開心:)


HW3




這次作業有點難度~但是跟同學討論過後好不容易做出來了~~
Move to 跟 Line to的座標設定一開始有點搞不太懂
後來問了同學之後
才清楚原來Move to 跟 Line to代表直線的起點與終點
知道自己哪些地方比較不懂以後
下次還要更努力才行



2009年12月18日 星期五

HW03




終於弄好第三個作業了...
這次主要是統計出RGB三個值
弄成直方圖
再加上適當的比例縮小
即可完成

裡面比較有問題的地方就是弄成直方圖了
對於一些細節不是很懂
不過在有GOOGLE大神下還是搞定了


PS:電腦這禮拜突然開不起來害我超緊張...
還好後來有修好了,差點以為東西要不見了的說

HW3






從圖片擷取出顏色個別的數值,
在看過範例程式之後,
從Moveto以及lineto來分析
畫出線條這部分比較簡單
只是在顯示比例上還要想辦法去做調整
讓曲線平滑一點
作的不是很精細,很多小功能
都還可以加上去。

HW3




直方圖對我來說應該要是很熟悉的部分才對
因為我們這組專研有許多大標題
其中的直方圖標題就是由我負責
所以老師一開始再講值方圖時我就有些許概念
不過我們專研使用的是DEVC所以不能直接用在BCB上
用BCB寫跟DEVC寫整個就是大不同...
而這禮拜好多作業跟事情,突然說要把前三次的作業都繳上實在是太突然了...
為了趕作業只好先大略弄一弄,趕緊把能找的資料找一找,最後終於搞出這張圖了!
剩下不足的地方只好等之後再研究了,先交再說Q..Q

HW03













這次程式真的不容易
主要是參考範例程式和巴著同學狂問這樣...
利用imHistogram->Canvas->Pen->Color畫直方圖都還OK
之後嘗試寫mouse move ,會出現floating point division by zero的錯誤
搞了很久還沒想到要怎麼處理這個問題......就先把這個功能註解掉了:P

2009年12月17日 星期四

HW3 - 直方圖統計。

(又遲交了,嗄嗄嗄...。)

  這次的作業是把一張圖做RGB值的統計並用直方圖顯示出來,實作方式為利用一個二維陣列和選擇Channel的方式去記錄RGB個別的值。這次主要卡在的地方是不知道要如何在圖片上畫出一段特定長度的線和畫出有顏色的線。一開始有自己的想法,想把一個R值的統計結果放在一個二維陣列,直接顯示到圖片上,不過這麼一來就要使用三個二維陣列去顯示,會很佔記憶體空間。後來老師公佈程式碼和同學的參考範例,知道了可以使用MoveTo和LineTo畫線的長度,還有使用Image2->Canvas->Pen->Color去畫線的顏色。實作結果如下:

原圖↓


R的直方圖統計結果圖↓


G的直方圖統計結果圖↓


B的直方圖統計結果圖↓


  加上參考老師所寫的範例,可以調整顯示結果的比例,調整成更清楚的圖形分佈,而直方圖下方的拉吧範圍為0~255,可以自己隨意拉動,且依據拉到的位置顯示出該位置數值的像素數。

HW3


哈, 奮鬥了很久,終於寫出來了!
在參考過老師的範例程式之後,對於讀取色彩值方面比較沒有什麼問題
比較有問題的事在Move to跟Line to的坐標設定, 問過同學之後才知道原來是代表直線的起點跟終點的意思
接下來, 想試著寫出像老師的範例程式一樣, 可以調整比例的功能! 哈

HW3

這個作業本來還是不明白直方圖要畫甚麼線,看了範例程式才知道是運用LineTo,
本來一直覺得很難,寫出來後才恍然大悟原來是這樣。
給定一個最大和最小值,和RGB3個亦為陣列,判斷若超過最大或低於最小時,
再把該RGB值取代原來的最大最小值。



hw3修改:

  對於這個作業是在學校寫的,由於時間太匆忙,需要趕在電腦教室關門前上傳,所以來不及做多一點的說明。因為沒有用過gmail,在要修改時又一直找不到修改的按鈕,所以就這樣擱置下來了!
  本次作業其實我又重新做了一遍,ScrollBar在按到最左邊時就會發生錯誤,而中止程式執行,主要是若像素值出現0時又做除法運算,把該像素值放在分母,造成運算錯誤。而在除錯過程中,發現只要把左邊的設定值min由0改成1就不會有這樣的問題出現了!
..

HW3 Histogram

這個作業很頭痛 弄最久 又是卡在BCB元件不會用 就不知所措= = 光一個Image->Canvas的MoveTo LineTo坐標設定就想半天 統計RGB值不難 就是難在怎麼用畫筆呈現圖就搞好久 想學老師用RadioGroup分別show出RGB的成分顯示 可是我不太會用= =只好笨笨的一次Run到底 下面是我用自己的圖試看看值跑出來對不對 跟老師blog的圖都做測試看起來統計的值應該是沒錯 下面是程式執行結果








HW3

原圖





R:


G:





B:
這次作業是等到老師 放範例程式碼
才勉強寫出來的
原來可以用MoveTo和LineTo劃線
Image1->Canvas->MoveTo(x,100);
Image1->Canvas->LineTo(x,100-(100*colorHistogram[G][x]/imaxGvalue));

用前面代表起點位置,後面是終點
用for迴圈來跑就可以完成了


--------------------------(補)
一開始照著moveto lineto 不過顯示出來一值都擠在前面
↓如下














可能不了解真正moveTo跟lineTo真正的意思, 後來GOOGLE了一下 , 才知道
lMoveTo(x,y) - 將畫筆移到(x,y)位置 結果他都畫在前面
lLineTo(x,y) - 從目前畫的位置,畫一線段到(x,y)位置
從下面往上畫那時候我還學到了Canvas畫布屬性
還可以畫不同的東西
lRectangle(x1,y1,x2,y2):畫矩形;
lEllipse(x1,y1,x2,y2):畫橢圓;

如下


HW3

這次的作業是要顯示出R G B色系比例程度
搞了好久才搞出來
因為這次還要統計出陣列的值
所以花了不少時間
好在最後還是參考了老師的範列程式
才比較有看懂
比較起來我覺得這次的作業比前兩次的還要難
不過總算是弄出作業了

HW3


這個程式是要將圖片的色系比例程度顯示出來,由於有老師分享的範例,所以一些介面都能很快的弄出來,程式碼大致上是將整個畫面掃過一遍,然後將所查詢的色系擷取出來,然後顯是在直方圖上面,不過開檔錯誤以及某些色系無法讀取,是此程式尚要改進的地方。

HW03


關於這次作業,一直拖了很久,一開始想到說如何做到能讓圖片顯示出來時


能夠自動的縮放,而不用再用上下與左右的拉bar才能看整張完整的圖片


透過Google大神找尋各種看起來好像有方法的論壇


結果發現問題跟實際討論的內容有很大的出入(就跟老師之前一樣)


找不到自己問題的解答,才一直的卡關


看了看老師了關於之前直方圖均化的範例程式的這兩行


iImageHeight = imOriginal->Picture->Height;

iImageWidth = imOriginal->Picture->Width;

才知道原來多了這兩行,圖片才可以順利進行瀏覽

只是跟我想像中的好像又有點不一樣

畢竟我旁邊還是要用到拉bar才可以看到完整的圖片

不過我想這問題我可以之後再繼續研究

我覺得這次的教學方法還不錯

可以真正直接知道老師程式的邏輯是怎麼進行的

還有哪些比較關鍵的KEY

不過這畢竟還是老師的方法

我要能夠實際瞭解,甚至作更好的改良

才能算是我真的學會了!

這次直方圖有想說要一張張呈現

但後來想想還是全部一起呈現比較可以去作觀察

最後程式執行一段時間後會有終止,使得我沒辦法繼續使用別的功能

我想我得再找出原因

另外,這次我也一併把之前教過的負片效果一起呈現出來

這次由於是經過老師的範例程式與同學互相討論


所以這次大部分是作程式理解的作用!


對於程式中型態轉換的問題總是在偵錯中找不到困惑許久


BCB似乎對這種錯誤沒辦法明確指出


不過最後還是有找出來就是了



HW3

修改過後圖片↓

將直方圖線條放大↓


找了網路上一些BCB的程式碼講解
(都跟直方圖沒什麼關係,找不到要的…)

經過更熟悉BCB,也就是VCL基礎終於弄懂我錯誤在哪邊

這個直方圖還沒有測試過到底有沒有抓錯…

花在要讀懂程式碼上面的時間遠遠大於我之後把全部需要的東西整個弄出來還要多很多…

還有一個小地方尚未修…就先放這張圖了
ColorBox的地方還沒有設定選到那顏色就會跑出來哪個顏色(還沒更改前三個的設置)

經過修改,這是把老師的範例程式做較完整的呈現
還沒辦法解決例外處理的部分…只能先透過將滑鼠指定好Load讀圖後就能解決這個問題…

----以下為更新過後------
修改掉之前錯誤的地方、圖片更新、心得增加。

關於ColorBox的地方改為使用RadioGroup方便點選…也不會出現一堆不相干的東西
現在想想應該是當初就設置錯誤才會出現那種問題(對元件的不熟悉

之前有提到關於例外處理的部分其實跟這沒有關係,
單純就是我在寫程式上造成某些值不能運算的錯誤。

問題就是因為我圖可能還沒讀進去,但是我卻因為其他的地方要使用到這項東西
例如我滑鼠移動到上面要抓像素…但是卻抓到空值這類的問題…

後來在上課有問老師,只要在Visible做設定就可以解決問題
讓那樣元件一開始是未啟用狀態,後面要使用到在開啟設為True

因為這個作業接觸到沒用過的元件,而且我在寫程式時想說能否使用其他東西來代替
也讓我學習到蠻多關於BCB內元件的使用。

hw3

作業三因為有老師的範例
所以拿來參考了一下 哈哈
而且看不懂的程式碼
我有上知識家查詢
加上跟同學們討論後
最後終於成功弄出來啦!
很開心:)
現在BCB應該有比剛開始學
更進步些了!!!
呵呵

2009hw3

一開始要做時
不知道要用什麼元件
查了一下網路
才知道可以用image畫出直方圖
image1->Canvas->Pen->Color

再來是寫抓圖片的色彩值
用int iHistogram[3][256]來存

最後再畫出來


一開始在設定radiogroup時
一直找不到在裡面加入RBG選項的方法
後來才知道是在items的地方加入
很簡單的方法可是也可以搞很久。


結果:




MoveTo和LineTo

imHistogram->Canvas->Move(i*2+1,300);
是設定起始位置
i*2+1是每隔以個單位做為起點
t=int((float(iHis[rgHisCha->ItemIndex][i]*fHisSc)+0.5);
t是色彩值的個數*某個比例取四捨五入
因為怕他過多
所以*比例讓他縮小


寫這個程式時
一開始在課堂上聽時
覺得計算顏色聽起來一點都不難
應該可以很快寫出來
就拖了很久
後來要開始寫時
發現在畫圖的地方很不會寫
還要一直參考老師的程式
在寫程式時很多的小細節就算沒完成
結果還是不能出來的
所以要知道很多函式才行

HW3




老實說是參考老師的趕出來的
不過一開始RadioGroup就用頗久的其實非常間單(Iterms那建立打名稱即可)
(所以上課筆記還是要抄,簡單沒抄摸好久)
不過最大難關有二
1.是lblXX物件不知道是啥說= =
(只是知道用途是秀出滑鼠移動在直方圖統計資訊)?解決
2.到底要怎那他自動秀出較好的比例(不然手控好累= =)?是要用拉條設定嗎??

後來想到了= =原來是好多個Label物件= =



用老師的圖比例又要自己慢慢手動應該有像吧@@



把拉BAR用上去將區間設在0.01~0.1倍數 並增加布林值判斷開圖與否,
免得統計值那因為滑鼠移到直方顯示圖,統計值內的公式的數字除數為0
(因為一開始滑鼠沒移到那所以沒發現><)

HW3




外面雨聲稀哩嘩啦,這作業弄到現在才上傳我也快要累得唏哩嘩啦。
原本以為只要參照老師的範例和網路上的程式碼,胡亂瞎兜都弄得出來,沒想到寫的過程還是碰到許多的問題。
基本上是問同學為主,在自己拼湊出來的,基本上遇到的問題在於把圖片的色彩質讀出來以後,要怎麼另設一個畫布,然後用圖片的方式表現出來。