// This program takes an image and runs edge detection on it.
// Edge detection finds where the 'lines' in the image are.
// This program does a simple version of edge detection in which
// we compare each pixel to the one to the right and the one below it.
// If there is a large difference in color, we say that there must
// be a line there. Lines are drawn in black and the rest is in
// white.
PImage img;
void setup() {
//img = loadImage("");
//make the size the size of your image, which you will have to look up in your computer
size(300, 300);
}
void draw() {
if (mousePressed) {
loadPixels();
img.loadPixels();
// running to 1 LESS than the width and the height means
// we are always guaranteed that there are pixels to the
// bottom and right
int pix;
int pixright;
int pixbottom;
int pixbottomright;
for (int x = 0; x < img.width - 1; x++) {
for (int y = 0; y < img.height - 1; y++) {
pix = y * img.width + x;
pixright = pix + 1;
pixbottom = pix + img.width;
pixels[pix] = edge_detection(img.pixels[pix], img.pixels[pixright],
img.pixels[pixbottom]);
}
}
updatePixels();
}
else {
image(img, 0, 0);
}
}
// if the difference in grayscale is more than 'linedifference' then
// we'll say there is a line there
// A good number to use depends on the image.
int lineThreshold = 10;
// The algorithm used in this function is from
// "Introduction to Computing and Programming in
// Python: A Multimedia Approach", by Mark Guzdial
// and Barbara Ericson.
color edge_detection(color c, color below, color next) {
int lineThreshold = round(map(mouseX,0,width,1,50));
// convert all colors to grayscale
c = round(brightness(c));
below = round(brightness(below));
next = round(brightness(next));
// see if C differs greatly from its two neighbors
if ((abs(c-below) > lineThreshold) &&
(abs(c-next) > lineThreshold)) {
// if yes, make it black
return color(0);
}
else {
// otherwise, make it white
return color(255);
}
}