使用matlab + jacket中的regionprops获得加权质心

时间:2012-11-09 19:21:31

标签: matlab image-processing gpu jacket

使用Matlab的图像处理工具箱,我可以使用regionprops function找到加权质心。这是因为函数可以返回WeightedCentroid每个标记部分的像素索引列表PixelList,然后可以轻松计算加权质心。但是,jacket's support in regionprops仅返回未加权的质心(或之前使用bwlabel获得的二进制“岛”的质心)。这意味着有关像素位置的信息以某种方式用于找到这些质心。

如何访问夹克的regionprops信息,了解它用于计算未加权质心的像素列表,以便我可以用它来计算加权质心? (执行此操作的一个重要原因是因为函数find无法在gfor循环中使用,否则可以find bwlabel的不同输出值...)

1 个答案:

答案 0 :(得分:3)

我还没有测试过性能,但这里有一个算法来获得加权质心和面积。 这应该适用于Jacket和matlab(取决于输入的类型)。

function [WC, WA] = WeightedMoments(L, I);
  [m, n] = size(L);
  [keys, idx] = sort(L(:));

  % Get weights and locations in sorted order
  w = I(idx);
  idx = idx - 1; % Convert to 0-index for simplicity
  x = floor(idx / m);
  y = idx - x * m;

  % Location of the starting point of each region.
  locs = find([diff(keys); 1]);

  % Weighted area and locations
  Msum = cumsum([w, x.*w, y.*w]);
  Mloc = diff(Msum(locs,:));
  M00 = Mloc(:, 1);
  M10 = Mloc(:, 2);
  M01 = Mloc(:, 3);

  % Weighted centroids and areas
  WC = [M10 ./ M00, M01 ./ M00] + 1; % Convert back to 1-index
  WA = M00;
end

P.S。我是AccelerEyes的开发人员。抱歉延误。

编辑:稍微清理一下代码。