は、この問題に対処するための提案である:
- は、Z高さに対する閾値を定義し、または散乱からポイント他の方法で定義されている関連する(以下最左図の黒面) 。
- 結果ポイント内で、X-Y平面上のクラスターを見つけて、計算する異なる領域を定義します。必要なクラスタ数を手動で定義する必要があります。
- 各クラスタに対して、Delaunay三角測量を実行してボリュームを推定します。ここ
はすべてそのためのサンプルコードである:
[x,y,z] = peaks(30); % some data
subplot 131
scatter3(x(:),y(:),z(:),[],z(:),'filled')
title('The original data')
th = 2.5; % set a threshold for z values
hold on
surf([-3 -3 3 3],[-4 4 -4 4],ones(4)*th,'FaceColor','k',...
'FaceAlpha',0.5)
hold off
ind = z>th; % get an index of all values of interest
X = x(ind);
Y = y(ind);
Z = z(ind);
clustNum = 3; % the number of clusters should be define manually
T = clusterdata([X Y],clustNum);
subplot 132
gscatter(X,Y,T)
title('A look from above')
subplot 133
hold on
c = ['rgb'];
for k = 1:max(T)
valid = T==k;
% claculate a triangulation of the data:
DT = delaunayTriangulation([X(valid) Y(valid) Z(valid)]);
[K,v] = convexHull(DT); % get the convex hull indices
% plot the volume:
ts = trisurf(K,DT.Points(:,1),DT.Points(:,2),DT.Points(:,3),...
'FaceColor',c(k));
text(mean(X(valid)),mean(Y(valid)),max(Z(valid))*1.3,...
num2str(v),'FontSize',12)
end
hold off
view([-45 40])
title('The volumes')
注:このコードはいくつかのツールボックスとは異なる関数を使用します。いずれにしても機能しない場合は、まず関連ツールボックスがあることを確認してください。
出典
2017-08-01 01:14:09
EBH
これらのピークを特別なものにする理由は何ですか?私たちはあなたのデータを持っておらず、写真を見ることであなたの心とあなたのデータセットで何が起こっているのかを把握するのは簡単ではありません。 – Masoud
ピークは高いピクセル値を示し、私の疑問の一部は、データが「ピーク」としてカウントされる自動「ベース」/スレッシュホールドをどのように確立できるのだろうと思っています。私のデータは画像の1ピクセルあたり1ポイントなので、非常に散らばっているので、ピークを確立するための良いベースサーフェスをどのように確立できるかについて私は困惑しています。 – Anonymous
このデータは画像全体を表しているのですか、それともその一部ですか? – KjMag