Processingでソーベルフィルタを作ったので残しておくことにしました。
[ 使用例 ]
[ プログラム ]
プログラムを実行するとpdeファイルと同じディレクトリ内にフィルタリングされた画像が保存されます。
//縦カーネル float[][] k_v = new float[][] { {1, 2, 1}, {0, 0, 0}, {-1, -2, -1}, }; //横カーネル float[][] k_h = new float[][] { {-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}, }; //閾値 int th = 4000; void setup() { PImage i = loadImage("入力画像.png"); int w = i.width; int h = i.height; float g[][] = new float[w][h]; for(int x = 0; x < w; x++) { for(int y = 0; y < h; y++) { color c = i.get(x, y); g[x][y] = 0.3 * red(c) + 0.59 * green(c) + 0.11 * blue(c); } } for(int x1 = 1; x1 < w - 1; x1++) { for(int y1 = 1; y1 < h - 1; y1++) { float sv = 0; float sh = 0; for(int x2 = -1; x2 < 1 + 1; x2++) { for(int y2 = -1; y2 < 1 + 1; y2++) { sv += (k_v[x2 + 1][y2 + 1] * g[x1 + x2][y1 + y2]); sh += (k_h[x2 + 1][y2 + 1] * g[x1 + x2][y1 + y2]); } } float s = sqrt(pow(sv, 2) * pow(sh, 2)); if(s > th) { s = 255; } else { s = 0; } i.set(x1, y1, color(s)); } } i.save("出力画像.png"); }