LabVIEW角点检测(基础篇—10)

LabVIEW角点检测(基础篇—10),第1张

图像特征图像的原始特性或属性,它包含图像中的关键信息,是机器视觉算法工作的基础。

图像的灰度、边缘、轮廓、纹理、色彩和颗粒属性等都可作为图像的特征,它们均从某一维度对图像中的目标关键属性进行描述。然而,在实际工作中,有时需要寻找一种可以对图像的各个局部都能进行抽象描述的特征。

例如,若要在图像存在透视畸变且被测目标会发生旋转和缩放的情况下,对图像中多个关键部分进行关联拼接,然后再进行目标培判识别或匹配,此时就需要使用一种可以对旋转、缩放和畸变均保持不变的局部特征。

角点(Corner Point)是解决这类问题的一种理想选择。

图像中的兴趣点(又称为关键点、特征点)是在图像中容易检测且具有代表意义的点。基于这些点,可以进行目标识别、图像匹配和缺陷检测等。角点是图像中最基本的一种兴趣点,它可定义为图像中两个边缘的交点,或目标轮廓线上曲率的局部极大点。角点特乎中渣征具有计算量少,匹配简单以及旋转、平移、放缩不变性等特点,因此在图像配准与匹配、目标识别、运动分析、目标跟踪等应用领域都起着非常重要的作用。

图像在角点处不仅梯度的数值大,而且梯度方向的变化速率也很大。也就是说,角点显示了图像在二维空间内灰度变化剧烈的位置,它和周围邻点有着明显差异。

例如,下图中,当小窗口位置在任意方向上发生变化时,含有角点的窗口的灰度就会有明显变化。因此可以通过计算图像中的角点获知图像各个局部的信息,从而实现对图像的一种抽象描述。而基于该抽象描述,即可进行图像的匹配及识别等工作。

以角点为特征的机器视觉应用一般涉及角点检测、角点描述和角点匹配3个过程。

角点检测过程使用Harris、Shi-Tomasi或FAST等算法来确定图像中的角点。角点描述过程使用BRISK (Binary Robust Invariant Scalable Keypoints)或FREAK (FastRetina Keypoint)方法,基于检测到的角点生成以二值方式编码的特征向量。而角点匹配过程则计算两幅图像二值特征向量之间的汉明距离,并依据距离的大小来判断其是否匹配。

下图对常用的角点检测、描述及匹配方法进行了汇总。

Nl Vision使用位于LabVIEW的视觉与运动→Machine Vision→FeatureCorrespondence函数选板中的IMAQ Corner Detector和IMAQ FAST Feature PointDetector封装角点检测过程,返回从矩形ROI中检测到的角点坐标和强度。

其中IMAQ Corner Detector封装了Harris和Shi-Tomasi角点检测算法,且支持在图像不同的金字塔图层进行多尺度检测。换句话说,在进行角点检测时,它不仅岁悄能对光照和旋转变化保持不变性,还能通过多尺度的近似方法对图像的缩放变化保持不变性。

lMAQ FAST Feature Point Detector封装了FAST检测算法,它以像素为中心,取距其半径为3的圆环上的16个点,若其中有连续的12个点的灰度与像素的灰度差超过输入参数Min Feature Point Strength设定的阈值,就将像素标记为角点。VI对于光照、旋转和尺度变化保持不变,但是当图像中噪点较多时,FAST健壮性较差,而且算法的效果也依赖于阈值的选取。

通过使用角点特征进行图像匹配的实例,了解角点算法的应用,程序设计思路如下所示:

程序首先为模板图像和待检测图像分配缓冲区,并将它们分别读入内存;

随后调用IMAQ FAST Feature PointDetector,基于FAST算法分别检测两幅图像中的角点,并由IMAQ Feature PointDescriptor以FREAK算法对角点信息进行二进制描述;

这样一来,从图像中检测到的各个角点特征都可以由一个二进制的角点特征字符串表示;

IMAQ Match Feature Points能通过计算各个角点特征字符串之间的汉明距离,在设定的最大可接受距离范围内(本例为32),对两幅图像中的角点进行匹配关联。

程序设计如下所示:

程序运行效果如下所示:

IMAQ Match Feature Points还能基于在两幅图像中匹配到的角点坐标,返回它们之间的单应性矩阵(Homography Matrix)。在机器视觉领域中,若成像系统可抽象为针孔比如,通过旋相机,则空间中同一平面内的任意两幅图像就可由单应性矩阵进行关联。比如,通过旋转相机镜头可获取某一个物体的两张不同图像,这两张图像的内容不可能只有部分对应。

