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

2010年1月20日 星期三

HW04_new

利用"S=C*R^Gamma"所計算出的值來套用


這是這次Gamma value主要的程式碼:


float r = StrToFloat(Edit1->Text); c = 255/(pow(255,r));
for(i=0;iCanvas->Pixels[i][j]=(TColor)RGB(s_R,s_G,s_B); } }



當Gamma value=2
(稍微看的出後來的比原來的還要來的暗一點)


當Gamma value=4
(已經開始明顯的看出後來的圖比較暗了)


當Gamma value=6

(相對於當Gamma value=4 已經變的更暗了一些..)


當Gamma value=10
(當Gamma value 已經輸入到10時,已經比原來的明亮度降低了~)
結論:


Gamma value越大(>1)時,明亮度降低~
當Gamma value越小(<1)時,明亮度就相對提高
這次作業,我也重新修改並且讀懂了一次,利用轉換的時候套上公式就可以慢慢的做成了!!

hw4_(修改後)

首先呢!先來看看乘冪律(Gamma)轉換的基本型式:

s = c
s=經過Gamma轉換過後的值。
c=正值常數 ,介於0~255區間。
r = 要做轉換的值
γ = Gamma值

Gamma 轉換對於一般用途的對比處裡很有用,因為人類對於亮度比較不敏感,所以在Gamma轉換之後提升對比度,可以讓人類看到更多的圖片細節。

在這個作業裡,主要的問題就是在於如何將數學式子轉換成程式碼,這對於大家來說可能是小問題,但對我來說是一個要讓我想上30分鐘才能理解的難題。

在這裡我們Gamma值要給使用者設定,所以需要用到

r =StrToInt(Exit1->Text)

r=StrToFloat(Exit1->Text)

這兩個最大的差別就是一個是宣告Int,令一個則是Float。
在這次Gamma轉換的作業裡,我們極有可能需要輸入小數,所以我們在這裡需要選用的是:
r =StrToFloat(Exit1->Text)

再來談談如何將數學子式子轉換成程式碼

c = 255/(pow(255,r));
再講這一段式子之前,先來談談pow()函式的用法。
Pow(x,y)
此段程式碼談的是,計算x的y次方的值!

c = 255/(pow(255,r));
就是先將255作r(也就是γ)的次方計算,去除255求得常數值!
c 求出來了,之後就是講各個要做轉換的值,去跟r做次方運算!
利用兩層for迴圈,以圖片的寬跟高為界去將每個要做轉換的像素點拿出,在作以下的數學轉換。
gamma_R = (pow(ucMR[i][j],r)*c);
gamma_G = (pow(ucMG[i][j],r)*c);
gamma_B = (pow(ucMB[i][j],r)*c)
將RGB做次方後,在乘上c即可大功告成。

將成果畫在Image2上,就可以有成果圖片了!

Image2->Canvas->Pixels[i][j]=(TColor)RGB(gamma_R,gamma_G,gamma_B);
以下是實作圖片:














































































2010年1月18日 星期一

Hw04

這次的作業是寫Gamma轉換
從課本和程式可以知道:
當C>1.0時代表要將影像增強
這麼做會使圖檔的顏色看起來比較深
比較暗沉,如圖b,c,d
可以使用在一個外表褪色的影像
使它增強














圖a, C=1.0,原圖














圖 b, C=2.0













圖 c,C=4.0


圖 d, C=5.0


當C<1.0時代表會將影像減弱
這會使影像的對比度有輕微"褪色"的情形
尤其是在背景的部分,如圖2,3,4
可將它運用在醫學上的x光片上



圖 1, C=1.0,原圖


圖 2, C=2.0













圖 3, C=4.0















圖 4, C-5.0


再度地向老師說 非常抱歉
感謝老師....

2010年1月17日 星期日

HW4



Gamma=2顯示圖片較暗




Gamma=0.5時顏色會變淺



GAMMA值的變換
s = c * r ^ γ 
s:轉換後的值
r:原始值
c:常數值
γ:Gamma值
可以把調整後的色彩控制在0~255之間
gamma>1 (調暗) ,gamma<1(調淺)
藉由調暗調亮來改變圖片的清晰度與美觀度
現在才知道原來BCB做影像處理有這麼多效果可以呈現

2010年1月15日 星期五

HW4

Gamma=3
由這張圖可以看到將Gamma調到 3 時對比度明顯的增加



Gamma=0.5
而當Gamma調到0.5時很明顯可以看出和3的差別,整個畫面有淡化的感覺




這次的作業是有關於Gamma的校正轉換

s = c * r ^ γ 

s:轉換後的值。

r:原始值。

c:常數值。

γ:Gamma值。

在一開始的時候因為忽略掉RGB色彩值設定範圍的問題

以至於結果一直不如所預期的出現

還是要像老師所說的把色彩值固定255範圍內,固定完後就將其轉換成公式


gmMR[i][j] = pow(255,1-x)*pow(MR[i][j],x);

