implemented edge detection