4

regionpropsMatlabの画像処理ツールボックスを使用して、関数を使用して重み付き重心を見つけることができます。これは、関数が WeightedCentroid画像のラベル付けされた部分ごとに、によって、またはピクセルインデックスのリストを返すことができるためPixelListです。その後、重み付き重心が簡単に計算されます。ただし、regionpropsでのジャケットのサポートは、重み付けされていない重心(またはbwlabel以前に使用して取得されたバイナリ「島」の重心)のみを返します。これは、これらの重心を見つけるために、ピクセル位置に関する情報が何らかの形で使用されたことを意味します。

重み付けされていない重心を計算するために使用するピクセルのリストに関するジャケットのregionprops情報にアクセスして、重み付けされた重心を計算するために使用するにはどうすればよいですか。(これを行う重要な理由の1つは、関数をループでfind使用できないためです。そうしないと、出力値が異なる可能性があります...)gforfindbwlabel

4

1 に答える 1

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

PS私はAccelerEyesの開発者です。遅れてしまい申し訳ありません。

編集:コードを少しクリーンアップしました。

于 2012-11-19T17:03:48.757 に答える