implement edge detection