How does Canny edge detection work, and what are its parameters?

Technical