image processing from scratch
what is this?
This repository contains many interesting image processing algorithms that are written from scratch. Read these codes will allow you to have a comprehensive understanding of the principles of these algorithms. I also have video tutorials for these algorithms here. Go check out if you know Chinese :-)
Implementation
All codes were wrote in python3.7 or c++
moudles you may need:
python:
- numpy for matix calculation
- matplotlib for reading and showing images
- opencv2 for some image operations
c++:
- opencv2
Usage
you can always run a python script just by
python script.py
for c++, you need to compile first
cd build
cmake ..
make
when it's done, you are ready to run the executable file by
./Main
Just make sure you have the images in the right path, and you might wanna modify the code a bit to process another image.
Have fun!
Contents
-
canny edge detection
It is an algorithm that extracts edges of an image. -
hough transform
It is an algorithm that can theoratically detects shapes that you can write formulas for it. -
harris corner detection
This algorithm detects corners. -
fast fourier transform
2-D fourier transform for images using fft. -
sift
Scale-invariant feature transform, a well-known technique to extract feature points for image matching. -
KNN
Using balanced K-D tree to find k nearest neighbors of K-dimension points. -
PCA&SVD
Do PCA and SVD using jacobi rotation.(which is accurate but slow) -
Ransac
Stitch different images together after knowing the sift keypoint pairs. -
watershed
watershed segmentation algorithm. -
meanshift
meanshift segmentation algorithm. -
generalized hough transform
template match of images, detects a given template in an query image. The vote space is implemented with a sparse vector to support big images. -
closed-form image matting
a classic image matting algorithm proposed in A Closed-Form Solution to Natural Image Matting -
a lot to be continued...