« オブジェクト認識003 ラベル処理
processing java
| トップページ | 今日の畑
カボチャの性質から学ぶトマトの自立栽培 »

2010.07.23

エッジ検出
processing java

Edge



まだ薄い理解でプログラムを組んだせいか、エッジ検出ではなく、コントラストを強めるフィルターになってしまった。目的とは違うけれど、今後のためにメモ。
後で分かりやすいように配列に代入。


package faceCatch;

import processing.core.PApplet;
import processing.video.*;

import java.awt.Color;

public class Edge extends PApplet{


        //////////////////////////////////////////////////////////////////////////////////////////

        private static final long serialVersionUID = 1L;

        //閾値
        float iThresh = 100.0f;

        //カメラオブジェクトの変数
        Capture camera;

        //ピクセルの位置を格納する変数
        int pos;

        //カラー定数
        final int WHITE = 0xffffffff;
        final int BLACK = 0xff000000;
        final int RED = 0xffff0000;

        //ラプシアンフィルタ
        final int[] RapFilter = new int[] {-1, -1, -1, -1, 8, -1, -1, -1, -1};

        //9近傍のカラー値を格納する配列
        float[] colorArray = new float[9];

        //フィルタ後のセル
        float cellColor;

        //変動値
        float XXX = 0.36f;


        //////////////////////////////////////////////////////////////////////////////////////////



        public void setup(){

                size(320, 240);

                colorMode(HSB, 256);

                //Captureオブジェクトの準備
                camera = new Capture(this, 320, 240, 30);


        } //end of setup()




        public void draw(){


                //カメラ画像のピクセルをロード
                camera.loadPixels();

                //カメラ画像の表示
                image(camera, 0, 0);

                //グレースケールにする
                filter(GRAY);

                //画面のピクセルのロード
                loadPixels();

                //エッジ検出フィルタリング処理へ

                //1ピクセル内側を調べる
                for(int i = 1; i < height - 1; i++){
                        for(int j = 1; j < width - 1; j++){

                                //ピクセルの位置
                                pos = (i * width) + j;

                                //System.out.println(pixels[pos]);
                                //System.out.println("red " + red(pixels[pos]));
                                //16進数に変換し3回足すそして、整数化

                                //9近傍の値を配列に代入、ここの値を255のgにする別にどれでも同じだけれど
                                colorArray[0] = green(pixels[pos - width - 1]);
                                colorArray[1] = green(pixels[pos - width]);
                                colorArray[2] = green(pixels[pos - width + 1]);
                                colorArray[3] = green(pixels[pos - 1]);
                                colorArray[4] = green(pixels[pos]);
                                colorArray[5] = green(pixels[pos + 1]);
                                colorArray[6] = green(pixels[pos + width - 1]);
                                colorArray[7] = green(pixels[pos + width]);
                                colorArray[8] = green(pixels[pos + width + 1]);

                                cellColor =
                                RapFilter[0] * colorArray[0] + RapFilter[1] * colorArray[1] +
                                RapFilter[2] * colorArray[2] + RapFilter[3] * colorArray[3] +
                                RapFilter[4] * colorArray[4] + RapFilter[5] * colorArray[5] +
                                RapFilter[6] * colorArray[6] + RapFilter[7] * colorArray[7] + RapFilter[8] * colorArray[8];

                                cellColor = XXX * cellColor;

                                if(cellColor != 0){
                                        if(cellColor < 0){
                                                cellColor = -cellColor;
                                        }
                                        if(cellColor > 255){
                                                cellColor = 255;
                                        }
                                        cellColor = cellColor / 255;
                                        //System.out.println("cellColor " + cellColor);
                                        Color c = new Color(cellColor, cellColor, cellColor, 1);
                                        pixels[pos] = c.getRGB();
                                        //pixels[pos] = gray(cellColor);
                                }
                        }
                }

                //ピクセルのアップデート
                updatePixels();

        } //end of draw()

        //キャプチャ映像のイベントハンドラ
        public void captureEvent(Capture camera){
                camera.read();
        } //end of captureEvant

}



ディジタル画像処理 ディジタル画像処理

価格 : ¥3,780 (税込み)


|

« オブジェクト認識003 ラベル処理
processing java
| トップページ | 今日の畑
カボチャの性質から学ぶトマトの自立栽培 »

processing」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/198455/48956527

この記事へのトラックバック一覧です: エッジ検出
processing java
:

« オブジェクト認識003 ラベル処理
processing java
| トップページ | 今日の畑
カボチャの性質から学ぶトマトの自立栽培 »