Tutorial1Activityクラスと同じ場所にGrayscaleFilterクラスを作成します。その後、filterメソッドに以下のコードを入力します。
public int[] filter(int[] imageArray, int width, int height) { int table[]=new int[256]; for(int i =0;i < 256;i++){ table[i]=255-i;//① } int length = width*height; int[] oimgArray = new int[imageArray.length]; int rgb; int red,green,blue; for(int i =0;i < length;i++){ rgb = imageArray[i]; red = (rgb >> 16) & 0xff; green = (rgb >> 8) & 0xff; blue = (rgb) & 0xff; oimgArray[i]=255*16777216+ table[red]*65536+table[green]*256+table[blue];//② } return oimgArray; }
①ではRGBの色の値の範囲すべてについて、ネガポジ反転を行って得られる新しい値を配列に格納しています。このようにあらかじめ計算後の値を配列などに格納するとき、配列のことをルックアップテーブル(LUT)とよびます。ルックアップテーブルについて詳しくは以下のHPを参照してください。
http://imagingsolution.blog107.fc2.com/blog-entry-67.html
②ではルックアップテーブルに基づいてRGB各色をネガポジ反転しています。
最後に、 Tutorial1Activityクラスのint imageArray[]=ba2ia(ba);の下に以下の文を記入します。
imageArray=new NegaPosiFilter().filter(imageArray, imagewidth, imageheight);
以下に実機での実行結果を示します。ヒストグラムを見ると、これまでのヒストグラムから左右が反転していることがわかります。
0 件のコメント:
コメントを投稿