2017年2月13日月曜日

上下限フィルタ(HighLowLightFilter)

今回はトーンカーブ調整の一手法である上下限フィルタを作成します、上下限フィルタでは、明るさの上限や下限を決め、それらを超えた値については上限や下限に変換します。トーンカーブで図化すると以下のようになります。


Tutorial1Activityクラスと同じ場所にHighLowLightFilterクラスを作成します。その後、filterメソッドに以下のコードを入力します。
    public int[] filter(int[] imageArray, int width, int height, int max , int min) {
        int table[]=new int[256];
        for(int i =0;i < 256;i++){
            if(i < min){//①
                table[i]=min;
            }else if(i > max){//②
                table[i]=max;
            }else{
                table[i]=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;
    }

①と②では上限と下限を決め、それを超えた場合には上限や下限に値を変換しています。
最後に、 Tutorial1Activityクラスのint imageArray[]=ba2ia(ba);の下に以下の文を記入します。
imageArray=new HighLowLightFilter().filter(imageArray, imagewidth, imageheight, 200,50);

第四引数が上限を、第五引数が下限を示します。

以下に実機での実行結果を示します。ヒストグラムから上限下限に多く分布していることがわかります。また、全体的にコントラストが落ちていることがわかります。



0 件のコメント:

コメントを投稿