在边界内的区域上运行特征提取

时间:2014-11-05 12:46:54

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

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

我的目标是在区域INSDIE边界上执行特征提取。我已经阅读了其他问题,并努力实施类似问题中所述的步骤。我不想在边界中提取区域,我只是想用它来进行特征提取。

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

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

enter image description here

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;

如果有任何帮助,我将非常感激。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

这个答案是在Matlab Central上发现的,并且完全解决了上述问题,对于那些在类似问题上挣扎的人来说。

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

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

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

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

    imshow(maskedImage);

产生以下结果:

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

enter image description here