A Canny edge detection function implemented by us from scratch that can use either double thresholding, recursion, or the otsu's thresholding method for an adaptive threshold. Algorithm used for Otsu's method and the recursive approach can be seen in the papers included in this repository.