首先呢!先來看看乘冪律(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);
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);
c 並不是介於0~255區間, 他是用來將轉換後的影像調回0~255的色彩範圍中所需要使用到的常數。
回覆刪除