2016-07-08 10 views
3

MATLABの画像でパーティクルトラッキングを行い、regionprops関数を使用しています。提供されたリソース上の円との例がある:私のMatlab R2014bでMATLABでregionpropsを使用して構造体を行列に変換できません

stats = regionprops('table',bw,'Centroid',... 
'MajorAxisLength','MinorAxisLength') 
centers = stats.Centroid; 
diameters = mean([stats.MajorAxisLength stats.MinorAxisLength],2); 
radii = diameters/2; 

、ラインcenters = stats.Centroid;は、望ましくない結果を生成する:私のstats.Centroid構造は、20個の要素(各要素は二つの数字である持っている - の中心の座標を領域)。しかし、次のコマンドの後で、私の変数centerは、20x2の代わりに、1x2の行列だけです。

スクリーンショットが添付されています。

enter image description here

私はさまざまな方法でこれを一周してみました。私が見つけた唯一の解決策は、実行することです。

t=zeros(20,2); 
for i=1:20 
    t(i,:)=stats(i).Centroid; 
end 

しかし、我々はすべてのループはMATLABで遅いです知っています。 MATLAB行列演算を利用する別の方法がありますか?

+0

私は今すぐチェックできるmatlabを持っていませんが、統計(1:終わり).Centroidはあなたに20x2の行列を与えますか? –

+0

いいえ、結果は同じです!私はそれをtryied –

答えて

4

Doing stats.Centroidは実際にはcomma-separated listのセントロイドを与えます。したがって、centers = stats.Centroidを実行した場合、MATLABはその行列の最初の中心を与えます。完了すると、センターを配列(つまり[stats.Centroid])にカプセル化し、次にの形に整形します。このような

何かがあなたのために働く必要があります。

centers = reshape([stats.Centroid], 2, []).'; 

これが何をするかMはブロブの合計数で、MATLABは列優先の形式に整形んので1 x 2*M配列として重心に読まれます行の総数を2に指定し、MATLABにそれ以降の列数を計算させる必要があります。完了したら、結果を転置して、必要なものを完成させます。

マイナー注

あなたはそれらのヒントセクションのregionpropsドキュメントページを見れば - http://www.mathworks.com/help/images/ref/regionprops.html#buorh6l-1、あなたは彼らがカンマで区切られていることを確認するために[]ブラケットと各ブロブの面積である、stats.Areaを囲むことがわかります値のリストは配列にカプセル化されます。これは事故ではなく、そこにそれらを持つことが目的であり、私は基本的にそれが何であるかを教えてきました。

+0

説明ありがとう、これは動作します!私は、最新のバージョンは暗黙のうちにカンマで区切られたリストを配列 –

+0

Ahaに変換すると思う。それは理にかなっている。私は最新のバージョンを所有していない...しかし、これは私が何とかやったことです:) – rayryeng

関連する問題