记录图像处理常用算法及其opencv实现。
参考opencv函数cvtColor,实现RGB、BGR、GRAY等颜色空间转换,示例代码可以参考ColorChange。
- RGB2GRAY $$gray = 0.299r + 0.587g + 0.114*b$$ RGB颜色空间转换为灰度图。
- BGR2HSV HSV颜色空间为亮度、饱和度和对比度,可以用来捕捉某些特定颜色的物体(H)。
在图像中绘制直线、圆、椭圆、矩形、文字等,实现可参考ImageDraw。
介绍中值滤波、双线性滤波、高斯滤波等常用图像滤波算法,实现可参考ImageFilter。
增加阈值化介绍,包括简单阈值和自适应阈值。
介绍常用图像算术操作,包括add、sub等,实现可参考ImageOperate。
介绍常用图像梯度计算操作,包括sobel、laplacian等,实现可参考ImageGradient。
介绍图像常用几何变换,包括图像平移、图像旋转、图像缩放等,实现可参考ImageTransform。
介绍OpenCV中常用视频操作,包括read帧,write帧等,实现可参考VideoOperate。
介绍霍夫变换在直线、圆检测上的原理和应用,实现可参考hough_transform。
Canny边缘检测是一种非常流行的边缘检测算法,是John在1986年提出的,实现可参考CannyDetection,使用numpy对每一步进行了实现。
一般情况下,我们要处理一副具有固定分辨率的图像,但是在有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理。比如,我们要在一副图像中查找某个目标,比如脸,我们不知道目标在图像中的尺寸大小。这种情况下,我们需要创建一组图像,这些图像是具有不同分辨率的原始图像,这些图像构成了图像金字塔(同一图像的不同分辨率的子图集合),实现可参考Pyramid。
角点corner是一个好的图像特征。找到图像特征的技术被称为特征检测。特征匹配使用特征描述。
角点特性:像任何方向移动变化都很大。其中Harris角点是Harris和Mike在1988年提出的,他将这个特性转换为数学形式,即窗口想各个方向移动(u,v)然后计算所有差异的总和,公式如下:
介绍SIFT特征提取。
增加插值算法,包括双线性插值,线性插值,主要应用在图像缩放上。
增加bag of feature词袋模型。
import cv2
def bgr_to_rgb(bgr):
rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)
return rgb
def rgb_to_bgr(rgb):
bgr = cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR)
return bgr
增加HOG详解。
增加Haar描述子详解。
增加LBP描述子详解,实现理解相关资料参考lbp。
增加光流相关算法。
增加角点检测的FAST算法。
# Python gradient calculation
# Read image
import cv2
import numpy as np
im = cv2.imread('lena.jpg')
im = np.float32(im) / 255.0
# Calculate gradient
gx = cv2.Sobel(im, cv2.CV_32F, 1, 0, ksize=1)
gy = cv2.Sobel(im, cv2.CV_32F, 0, 1, ksize=1)
# Python Calculate gradient magnitude and direction ( in degrees )
mag, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True)
Histogram of Oriented Gradients
增加源码分析,参考OpenCV源码分析
CAP 5415 - Computer Vision 按照公开课学习。
OpenCV-Python-Tutorial 该仓库是OpenCV-Python代码,其中有大量开源代码和示例数据。
opencv python2 samples opencv仓库中python相关示例。
ComputerVision github 作者也是基于大量的代码结合公式进行分类。