【问题标题】:Running feature extraction on region within a boundary在边界内的区域上运行特征提取
【发布时间】:2014-11-05 12:46:53
【问题描述】:

下图显示了使用阈值处理和从 3D 深度图像中减去背景的组合检测到边界的奶牛。

我的目标是在边界区域 INSDIE 上执行特征提取。我已经阅读了其他问题,并且一直在努力实施类似问题中提到的步骤。我不想提取边界中的区域,我只是想将其用于特征提取。

请有人提供一个可能更简单的解决方案吗?例如,有没有办法为 extractSURFFeatures 提供工作的边界坐标?

下面是我的边界代码,它接收我处理过的阈值图像 (BW1)。

figure(1);
  imshow(ImageCell_int{i-269});
  %title('Outlines, from bwboundaries()'); axis square;
  hold on;
  boundaries = bwboundaries(BW1);   
  numberOfBoundaries = size(boundaries);
  for k = 1 : numberOfBoundaries
     thisBoundary = boundaries{k};
     plot(thisBoundary(:,2), thisBoundary(:,1), 'g', 'LineWidth', 2);
  end
  hold off;

如果能在这方面提供任何帮助,我将不胜感激。

【问题讨论】:

  • 把所有图像的特征点都提取出来,然后删除边界外的,是不是有问题?
  • 不,这是个好主意,谢谢。我的想法是只使用边界内的区域来最小化处理量。你能帮我开始吗?我是使用 Matlab 进行图像处理的新手。
  • 从寻找区域的矩形边界框开始,并在那里提取特征,只需使用 MATLAB 索引来提取矩形。然后扔掉复杂区域之外的点。除非您知道需要,否则不要优化。
  • 跟随彼得斯的方法。尝试对其进行优化可能会更加困难!
  • 我同意。我可能想出了一个使用口罩的解决方案。你们谁能告诉我如何将两张图像相加,以便我的蒙版隐藏我不感兴趣的区域?我能找到的唯一方法涉及以某种方式混合两张图像。我想把它们加在一起,这样就只剩下留下的“洞”了。这可能吗?

标签: matlab computer-vision feature-extraction matlab-cvst feature-selection


【解决方案1】:

太好了,现在我看到了牛! :)

您不能为detectSURFFeatures 函数指定不规则形状的感兴趣区域。但是,您可以检测整个图像中的特征,然后创建感兴趣区域的二进制掩码,并使用它来排除在它之外的关键点。

编辑:如果您的边界表示为多边形,您可以使用roipoly 函数从中创建二进制掩码。

话虽如此,对象边界之外的特征实际上可能很有用,因为它们捕获了有关对象形状的信息。

另外,你的最终目标是什么?如果你想识别个体奶牛,那么局部特征可能不是最好的方法。使用全局 HOG 描述符 (extractHOGFeatures) 或使用颜色直方图,或两者兼而有之,您可能会做得更好。

【讨论】:

  • 这太棒了!谢谢你。你能解释一下如何做掩蔽吗?到目前为止,我还没有运气好戴口罩。
【解决方案2】:

这个答案是在 Matlab Central 上发现的,对于遇到类似问题的人来说,它完全解决了上述问题。

从感兴趣对象 (BW1) 的灰度轮廓开始。

    % Make the mask black and white
    double(BW1);
    BW2 = logical(BW1);

接下来创建蒙版并强制使其与普通图像大小相同。

    mask = cast(BW2, class(normalImage));
    maskedImage = normalImage .* mask;

    imshow(maskedImage);

产生以下结果:

现在可以对感兴趣的对象执行特征提取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2016-11-29
    • 2016-02-12
    • 2015-08-15
    • 2011-01-10
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多