怎么用Mathematica来检测图片的特征点?
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]}]
