写真を加工する 5.3 各種フィルタ2

#wp7dev_jp

フィルタの追加。

覆い焼き

簡単に言うとハイライトを当てる処理になります。

 //覆い焼き
if (R2 == 255) R = 255;

else R = (255 * R1) / (255 - R2);

if (G2 == 255) G = 255;

else G = (255 * G1) / (255 - G2);

if (B2 == 255) B = 255;

else B = (255 * B1) / (255 - B2);
if (R > 255) R = 255;

if (G > 255) G = 255;

if (B > 255) B = 255;

画像はこんな感じ。

image

焼き込み

覆い焼きの逆になります。暗さをより強調した画像になります。

 //焼き込み
if (R2 == 0) R = 0;

else R = 255 - ((255 - R1) * 255 / R2);

if (G2 == 0) G = 0;

else G = 255 - ((255 - G1) * 255 / G2);

if (B2 == 0) B = 0;

else B = 255 - ((255 - B1) * 255 / B2);
if ((int)R < 0) R = 0;

if ((int)G < 0) G = 0;

if ((int)B < 0) B = 0;

 

image

 

比較 (暗)

画像のピクセルを比較して、暗い方をとります。

 //比較暗
if (R1 > R2) R = R2; else R = R1;

if (G1 > G2) G = G2; else G = G1;

if (B1 > B2) B = B2; else B = B1;

image

比較(明)

同じく、明るい方のピクセルを使います。

 //比較明
if (R1 > R2) R = R1; else R = R2;

if (G1 > G2) G = G1; else G = G2;

if (B1 > B2) B = B1; else B = B2;

break;

image

コントラストの強調

コントラストは、入力 n~255-n に対して出力を0~255にして、ダイナミックレンジを狭くします。

 // コントラスト
double bank = 255 / (double)(255 - 2 * contrast);
if (R1 > 255 - contrast - BR) R = 255;

else if (R1 < contrast - BR) R = 0;

else R = (uint)((R1 - contrast + BR) * bank);
if (G1 > 255 - contrast - BR) G = 255;

else if (G1 < contrast - BR) G = 0;

else G = (uint)((G1 - contrast + BR) * bank);
if (B1 > 255 - contrast - BR) B = 255;

else if (B1 <= contrast - BR) B = 0;

else B = (uint)((B1 - contrast + BR) * bank);

image

 

白黒化

これは RGBで平均をとってグレースケールの色を作ります。Gr = 0.3xR+0.59xG+0.11xB となります。

 uint Gr = (uint)((0.3 * R1 + 0.59 * G1 + 0.11 * B1) * (1+ ((float)Br/100)));
result[pixel] = ((int)A << 24) | ((int)Gr << 16) | ((int)Gr << 8) | (int)Gr;

image

 

あとは必要なものがいくつか。その中でもほしいのがトーンカーブ。

 

関連リンク