如何使用matlab将关键点绘制到输入图像上?

时间:2014-05-02 14:52:46

标签: image matlab image-processing sift keypoint

这个问题与SIFT功能及其在MATLAB中的使用有关。我有一些包含以下信息的数据:

  1. 每个要素点的x,y坐标
  2. 每个要素点的比例
  3. 每个要素点的方向
  4. 每个特征点的描述符向量。每个向量有128个组件。
  5. 我在将关键点绘制到相应的输入图像上时遇到问题。有没有人知道如何做到这一点?我可以使用任何内置函数吗?

    非常感谢。

1 个答案:

答案 0 :(得分:1)

如果您只想自己显示这些点,请将xy坐标读入单独的数组,然后显示图像,使用hold on命令,然后绘制要点。这会将您的点叠加在图像上方。

假设您已将这些坐标提供并存储为xy,并假设您的图像可用并存储为im,则可以执行以下操作:

 imshow(im);
 hold on;
 plot(x, y, 'b.');

请记住,x坐标是水平的,并且从左到右增加。 y坐标是垂直的,从上到下增加。坐标的原点位于左上角,位于(1,1)

但是,如果你想显示检测窗口,它的大小和描述符的方向,那么建议你看看VLFeat库,因为它有一个很好的功能为你做到这一点

Rafael Monteiro的建议(见下文评论)

您还可以修改每个点,使其反映检测到的比例。如果您想这样做,假设您已将比例保存为另一个名为scales的数组。之后,尝试执行以下操作:

 imshow(im);
 hold on;
 for i = 1 : length(x)
      plot(x(i), y(i), 'b.', 'MarkerSize', 10*scales(i));
 end

10的常数因子非常随意。我不确定您使用多少比例来检测关键点,因此如果比例为1.0,那么在绘图时这将显示默认大小的关键点。玩这个号码,直到你得到满意的结果。但是,如果缩放对您无关紧要,第一种方法就可以了。