本文首先介绍了steger算法的主要思想,然后详细介绍其步骤。
1.算法思想
摄像机采集到的光条图像中,在沿着光条宽度的方向或光条的法线方向上,其灰度会呈现出高斯分布的特点,当然只是理想状态下 一般都是像第二张图,其形状大致符合高斯分布。光条中心的灰度值大而光条边缘的灰度值小,如下图所示,因而光条中心线的提取任务就是要找到图像中的光条灰度的高斯分布中心。
2.具体过程
2.1各个步骤
具体做法:
1.高斯滤波去噪点
2.对符合条件的像素(比如像素值大于200) 构建Hessian矩阵 计算其特征值和特征向量 并选择最大特征值的特征向量即为对应线条的法向向量
3.在其法线方向上对像素灰度应用泰勒多项式展开而得到灰度分布函数,进而计算出光条中心的亚像素位置。
2.2步骤详解
1.高斯滤波去噪点
要求:
2.找到法线方向
这里我们利用Hessian矩阵找到法线方向
关于多元函数的Hessian矩阵:
二维图像中 我们只使用2x2的Hessian矩阵 比如在(x,y)处的海森矩阵
求出矩阵的特征值和特征向量,Hessian矩阵的特征值就是形容其在该点附近特征向量方向的凹凸性,特征值越大,凸性或凹性越强,曲率越大,变化越快。即是说hessian矩阵特征值绝对值最大的对应的特征向量就是光强变化最快的方向,我们可以沿着这个方向去寻找最强光强的像素点(中心点)。
将特征向量记作(nx,ny)
关于特征值和特征向量的实际意义:
从定义来看 Ax=cx A是矩阵 x是特征向量 c是特征值
比如两个特征值对应的两个特征向量
A左乘x 就可以理解为把向量x沿着两个特征向量的方向进行拉伸 拉伸比例就是对应的特征值
3.找中心点
上一步确定了法线方向后,可以沿着这个方向寻找中心点 比如说在(x0,y0)处
3.实际过程举例
比如下图是线条一部分
标记的三个像素判断过程 根据海森矩阵最大特征值对应的特征向量 得到nx和ny
然后 求出参数t以后 直接判断 tnx 和 tny 是否都小于0.5 满足条件时该点可以标记为中心点 比如第三个像素就被标记为中心点
加更:
Steger缺点:①速度比较慢 有部分毛刺 但是可以后处理去除
②对噪声部分或者全图来说依赖于设置的阈值(大于阈值才计算海斯矩阵)
但是对于比较好的激光来说 取中心点还是比较精确的
学习自:https://blog.csdn.net/qq_42648534/article/details/119991673
https://blog.csdn.net/jiangxing11/article/details/120056536
http://t.csdn.cn/kDTCR
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。