私が現在取り組んでいるプロジェクトでは、画像の輪郭の 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番目の瞬間はすべての白いピクセルの合計であるため、これは論理的です...これは画像のエッジのみを表すため、これは領域にはなりません。私の質問は今、輪郭の瞬間と画像全体の瞬間に違いはありますか? そして、この表現の輪郭に基づいて面積を取得することは可能ですか?
私の割り当てでは、輪郭のモーメントを計算する必要があり、最初のモーメントは重心に等しいと明示的に言っています(これは私のアルゴリズムでは当てはまりません)。しかし、ここで読んだのは、一次中心モーメント = 重心です。これは、輪郭のモーメントが中心のモーメントと同じであることを意味しますか? より一般的な質問ですが、このエッジを輪郭として使用できますか?
私はこれらの瞬間が非常に混乱していると思います