Giter Site home page Giter Site logo

kasdision / image_processing Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lgc-git/image_processing

0.0 0.0 0.0 2.4 GB

basic inplementation of image processing algorithms, such as bilateral filter, BM3D and so on

Shell 0.11% C++ 73.67% Python 18.54% C 1.11% Lua 0.04% Cuda 0.59% Makefile 0.44% CMake 5.04% Batchfile 0.32% Starlark 0.12%

image_processing's Introduction

简介

知乎:山与水你和我

image-20230211143223470

个人代码仓库之一, 以传统图像处理和相关算法为主(浅尝辄止),主要语言 C++,日后有空会陆续更新一些经典、有趣的算法。

涉及以下内容:

环境

  • OpenCV 4.5.5
  • GCC 10.3.0(C++17)
  • Python 3.7
  • CUDA >=10.1(可选)
  • CMake 3.17
  • XMake 2.7.4(可选)
  • Eigen3 3.3.9(可选)

通常构建方式是

# Windows + CMake + MinGW
cmake .. -G "MinGW"
mingw32-make
# Linux   + CMake + gcc
cmake ..
make
# Windows + XMake + MinGW
xmake g --mingw=PATH_OF_MINGW
xmake f -p mingw
xmake build
xmake run
# Windows + XMake + MSVC
xmake
xmake build
xmake run

算法

colorization

(2004 SIGGRAPH)Colorization using Optimization paper code

基于涂鸦的自动着色

输入 mark 结果

compression

waiting

deblur

waiting

dehaze

  1. (2009 CVPR)Single Image Haze Removal Using Dark Channel Prior code 知乎

    何恺明大名鼎鼎的暗通道先验去雾,2009 CVPR best paper

    无雾场景 有雾场景
    输入 结果

    代码中包含了暗通道先验验证、guided filter 精细化等内容。

  2. (2015 TIP)A Fast Single Image Haze Removal Algorithm Using Color Attenuation Prior code

    基于颜色衰减先验的去雾算法,使用机器学习估计参数

    颜色衰减先验

    去雾流程

    输入 深度图 暗通道
    引导滤波 最远点 结果

denoise

去噪算法

  1. (1990 TPAMI)Scale-space and edge detection using anisotropic diffusion code 知乎

    anisotropic_diffusion 各向异性滤波

    输入 结果
  2. gaussian filter 高斯滤波 code

    后续将出优化专篇。

    输入 结果
  3. bilateral filter 双边滤波 code

    提供 CPU/CUDA 实现,日后出优化专篇。

    输入 结果
  4. (2006 ECCV)A Fast Approximation of the Bilateral Filter using a Signal Processing Approach code

    bilateral filter using grid 网格加速双边滤波,目前参考官方实现,日后出 CUDA 版本。

    输入 结果
  5. (2005)A non-local algorithm for image denoising code

    non local means 滤波,提供 CPU/CUDA 实现。后续出优化专篇,其中涉及快速均值滤波。

    输入 结果
  6. (2010 ECCV)Guided Image Filtering code 知乎

    何恺明大佬的经典之作,引导滤波(导向滤波),将引导图的高频以线性加权的方式叠加到输入图的低频上,可以完成去噪等多项任务,也可以将其归纳到 filter 那一章节中。

    目前只提供了 CPU 上的 C++ 简单实现,由于涉及快速均值滤波暂无高性能实现;同时 Fast Guided Filtering 也在计划之中。

    (1)去噪(线性时间复杂度!保边滤波!)

    输入 输出

    (2)细化权重(如抠图)

    掩码 引导图 输出

    类似地,引导滤波还可以用于细化权重图边缘,如在暗通道先验去雾中细化透射率图。

    (3)细节增强

    输入 bilateral filter guided filter

    更多应用查看原论文。

detection

  1. (1986)A Computational Approach to Edge Detection code 知乎 Canny 边缘检测算法。

    输入 结果
  2. (1988)A combined corner and edge detector code 知乎

    Harris 角点检测算法。

    输入 结果
  3. Laplace 算子 code 知乎

    (1)边缘检测。

    输入 结果

    (2)LOG(Laplacian of Gaussian)检测特征点

    输入 边缘
    NMS 特征点
  4. (1983)A Multiresolution Spline with Application to Image Mosaics code 知乎

    Laplace Pyramid 拉普拉斯金字塔。

    (1)图像压缩

    输入 压缩

    (2)图像融合

    左图 右图
    掩码 结果
  5. (2004 IJCV)Distinctive Image Featuresfrom Scale-Invariant Keypoints code 知乎

    sift 尺度不变特征变换匹配算法!

    在 CNN 火以前,计算机视觉中 SOTA 的图像特征提取器,分为两个阶段——特征检测 + 特征描述,提取的特征具有尺度不变性、旋转不变性、亮度不变性等。

    这里只实现了第一阶段,利用 LOG 金字塔检测特征点,正确性尚未验证。后续有空会更新后续的特征点描述,并封装成一个接口(CPU/CUDA)。

    输入 结果
  6. (1997 IJCV)SUSAN: A New Approach to Low Level Image Processing code 知乎

    SUSAN,比较有意思的一个图像处理算子,可以处理包括角点检测、边缘检测、去噪等。

    (1)角点检测

    输入 输出

    (2)边缘检测

    输入 输出

    (3)去噪

    输入 输出

