ポスタリゼーション処理についてご教授お願いします。
いまいちアルゴリズムがつかめません
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
アルファブレンディング処理
0~255のα値を0~1に変換し、
ブレンドする側のピクセルの値にα値を掛け、
される側に(1-α)を掛けて、両者を足します。
ポスタリゼーション処理
ピクセルの階調を、ポスタリゼーションした後の
階調数分の区間に振り分けていきます。
具体的には、たとえば3階調なら、
元ピクセルが持つ0~255の階調を、
0~85、86~170、171~255の区間に振り分け、
0、127、255を出力階調にします。
ソースコード
アルファブレンディングの方だけ、サンプルソースを下記に載せます。
アルファ値を100から200に変えるとかすると、挙動が分かりやすいです。
長大なコードになるので、細かい処理は省略していますが、
実際には、小数点以下を処理して整数に戻すとか、
ピクセルはRGBで値を持つとか、画面へ描画する処理があります。
これを参考に、ポスタリゼーションの方も
アルゴリズムを少し考えてみてください。
それから、複雑な画像処理になると、数学の知識が必要だったり、
わりと難しい分野なので、Webだけでなく本で勉強するのがお勧めです。
c
1#include <stdio.h> 2 3int main(void) { 4 5 int x,y; 6 float front_color[2][2] = {{123,234},{213,132}}; 7 float back_color[2][2] = {{12,23},{21,32}}; 8 float result_color[2][2]; 9 float alpha = 100; // 0~255 10 alpha /= 255; // 0~1 11 printf("a:%f \n",alpha); 12 13 for (x=0; x<2; x++) { 14 for (y=0; y<2; y++) { 15 result_color[x][y] = 16 (back_color[x][y] * (1 - alpha)) + (front_color[x][y] * alpha); 17 printf("x%d:y%d=%f \n",x,y,result_color[x][y]); 18 } 19 } 20 return 0; 21}
投稿2016/10/17 15:06
編集2016/10/17 15:16総合スコア5592
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。