gmMG[i][j] = pow(255,1-x)*pow(MG[i][j],x);

gmMB[i][j] = pow(255,1-x)*pow(MB[i][j],x);



重覆執行結果時卻有一種持續持續加深或持續淡化的結果

經過詢問後才知道原來友人也是一樣的問題: 限制條件設錯位置

才導致只有當第一次執行時會有正確的結果

如果繼續執行會有剛剛說的現象出現

透過這次作業了解到改變Gamma值的變化

除了眼睛看到的強度不同

也會改變內部圖片中紅對綠對藍彼此的比例

不過要注意對比度會有個極限值

當低於這個極限值時,影像對比度會被減少到一個無法接受的水準









HW4




由上圖可以知道GAMMA值大於1圖片越深,小於1則變淺,輸入1則為原圖就不PO了,主要
要注意的公式是s=c*r^gamma

s=轉換後的值
c=常數值,用來調整轉換後的值落在0~255區間內
r=原本的值

比較要注意的是C值的部分,一開始其實不是看得很懂,看了其
他上傳的作業後才知道c=255.0/255^gamma也就是c=255/pow(255,gamma)
剩下的工作就是把值都帶入,就可以得到我們要的結果

Hw04


















(乘冪律:0.5)






















(原圖)






這次作業是利用Power-law來做圖片對比度的增減

以下為乘冪律的公式



其實過程出乎意料的簡單

只要將公式套入RGB各個裡頭

pow(255,1-x)*pow(MR[i][j],x)
pow(255,1-x)*pow(MG[i][j],x)
pow(255,1-x)*pow(MB[i][j],x)

然後再走訪整個畫布,這樣就能呈現出其中的效果





想了想為何這麼簡短的公式卻有如此的效果

看了看網路上的講解才知道

公式的a和k是常數,而且o * (x ^ k)是x ^ k的一個漸進微小函數

在這裡,k通常被稱為是縮放指數

在詞語「縮放」意指:乘冪律函數滿足 F(下葷x)的\ propto F(下x)的

而c是常數

因此縮放函數的參數變化會不斷地出現相對稱情形

但是卻保留了形狀函數本身的樣子

這就是乘冪律吸引人的地方

2010年1月8日 星期五

HW4

hw4:輸入gamma值轉換



紅色字為補交後修改的部分!



公式:s=c*r^gamma


s : 是轉換後的值

c : 是個常數,設定預設值是1

r : 是原始影像中每個像素點的值



  原本在show圖時,一直都是出現全白的圖,後來一直在計算gamma值的公式一直在做修改,修改常數 c 的值,後來才發現我要修改的地方整個弄錯了 ! 原來我在 R[][] , G[][] , B[][] 陣列的地方打錯了,變成 R[][] , G[][] , R[][] 。




(修) c = 255/(255^Gamma)
  RIMatrix[i][j] = c * ( RIMatrix[i][j] ^ Gamma);
  GIMatrix[i][j] = c * ( GIMatrix[i][j] ^ Gamma);
  BIMatrix[i][j] = c * ( BIMatrix[i][j] ^ Gamma);
說明 : 因為只是複製再修改宣告的變數就可以,所以很容易忽略過去而沒去確認有沒有改錯!



(修)  因為c值的地方想錯了,又看了別的同學已交上來的作業說明,發現這次再看一次我便懂了,因為之前並不了解 c=255/(255^gamma)這個是子的意思,看課本也看得不太明白,所以程式碼稍微修正就可以了!



(修)  int Gamma=StrToFloat(Edit3->Text);
註 : 在輸入1是輸出的圖就會變成原圖。

執行結果圖片說明:
(修)

在下圖的執行結果中,第二張圖是開啟的原始影像。
  在上述就有提到,當gamma = 1 時,第一張圖顯示的就是原始圖,並沒有任何轉變。
  現在補上當gamma=2時的執行影像。


  可以看出轉換後的影現有變得比原圖暗了一點點(但不知道為什麼就是不太明顯..)!
  由此就可以看到輸入的gamma值以 1當基準,遞減時會變亮,遞增時會變暗。






HW4






這三張圖第一張是Gamma值3
這三張圖第一張是Gamma值1
這三張圖第一張是Gamma值0.5

這三張圖可以明顯看出Gamma值隊圖片的影響,不過不知為何,圖片都會被截掉

程式碼部分,這個比上一次的作業三還好理解,就是把讀圖和Gamma值公式s = c * r^γ套入就可以把程式寫完了

HE06

這次利用濾波器的技術來做一個遮罩
(x-1,y+1) (x,y+1) (x+1,y+1)

(x-1,y) (x,y) (x+1,y)

(x-1,y-1) (x,y-1) (x+1,y-1)