若存在一个二维的3×3矩阵,与其中一幅图像相乘可得到第二幅图像,则该矩阵就称为两幅图像的单应性矩阵。单应性矩阵可以通过两幅图像中对应的4个特征点来计算,一旦得到单应性矩阵,就可以在已知原图像中关键特征点坐标时,计算得到其在匹配图像中的坐标位置。如上述例子所示,程序使用IMAQ Match FeaturePoints计算得到的单应性矩阵,在检测图像中标出所匹配到的目标范围。

角点是图像中一种特殊的特征点,基于角点进行图像检测和匹配,能在较难找到图像特征的情况下,创建图像拼接或图像匹配应用。常见的角点检测方法有Harris、Shi-Tomasi和FAST等。计算两幅图像角点特征向量之间的汉明距离即可完成角点的匹配。基于4个以上的匹配角点,可求得关联两幅图像的单应性矩阵,进而基于此矩阵,就能确定模板图像的位置。

理论

我们看到了一些特征检测算法,他们很多都不错,但是从实时应用的角度看,他们都不够快,一个最好的例子是SLAM(同步定位与地图创建)移动机器人没有足够的计算能力。

作为解决方案,FAST(加速切片测试简胡册特征)算法被提出,Edward Rosten和Tom Drummond 2006年在他们的论文“Machine learning for high-speed corner detection”提出,并在2010年最后修订,算法的基本大意如下:

使用FAST进行特征检测

1.选择一个图像里的像素p用来识别是不是一个兴趣点,它的强度是Ip

2.选择一个合适的阈值t

3.在要测试的像素周围找16个像素的圆

4.现在如果存在一个在圆内(16像素的)的n个连续像素集合,他们都比Ip + t要亮,或者都比Ip - t 要暗(用白虚线显示),那p就是角, n取12。

5.用一个高速测试来排除大量非角。这个测试只检查1,9,5和13位置的像素(首先1和9会测试是否他们太亮或者太暗,如果是,再检查5和13)。如果p是角,那么至少3个都比Ip+t要亮或者比Ip-t要暗,如果不是这样,那么p不可能是角。这个检测器展现了高性能,但是有几个缺陷:

·当n<12时不能拒绝很多备选点

·像素的选择不是可选的,因为它的效率依赖问题和角的分布。

·高速测试的结果被丢弃了

·会检测出多个爱挨在一起的特征

机器学习角点检测

1.选择一组图像进行训练(最好从目标应用范围内)

2.运行FAST算法来对每个图像进行特征点查找

3.对每个特征点拦宏,存下周围的16个像素作为向量。所有图像做完以后得到特征向量P。

4.这16个像素里的每个像素(设为x)可以有下面的三个状态:

5.根据这些状态,特征向量P被分成3个子集,Pd, Ps, Pb.

6.定义个新的布尔变量Kp,如果p是角就是真反之为假。

7.使用ID3算法(决策树分类)来查询每个子集,对于每个true类用变量Kp,它选择x来得出一个备选像素是否是角的信息。

8.对所有子集迭代直到为0

9.创建的决策树用来对其他图形做fast检测

非极大值抑制

在临近位置检测多个兴趣点是另一个问题,可以使用非极大值抑制来解决。

1.计算一个分数函数,V是所有检测到的特征点,V是p和16个围着的像素值得绝对差。

2.计算两个相邻关键点的V值

3.丢掉V值低的那个

总结:

它比其他存在的角点算法要快几倍

但是它对高噪点情况来说不健壮,依赖阈值

OpenCV里的FAST特征检测

它和其他OpenCV里的特征检测类似,如果你愿意,你可以指定阈值,是否使用非极大值抑制,要用的邻居等。

对于邻居,定义了三个标志位, cv2.FAST_FEATURE_DETECTOR_TYPE_5_8, cv2.FAST_FEATURE_DETECTOR_TYPE_7_12和cv2.FAST_FEATURE_DETECTOR_TYPE_9_16.

看结果,第一个图像显示了使用了非极大值抑制的FAST,第二个是没有做运使用非极大值抑制的。

END

检查下cvGoodFeaturesToTrack()函数输入格式是否正确:image ,eig_image ,temp_image;这三个格式如御分别是:uchar/F32,F32,F32

不渣穗岩是格式问题,确保imgA的取到图像的前提下,修族茄改后面参数“3,0,04”为“3,1,0.04”试试


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12500153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存