以下是处理这个问题的一个建议:
- 定义的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
峰值表示高像素值,我的问题的一部分是想知道如何建立一个自动化的“基准”/阈值,高于该阈值数据被视为“峰值”。我的数据是每个像素一个图像的一个点,所以它非常分散,所以我难以确定如何建立一个良好的基面来建立峰值。 – Anonymous
这些数据是描述整个图像,还是只是它的一部分? – KjMag