以(x, y)為中心把自己乘以權重再乘以1/9
加上 周圍八個點個別乘以權重再乘以1/9相加後除去權重總合
就可以做到柔化的效果
但要注意這9個權重的值總和不能=0
否則"任何數/0"=0是不存在的
這次作業是濾波器(spatial filtering)
濾波器的目的是可將一張影像作做清晰和柔化的動作
不知道我這張看不看的出
右邊那張經過濾波之後有柔化的效果
左邊的是原圖
儲存的時候有縮小一些
不知道我在縮小時效果有沒有背影響到
好不容易所有作業都交了
希望大家都能順利通過 : )

HW4

這是第四次作業!!!



利用"S=C*R^Gamma"所計算出的值來套用



以下是我做的圖




當Gamma value=2


(稍微看的出後來的比原來的還要來的暗一點)
















當Gamma value=4


(已經開始明顯的看出後來的圖比較暗了)


當Gamma value=10
(當Gamma value 已經輸入到10時,已經比原來的明亮度降低很多很多~)



因此我們可以知道,當Gamma value越大(>0)時,明亮度降低~

當Gamma value越小(<0)時,明亮度就相對提高囉~!!


hw4

公式s = c * r^γ
Y就是你輸入的值
S出來要在0~255之間
輸入5左右就很黑了
我有試過打超過255的值進去
我輸入500
程式就爆掉了 哈哈
大當機

HW4

Gamma值為:10時



Gamma值如過>1時,圖片就會變得比較暗!!!

Gamma值為:0.5時


相反的Gamma值<1時,圖片就會比原本的亮!!!


這次的作業

讓我了解到,其實Gamma值就是在影響圖片明亮度的!!!

而Gamma值就是套用S=C*R^Gamma 這個公式去計算出來的.

所以

也就是說如果Gamma值越接近"1",

那麼顯現出來的圖就跟原圖是差不多的!!!

2010年1月7日 星期四

HW4


1.5

1

0.5



其實這份作業一個月前就已經做好了,只是後來一直忘記上傳到成績已經出來才想到自己的還沒傳上去= ="
這次的作業很簡單,用之前的開圖加上一行程式碼就搞定了,所以真的沒有必要拖那麼久,只能說外務太多總讓人剌東剌西...囧

HW4

這次的作業是GAMMA轉換


首先先放上這次的執行結果圖









這張圖片的GAMMA值 是0.2


這張圖片GAMMA值是5

很明顯 GAMMA值 影響的是圖片的明暗度

這次我們套用一個公式

S=C*R^GAMMA

如果GAMMA的值=1的話

則圖片會跟原本的圖片一樣

如果GAMMA的值>1

顏色將會比原本的深

反之

則會比較淺


HW4

這是gamam用2時,色度明顯變深了

這是gamam用0.25時,色度明顯變淺了


這次作業比較有成就感,
雖然對程設很弱的我還是很有難度,
可是自己打ㄉ部份比較多ㄌ,
主要只是做乘羃律轉換
將圖片裡的RGB值套入公式
S=c*r^y裡
學到了很多~~~:)
很開心!!



HW4

這次的作業比較簡單
是做乘羃律轉換
只是將圖片的RGB值套入攻式
S=c*r^y裡
一開始Gamma值為0.5跟原圖比較起來就稍微淺了點
















再來輸入值2.5與原圖比較起來就深了許多
















所以當Gamma值<1時:淺
當Gamma值>1時:深

在做完這作業的時候我也碰上了一個小問題
就是我程式跑出來的結果
顯示出來的圖都會被砍掉一部分
也不知道是哪出了問題
問號問號??
其餘的都還蠻ok的

2009hw4

這次的作業是做gammar值的轉換
利用不同的gammar值調整對比明暗度
找出圖片色彩的最大值和最小值,經由調整過後,將值落在0~255之間。
藉由調整影像色彩來改變圖的對比。

公式為: 255/255^g=s/r^g
r為原本的色彩
s為調整後的色彩
g為gammar值

當gammar值等於1時,是原本的圖
當gammar值小於1時,亮度就會變亮
當gammar值大於1時,亮度就會變暗

程式方面流程是先轉換值後,原本的圖再根據值來輸出後來的圖片。

結果:
gammar=1,原本的圖
gammar=0.5,顏色變淡變亮
gammar=2,顏色變深變暗
寫作業時
本來都會直接複製老師的程式
想要看看結果是什麼
可是因為都不是完全的程式
所以都會有地方要改
後來覺得要自已了解程式的意思才能寫出來
都要一直請教同學
很不好意思但也很謝謝他們。

---------------------------------------
在寫程式時
有一個錯誤的訊息是
E2034 Cannot convert'AnsiString' to 'float'
後來加上StrToFloat這個函數就好了
之後寫程式時也常遇到這個訊息= =

---------------------------------------
記得在寫公式的時候
寫了GA[i]=(i^g)*255/255^g;
程式是之前寫的
錯誤訊息沒有留住
大概是說illegal之類的
後來問同學才知道程式不是用"^"的方式
要用pow函式
所以要寫成GA[i]=(pow(i,g)*255/pow(255,g));
這樣才會過