4

使用 Matlab 的图像处理工具箱,我可以使用regionprops函数找到加权质心。这是因为该函数可以返回 WeightedCentroid图像的每个标记部分的像素索引或像素索引列表,PixelList然后很容易计算加权质心。然而,夹克在 regionprops 中的支持只返回一个未加权的质心(或bwlabel之前使用获得的二元“岛”的质心)。这意味着以某种方式使用有关像素位置的信息来找到这些质心。

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

4

1 回答 1

3

我没有测试过性能,但这里有一个算法来获得加权质心和面积。这应该适用于夹克和 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

PS 我是 AccelerEyes 的开发人员。抱歉耽搁了。

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

于 2012-11-19T17:03:48.757 回答