/nanopm

NanoPM, single header only PatchMatch

Primary LanguageC++

NanoPM, single header only PatchMatch

NanoPM is a single header-only implementation of PatchMatch algorithm written in C++. Could be used for variety of applications.

src dst
PatchMatch (350 ms. a single thread) BruteForce as Ground Truth (3 min. 8 threads with OpenMP)
NNF (Nearest Neighbor Field)
Distance (white is higher error)
Reconstruction (esimated src by using only patches in dst)

Example applications

  • inpainting (WIP)

Optional Dependencies

You can include optional dependencies in nanopm.h (mainly for I/O) but it will no longer be "single header-only".

  • stb (default ON) https://github.com/nothings/stb
    • Image I/O
  • OpenCV (default OFF)
    • cv::Mat_ as Image class. Image I/O
  • OpenMP (default OFF) (if supported by your compiler)
    • Multi-thread accelaration

Reference

  • Barnes, Connelly, et al. "PatchMatch: A randomized correspondence algorithm for structural image editing." ACM Transactions on Graphics (ToG). Vol. 28. No. 3. ACM, 2009.

Data

Borrowed Middlebury Stereo Datasets. Original data is from http://vision.middlebury.edu/stereo/data/scenes2005/ThirdSize/zip-2views/ALL-2views.zip

  • D. Scharstein and C. Pal. Learning conditional random fields for stereo. In IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR 2007), Minneapolis, MN, June 2007.
  • H. Hirschmüller and D. Scharstein. Evaluation of cost functions for stereo matching. In IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR 2007), Minneapolis, MN, June 2007.