4

私が現在取り組んでいるプロジェクトでは、画像の輪郭の 5 つのモーメントを計算する必要があります。たとえば、これを使用して重心を取得できます。これを行うには、 matlab を使用しました:

f = imread(Is);

%Edge detection with prewitt
contourImage = edge(f,'prewitt');

% Morphological operation to close the open spaces
se = strel('disk',2);
closecontourImage = imclose(contourImage,se);

imshow(closecontourImage);

%Find the x y positions of all the nonzero elements of the edge
[row,col] = find(closecontourImage);


% 3 moments
m10= 0;
m00= 0;
m01= 0;
mu00 =0;

% Calculate the 3 moments based on the given paper
for r=1:length(row)
    for c=1:length(col)
         m10 = m10 + ((row(r)^1)*(col(c)^0));
         m00 = m00 + ((row(r)^0)*(col(c)^0));
         m01 = m01 + ((row(r)^0)*(col(c)^1));
    end
end

% Calculate centroid (zwaartepunt) based on the given formulas
x = m10/m00;
y= m01/m00;

元の画像(pngでは、matlabでpgmを使用しています):

ここに画像の説明を入力

エッジ(輪郭だと思います):

ここに画像の説明を入力

画像と重心のプロット ここに画像の説明を入力

これを重心計算で組み込まれた matlabs と比較すると、かなり近いものです。

私の問題は面積計算に関するものですが。0番目の瞬間=面積と読みました。私のm00はエリアと同じではありませんが。0番目の瞬間はすべての白いピクセルの合計であるため、これは論理的です...これは画像のエッジのみを表すため、これは領域にはなりません。私の質問は今、輪郭の瞬間と画像全体の瞬間に違いはありますか? そして、この表現の輪郭に基づいて面積を取得することは可能ですか?

私の割り当てでは、輪郭のモーメントを計算する必要があり、最初のモーメントは重心に等しいと明示的に言っています(これは私のアルゴリズムでは当てはまりません)。しかし、ここで読んだのは、一次中心モーメント = 重心です。これは、輪郭のモーメントが中心のモーメントと同じであることを意味しますか? より一般的な質問ですが、このエッジを輪郭として使用できますか?

私はこれらの瞬間が非常に混乱していると思います

4

1 に答える 1

8

塗りつぶされた領域またはその輪郭のモーメントには違いがあります。次のケースを考えてみてください。

ここに画像の説明を入力

輪郭は、これらの両方のオブジェクトでまったく同じです。それにもかかわらず、右の正方形の重心が右に偏っていることは明らかです。

于 2012-10-14T13:12:11.403 に答える