float[][] kernel = { { 1, 1, 1 }, { 1, 0, 1 }, { 1, 1, 1 } }; PImage img = loadImage("lena2.bmp"); int w = img.width; int h = img.height; size(2*w,h); image(img, 0, 0); img.loadPixels(); PImage edgeImg = createImage(img.width, img.height, RGB); for (int y = 1; y < img.height-1; y++) { for (int x = 1; x < img.width-1; x++) { float sum_red = 0, sum_green = 0, sum_blue = 0; int pos = x + y*img.height; int pos_sasiad = (x+1) + y*img.height; float val_red = red(img.pixels[pos]); float val_green = green(img.pixels[pos]); float val_blue = blue(img.pixels[pos]); if ((val_red == 0)) { for (int ky = -1; ky <= 1; ky++) { for (int kx = -1; kx <= 1; kx++) { int pos2 = (y + ky)*img.width + (x + kx); float val2_red = red(img.pixels[pos2]); float val2_green = green(img.pixels[pos2]); float val2_blue = blue(img.pixels[pos2]); sum_red += kernel[ky+1][kx+1] * val2_red; sum_green += kernel[ky+1][kx+1] * val2_green; sum_blue += kernel[ky+1][kx+1] * val2_blue; val_red = sum_red/8; val_green = sum_green/8; val_blue = sum_blue/8; } } } else if (val_red == 255) { for (int ky = -1; ky <= 1; ky++) { for (int kx = -1; kx <= 1; kx++) { int pos2 = (y + ky)*img.width + (x + kx); float val2_red = red(img.pixels[pos2]); float val2_green = green(img.pixels[pos2]); float val2_blue = blue(img.pixels[pos2]); sum_red += kernel[ky+1][kx+1] * val2_red; sum_green += kernel[ky+1][kx+1] * val2_green; sum_blue += kernel[ky+1][kx+1] * val2_blue; val_red = sum_red/8; val_green = sum_green/8; val_blue = sum_blue/8; } } } edgeImg.pixels[y*img.width + x] = color(val_red, val_green, val_blue); } } edgeImg.updatePixels(); image(edgeImg, w, 0);