图像分析
将图像转换成完全不同的表现方式(输出不是图像)数组或序列
离散傅里叶变换
连续(积分)– 离散(求和)
cv::dft()离散傅里叶变换
一维或二维
输出为CCS格式
cv::idft()用于离散傅里叶逆变换
cv::mulSpectrums()频谱乘法
使用傅里叶变换进行卷积
cv::dct()离散余弦变换
cv::idct()离散余弦逆变换
积分图
通过cv::integral()函数
积分图是一种允许子区域快速求和的数据结构
三种变体:求和,平方求和,倾斜求和
cv::integral()标准求和积分
cv::integral()平方求和积分
cv::integral()倾斜求和积分
Canny边缘检测
简单的Laplace滤波器可以曝光图像的边缘,经过改进后成为Canny算法
先再x和y方向上求一阶导,然后组合成四个方向上的导数,其中方向导数是局部最大值的点是组成边缘的候选项
创新点:将单个的边缘候选像素加入轮廓
*通过对像素应用滞后阙值形成轮廓(较大值和较小值):
大于较大值:接收;小于较小值:抛弃;介于之间:如果连接到一个高于阙值的像素才接受
cv::Canny()
输入图像必须是单通道图像,输出为灰度图(实际上是布尔图)
Hough变换
霍夫变换是一种检测线,圆或者图像中其他简单形状的方法
Hough线变换
基本理论:二进制图像中任何点都可能属于某些可能的线
最好的参数形式不是斜截式,而是极坐标(当直线接近竖直时,此时在a-b平面中是难以表示的)
图像平面中的一条直线可由θ-ρ平面中的一个点表示。因此图像平面中的一个点可以由穿过它的直线族在θ-ρ平面中对应的点组成的曲线来表示。
θ-ρ平面中两条曲线的交点即为图像平面中的两个点共线的一条直线
opencv支持三种Hough线变换:
标准Hough变换(SHT):在ρ-θ空间中对每个点的直线θ从0到2Π的图像进行累加,从局部极大值中取出结果;缺点:不能得到线的端点
多尺度Hough变换(MHT):给出精细分辨率参数细化结果
渐进概率Hough变换(PPHT):Edge图像中随机选择像素,将这些像素点按照SHT中的方法转换到累加平面(p-θ)。 当在累加平面中可以通过阈值筛选出一条直线时,沿该条直线搜索Edge图像,以查看是否存在一个或多个有限长度的线。然后在该直线的所有像素被从Edge图像中除去。通过这种方式,算法返回有限长度的直线。
SHT,MHT:cv::HoughLines()
PPHT:cv::HoughLinesP()—更快
Hough圆变换
累加三维的体积,三维坐标为圆心位置x,y和半径r,需要更大的内存和速度,用Hough梯度避免该问题
核心思想:对圆上的所有点,他们梯度方向所在直线的交点即为圆心
用cv::HoughCircles()进行Hough圆变换
距离变换
距离变换输出一个新图像,每个像素的值为输入图像中与最近的零像素的距离