editing

  1. (2003 SIGGRAPH)Poisson Image Editing code 知乎

    泊松编辑(泊松融合),非常经典的文章,基于梯度域做图像编辑、图像融合!

    目前提供 C++ 实现。

    背景 前景 掩码
    直接粘贴 初步结果 梯度混合

    更多的应用包括纹理交换、局部纹理消除、局部纹理抹平、局部色彩变幻、局部动态范围压缩等,详情见论文和我的 知乎

filter

这里会记录一些就基础、特殊的滤波器,提供 CPU 实现,有空尽力添加 CPU 加速实现和 CUDA 实现。

  1. 最值滤波 code 知乎

    输入 输出

    最值滤波提供多种实现,测试图像分辨率 2832 x 4256,滤波直径 81,只测试局部邻域最小值,i5-10400f 单核单线程,C++ 开 O2 优化,结果如下

    运行时间 时间复杂度 空间复杂度 时间复杂度
    暴力 65.141 s O(H * W * k * k) O(1)
    拆分 1.656 s O(H * W * k) O(HW)
    单调队列 0.672 s O(HW) O(max(H, W) + k)
    动态规划 0.391 s O(HW) O(max(H, W))
  2. 均值滤波 code

    实现方式有盒子滤波、积分图,在引导滤波、人像美颜中都多有应用,在计划中。

fusion

  1. (2007)Exposure Fusion code 知乎

    经典的多曝光图像融合算法,但要求强对齐,使用了 Laplace Pyramid 融合消除 halo。

    曝光 1 曝光 2 曝光 3
    直接融合 高斯平滑 金字塔融合

geometry

几何。这部分比较难,是计算机视觉三大问题之一。个人准备在这模块学习一些多视角变换、相机标定等知识,应用的话如一些 RACSAC、stitching 算法等等。

waiting

  1. 二维旋转 code

HDR

这部分东西也比较多,资料不好找。目前先实现一些简单的 HDR,动态范围压缩。

  1. (2002)Fast Bilateral Filtering for the Display of High-Dynamic-Range Images code 知乎

    输入 输出

inpainting

waiting

interpolation

  1. 最近邻 、bilinear 、bicubic code 知乎

    目前只实现了 bilinear 和 bicubic 的 CPU 版本实现(为加速),后续会推出加速篇(CPU 优化和 CUDA 优化版本)

    (1)bilinear

    512x341 2400x1600 200x140

    (2)bicubic

    512x341 1800x1200 300x200
  2. (2007 TOG)Joint Bilateral Upsampling code 知乎

    联合双边上采样算法。

    这部分写了一版光流上采样的代码,但是效果不太好,后续有空再 debug。上采样算法不适合做光流,后续有空改成深度图试试。

    低分辨率光流 引导图 高分辨率光流

low-light

  1. (2011 SIGGRAPH)Fast efficient algorithm for enhancement of low lighting video code 知乎

    比较有创新的算法,对低光照图像的反转图像做去雾,再取反即可。

    输入 输出
    反转图像 去雾图像

    类似,可以对有雾图像取反,做低光照增强,再取反得到去雾图像,结果好坏很大程序上取决于去雾算法的好坏。

    有雾图像 暗通道
    增强结果 去雾结果
  2. histogram_equalization 直方图均衡 code

    直方图均衡算法,比较简单,可以增大图像的对比度,根据累积概率分布重构图像像素分布,增大动态范围。

    image-20230211180353992

  3. MSRCR code 知乎

    多尺度基于 Retinex 的图像增强算法

    输入 SSR
    MSR MSRCR

matting

  1. A Bayesian Approach to Digital Matting code 知乎

    目前提供 Linux 下的 C++ 实现,在 Windows 上使用 Eigen3 求解方程会死循环。在我电脑上(i5-10400f),单线程 0.48s 处理一张 640x480 的图像。

    输入 trimap alpha

optical flow

  1. warp 和遮挡检测 code 知乎

    image1 image2
    forward_flow backward flow
    forward_warp_1to backward_warp_1to2
    orward_occulusion_using_value backward_occulusion_using_value
    forward_occulusion_using_pos backward_occulusion_using_pos
    backward_occulusion_once_value backward_occulusion_once_warp

super resolution

  1. (2021 CVPR)Practical Single-Image Super-Resolution Using Look-Up Table code

    比较有创新的深度学习超分辨率算法!这里提供 CPU/CUDA 的 C++ 推理实现。

    image-20230211181601780

参考

测试图像来源

@inproceedings{bychkovsky2011learning,
  title={Learning photographic global tonal adjustment with a database of input/output image pairs},
  author={Bychkovsky, Vladimir and Paris, Sylvain and Chan, Eric and Durand, Fr{\'e}do},
  booktitle={CVPR 2011},
  pages={97--104},
  year={2011},
  organization={IEEE}
}

image_processing's People

Contributors

hermosayhl avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.