這次作業是乘冪律轉換基本形式:
s=c*r^gamma
s為新色彩
r為原色彩
依 gamma < 1 (變淡)與 gamma > 1 (變暗)
至於c則是為了將色彩值調整到0~255 (也就是(255.0)/255^gamma))
不過這樣跑出來會有小黑點(因色彩值0在怎麼縮放都維持0)
為了消去就取巧把色彩值0改成色彩值1
當gamma < 1 (gamma=0.05)
當gamma > 1 (gamma=3)
2009年11月27日 星期五
HW4
這次作業的公式:s=cr^gamma
s是經過Gamma轉換過後的新色彩值
c是常數,用來做為調整Gamma轉換過後使其s值範圍介於0~255中
r是色彩RGB的值
gamma是此轉換校正的參數值
程式方面我則是套用上面的公式下去撰寫,
寫好且編譯也都過了,執行的時候畫面卻是"黑色"的,
就覺得奇怪,公式上面都正確,也沒出現錯誤,那為什麼還會這樣,
就一直去重新驗算公式是否有錯誤,但是都沒有錯誤,
接著就想說比較有可能錯的應該是"常數c"這個地方,
就把常數c的數值對應輸入的gamma值用人工方式計算出來,
在寫死帶進去程式裡面去計算s值,結果執行結果竟然正確了,
後來才發現,錯了最不應該錯的地方,那就是宣告!!!!!!
我把常數c宣告成int拉,gamma的地方還記得宣告成float,
c的地方卻宣告錯,真的是超無言的。
以下是執行結果:gamma=1.9
s是經過Gamma轉換過後的新色彩值
c是常數,用來做為調整Gamma轉換過後使其s值範圍介於0~255中
r是色彩RGB的值
gamma是此轉換校正的參數值
程式方面我則是套用上面的公式下去撰寫,
寫好且編譯也都過了,執行的時候畫面卻是"黑色"的,
就覺得奇怪,公式上面都正確,也沒出現錯誤,那為什麼還會這樣,
就一直去重新驗算公式是否有錯誤,但是都沒有錯誤,
接著就想說比較有可能錯的應該是"常數c"這個地方,
就把常數c的數值對應輸入的gamma值用人工方式計算出來,
在寫死帶進去程式裡面去計算s值,結果執行結果竟然正確了,
後來才發現,錯了最不應該錯的地方,那就是宣告!!!!!!
我把常數c宣告成int拉,gamma的地方還記得宣告成float,
c的地方卻宣告錯,真的是超無言的。
以下是執行結果:gamma=1.9
HW4
第四次作業的部分是討論有關於GAMMA值的變換
參考運用的公式為 S = C (r ^ gamma)
一開始打程式碼的時候
因為忽略掉了 C 值的常數部份
採用常數預設 "1"
所以一開始所產生的結果有點糟糕
變成 RGB 都會產生超過 255 的結果
所以後來看到學長所提的必須將色素限制在 255 以內
雖然當初老師有提到這部分的問題
可是不太理解要怎樣限制住
回去看自己撰寫程式碼的部分
發現雖然有將限制條件加入
但是放置的位置錯誤
導致重複加乘所以結果錯誤
多次嘗試後結果是正確了
但是卻又發生執行第一次後
如果再次執行會產生圖片不斷的加深或加淡
因為在設定的程式碼部份我是將執行的公式直接放在畫布產生的地方
所以讓預設的 PIXEL 不斷的被覆蓋過去
之後在設定一組新的陣列讓設定過的 PIXEL 放入新的空間中後再放入畫布
結果就成功了!
GAMMA:5
GAMMA:0.5
參考運用的公式為 S = C (r ^ gamma)
一開始打程式碼的時候
因為忽略掉了 C 值的常數部份
採用常數預設 "1"
所以一開始所產生的結果有點糟糕
變成 RGB 都會產生超過 255 的結果
所以後來看到學長所提的必須將色素限制在 255 以內
雖然當初老師有提到這部分的問題
可是不太理解要怎樣限制住
回去看自己撰寫程式碼的部分
發現雖然有將限制條件加入
但是放置的位置錯誤
導致重複加乘所以結果錯誤
多次嘗試後結果是正確了
但是卻又發生執行第一次後
如果再次執行會產生圖片不斷的加深或加淡
因為在設定的程式碼部份我是將執行的公式直接放在畫布產生的地方
所以讓預設的 PIXEL 不斷的被覆蓋過去
之後在設定一組新的陣列讓設定過的 PIXEL 放入新的空間中後再放入畫布
結果就成功了!
GAMMA:5
GAMMA:0.5
產生後的結果雖然可以讓圖片更深或是更淺
但是相對的會發生圖片失真或是解析度下降的問題!
HW4
這次的作業是做Gamma Correction
把一張模糊的影像變清晰
首先要套課本上的公式 S=C*(r^gamma)
S為經過Gamma轉換後的值
C為參數值 在這裡C的參數值設成1
r導入公式表示為RGB各個的值
gamma值則是自行設定參數
最後他的公式還要再乘上一個 r/(r^gamma)
因為 r/(r^gamma)表示一張圖在讀進來時他每一點的RGB值都是介於0到255
經過Gamma Correction 後原本的圖的長根寬會有所改變
所以這邊需要做個調整影像大小的動作
以下是執行結果
經過Gamma Correction後
可以發現原本的不清楚的部分在變清晰了
以下圖為套用在彩色影像
2009年11月26日 星期四
HW4 - Gamma Correction
在這個作業上,真的不禁得對著自己罵聲髒話...
不同資料型態轉換出錯!?演算法的瑕疵!?
但卻完全忽略一個地方...那就是圖片的來源.
沒錯,發現之前在存成BMP的時候,不曉得是哪個環節出錯了.
所以才一直跑出這種破圖的結果.
2009年11月13日 星期五
2009年11月11日 星期三
2009年11月10日 星期二
2009年11月5日 星期四
2009年11月3日 星期二
HW3 - Histogram
上圖為程式畫面,下圖為修圖程式的分析畫面(綠色色版).
---------------------------------------------------------------------------------
上圖為程式畫面,下圖為修圖程式的分析畫面(藍色色版).
這次的作業,是要我們寫出一個Histogram.
其實學期初就有試著寫過了,而很幸運的是也寫成功了.
不過那次是用BCB內建的"Chart"元件來完成的.
算是有一點小作弊吧我覺得,所以這次就老老實實的用"MoveTo"&"LineTo"囉.
將整個作業寫成流程表的話,可大略分為...
1.計算不同的RGB值的出現次數.
2.分別找出RGB個別"出現次數"的最大值.
3.以最大值當分母,將各RGB值當分子,乘上100%來求各個直線的比例,以避免超出你所設的Image的高.
舉例而言,假設一張圖片中的R180出現的次數為1000次為最高.
但用來畫直方圖的Image高卻只有100,那我們便可以將其除以10.
那如果R200出現900次,同理也是將其除以10.
不過以上這個數字只是參考用,如果你發現跑出來的直方圖只有淺淺的一層,
那就可以試著把100%往上調,以求比較合適的表現.
2009.11.03 更新:
更改線條顏色:
Image2->Canvas->Pen->Color=顏色;
顏色的代碼就麻煩自行google囉.
2009年11月2日 星期一
hw3
這次的作業對我來說.比較困難是在畫圖的方面.再另行補上.先用Memo show出各個value矩陣的值.在value統計上.我用的是map資料結構來儲存.因為之前有做過類似的統計.當時是用map來儲存.所以這次作業我也用我熟悉的來做
==============================================
這是補上的繪圖統計部分.稍微查了一下如何化線條.然後轉一下他的百分比.以免某些數值的個數高於我拉Image的高.這次的練習又跟第一次寫的不一樣.因為我發現我要繪圖的部分.如果那個值沒有存在於這張圖裡.則map資料結構裡不會有這值.而不是把這個值填成0.所以我另外又改回陣列的寫法.因為我們知道value的範圍是0~255.所以可以直接宣告一個256的陣列來統計和計算.最後在畫線條的時候.再去取得它的出現次數/百分比.
===============================================
我的作業告一段落了.因為沒有辦法一次做很久的時間.所以分蠻多次的.稍微介紹一下我的東西.
我有一個load圖片的按鈕.有一個計算的按鈕.百分比機制.因為怕在某個value的個數太多.會呈現一條線的狀況.所以用了一個卷軸來動態改變那百分比的分母.可以讓分佈更加的明顯.一開使沒有線條變色的觀念.看到人家這樣做也想學習一個.不過好像一直試不出來.最後透過同學幫忙.讓我有pen的概念.我只能說~感恩!!
在重重畫線Imge這部分也讓我卡蠻久的.因為一直沒有好的關鍵字下.所已找不到幫忙!不過後來還是有看到一行. Image2->Picture->Assign(NULL);這對我幫助蠻大的~