Processingで空間フィルタリングをしてみる(仮)

Post date: May 23, 2013 2:36:37 PM

時間がないのでソースだけ。

float fil[][]=

{ { -1, 0, 1},

{ -2, 0, 2},

{ -1, 0, 1}};

float mat_pre[][]=new float[640][480];

int mat_now[][]=new int[640][480];

size(640, 240);

PImage img1=loadImage("test.png");

img1.loadPixels();

//1時配列→2時配列

for (int x=0;x<640;x++) {

for (int y=0;y<480;y++) {

mat_pre[x][y]=blue(img1.pixels[x+y*640]);

}

}

println((int)blue(img1.pixels[100+100*640]));

//空間フィルタリング

for (int x=1;x<640-1;x++) {

for (int y=1;y<480-1;y++) {

float sum=0;

for (int i=0;i<3;i++) {

for (int j=0;j<3;j++) {

sum+=mat_pre[x+i-1][y+j-1]*fil[j][i];

}

}

mat_now[x][y]=(int)sum;

if (mat_now[x][y]<0)mat_now[x][y]=0;

if (mat_now[x][y]>255)mat_now[x][y]=255;

}

}

PImage img2=createImage(640, 480, RGB);

img2.loadPixels();

//1時配列→2時配列

for (int x=0;x<640;x++) {

for (int y=0;y<480;y++) {

img2.pixels[x+y*640]=color(mat_now[x][y]);

}

}

img2.updatePixels();

//表示

image(img1, 0, 0, 320, 240);

image(img2, 320, 0, 320, 240);

プログラムの単純化のため、入力画像は白黒でサイズ640x480に固定。

余分な機能を吐き捨ててるため、滅茶苦茶ソースは読みやすいはず。