OpenCV Basics - Image Processing
转自OpenCV入门教程
关于傅里叶分析的基本概念,这里有一篇精彩易懂的分析
对于图像的傅里叶变换,是将图像从空间域(可以理解为二维的时间域)转换为频率域。
在频域中,高频代表图像的细节、纹理信息;低频代表了大致的轮廓信息,可以在频率域中通过滤波得到需要的图像。
DFT-Example use opencv
2. Linear filter
- 方框滤波,boxblur:kernel值均为1,有是否进行normalize的参数
- 均值滤波,blur:是boxblur normalized后的特殊情况,去噪的同时很难保存图像细节
- 高斯滤波,GaussianBlur:图像与正态分布做卷积
3. Non-linear filter
- 中值滤波,medianBlur:去除散粒噪声,同时保存边缘细节,但是运行至少慢5x。对于细节(细、尖顶)多的图像不适合
- 双边滤波,bilateralFilter:保护边缘,在平滑滤波时同时考虑了像素间的几何距离和色彩距离。采用高斯函数之后,当邻域像素点的欧式距离比较大,或是两个像素值相差比较大时,该像素点的权重就比较小,导致该像素点对滤波后的像素点的影响较小。分析
- 上述5种Filter的例程
4. Morphology filter
- 膨胀,dilate:高亮区域慢慢变大,求局部最大值
- 腐蚀,erode:低亮区域逐渐变大,求局部最小值
- 开运算,morphologyEx(MORPH_OPEN):先腐蚀(扩大黑)后膨胀(扩大亮),消除小物体,连接纤细处,平滑边界不明显改变物体大小
- 闭运算,morphologyEx(MORPH_CLOSE):先膨胀(扩大亮)后腐蚀(扩大黑),能够排除小型黑洞
- 形态学梯度,morphologyEx(MORPH_GRADIENT):膨胀图与腐蚀图做差,边缘突出出来,保留物体的边缘轮廓.例程
- 顶帽,morphologyEx(MORPH_TOPHAT):原图与开运算之差,突出了比原来轮廓周围更明亮的地方,背景提取
- 黑帽,morphologyEx(MORPH_BLACKHAT):原图与闭运算之差,突出比原来轮廓周围更暗的地方,保存轮廓
- 上述几种形态学操作的例程
8. Edge detection
- Laplacian:二阶导数为0的点,是一阶导数的极值,也就是图像上的阶跃的位置,即边缘(对噪声敏感,会产生双边效果)
- Sobel: Sobel算子结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度.
- Scharr滤波: 当内核大小为3时, Sobel内核可能产生比较明显的误差(Sobel算子只是求取了导数的近似值), 为解决这一问题,OpenCV提供了Scharr函数,但该函数仅作用于大小为3的内核。该函数的运算与Sobel函数一样快,但结果却更加精确,其内核是-3,+3, -10,+10
- Canny: 1.消除噪声 2.计算梯度幅值和方向(同Sobel) 3.非极大值抑制(只保留8邻域梯度方向的局部极大值) 4.滞后阈值(推荐的高低阈值比在2:1到3:1)
原理:对x,y平面上的直线y=kx+b,有无数的k,b的直线通过点(x0,y0)和(x1,y1),但是同时通过2点的只有一种k,b组合,也就是在k,b平面相交于一点,交点大于阈值即判定为直线
HoughLines:
HoughLinesP: 区别是找segments, 输入也是要求二值图,概率hough变换速度,快些用的更多
HoughCircles: 输入不同,灰度图即可,不需要是二值图
10. remap
重映射Link,代表一种查询表
getAffineTransform, warpAffine: 3个点的仿射变换
getPerspectiveTransform, warpPerspective:4个点的变换
findHomography:多个点的RANSAC拟合best transform
以上几点的区别Link, 例程
12. Contours
findContours: 二值图,查找contour,findContours and drawContours example, mode设置为CV_RETR_TREE,即可拿到contours之间的层次关系,可以参考
convexHull: 遍历contours,寻找凸包 example
boundingRect(): 返回正方向的Rect
minAreaRect(): 返回RotatedRect, 面积最小的矩形,可以旋转的, 例程
minEnclosingCircle(): 对给定的 2D 点集,寻找最小面积的包围圆, 例程
fitEllipse(): 返回RotatedRect,内接椭圆,函数说明
approxPolyDP(): 用指定精度逼近多边形曲线 例程
图像的矩: 例程
- 使用moments计算图像所有的矩(最高到3阶)
- 使用contourArea计算轮廓面积
- 使用arcLength计算轮廓或曲线长度
14. watershed
分水岭算法
例程
15. inpaint
图像修复算法
例程