多语言展示
当前在线:537今日阅读:168今日分享:49

怎么用Mathematica来检测图片的特征点?

Mathematica总是喜欢把复杂的算法,打包成为简单好用的内置函数。比如,ImageKeypoints就是用来检测图像特征点的。
工具/原料
1

电脑

2

Mathematica11+

方法/步骤
1

准备一张图片。

2

检测图片的特征点:a = ImageKeypoints[img]a里面是特征点在图像中的坐标。

3

把所有的特征点在图像里面显示出来:b = HighlightImage[img, {Yellow, PointSize[0.01], a}]

4

指定关键点的阈值,可以适当的去掉那些不重要的特征点:HighlightImage[img, {Yellow, PointSize[0.01],   ImageKeypoints[img, KeypointStrength -> .001]}]

5

试验表明,KeypointStrength后面的数值越小,关键点越多。c = Table[  Length[ImageKeypoints[img, KeypointStrength -> 2.^(-n)]], {n, 1, 30,1}]ListLinePlot[c]但是,关键点的数目有最小值和最大值。

6

只检测背景里的特征点:HighlightImage[img, {Yellow, PointSize[0.01],   ImageKeypoints[img, Masking -> d]}]

7

其中,d是蒙板,用来粗略的分离前景和背景:d = RemoveBackground[img] // Binarize[#, 0.1] & // Erosion[#, 6] &

8

在原图中,可以大体标注出背景和前景:HighlightImage[img, {Blue, d}]

9

第六步检测到的特征点,也确实位于背景范围内:HighlightImage[img, {Blue, d, Yellow, PointSize[0.01],   ImageKeypoints[img, Masking -> d]}]

注意事项

本文仅仅介绍了特征检测的皮毛。更深入的相关内容,还得慢慢介绍。

推荐信息