电脑
Mathematica11+
准备一张图片。
检测图片的特征点:a = ImageKeypoints[img]a里面是特征点在图像中的坐标。
把所有的特征点在图像里面显示出来:b = HighlightImage[img, {Yellow, PointSize[0.01], a}]
指定关键点的阈值,可以适当的去掉那些不重要的特征点:HighlightImage[img, {Yellow, PointSize[0.01], ImageKeypoints[img, KeypointStrength -> .001]}]
试验表明,KeypointStrength后面的数值越小,关键点越多。c = Table[ Length[ImageKeypoints[img, KeypointStrength -> 2.^(-n)]], {n, 1, 30,1}]ListLinePlot[c]但是,关键点的数目有最小值和最大值。
只检测背景里的特征点:HighlightImage[img, {Yellow, PointSize[0.01], ImageKeypoints[img, Masking -> d]}]
其中,d是蒙板,用来粗略的分离前景和背景:d = RemoveBackground[img] // Binarize[#, 0.1] & // Erosion[#, 6] &
在原图中,可以大体标注出背景和前景:HighlightImage[img, {Blue, d}]
第六步检测到的特征点,也确实位于背景范围内:HighlightImage[img, {Blue, d, Yellow, PointSize[0.01], ImageKeypoints[img, Masking -> d]}]
本文仅仅介绍了特征检测的皮毛。更深入的相关内容,还得慢慢介绍。