繁体   English   中英

如何创建3D空间密度图?

[英]how to create a 3d spatial density map?

我有一个随时间变化的系统,其中包含不同数量的粒子(约100k粒子)。 实际上,每个粒子代表具有特定强度的3D空间中的相互作用。 因此,每个粒子都具有(X,Y,Z; w),它是坐标加上介于0和1之间的权重因子,显示了该坐标中的相互作用强度。 在这里http://pho.to/9Ztti,我上传了10个系统的实时快照,其中的粒子表示为带红色的小点。 点越红,交互作用越强。

问题是:如何才能最好在Matlab或Origin Pro 9或ImageJ中生成这些粒子的3D(空间)密度图? 是否有办法根据ImageJ中的红色强度对这些图像取平均值?

由于我具有粒子(X,Y,Z; w)的数值数据,因此我也可以在其他软件中分析这些数据。 因此,欢迎您提出其他任何分析方法/软件的建议

欢迎任何想法/意见!

如果您的系统可以在Matlab中处理矩阵,则可能非常简单

A = mean(M, 4);

假设M持有您的图像的4D编辑,那么A将是您的地图。

假设您的数据在3D连续空间中,并且您的数据集只是每个粒子相互作用的3d位置的列表,听起来您想制作4D加权直方图。 您必须将3d空间切成小块,并对每个块中的加权点随时间求和,然后将结果绘制在单个3d图中,其中颜色表示随时间推移的加权加权总和。

这是一个随机生成的粒子相互作用的例子:

%% Create dataSet of random particle interations in 3d space
for i=1:5000
    if i == 1
        dataSet = [rand()*100 rand()*100 rand()*100 rand() i];
    else
        dataSet(i,:) = [rand()*100 rand()*100 rand()*100 rand() i];
    end
end
% dataSet = [x y z interactionStrength imageNumber]

xLimits = [min(dataSet(:,1)) max(dataSet(:,1))];
yLimits = [min(dataSet(:,2)) max(dataSet(:,2))];
zLimits = [min(dataSet(:,3)) max(dataSet(:,3))];

binSize = 10; % Number of bins to split each spatial dimention into
binXInterval = (xLimits(2)-xLimits(1))/binSize;
binYInterval = (yLimits(2)-yLimits(1))/binSize;
binZInterval = (zLimits(2)-zLimits(1))/binSize;

histo = [];
for i=xLimits(1)+(binSize/2):binXInterval:xLimits(2) + (binSize/2)
    for j=yLimits(1)+(binSize/2):binYInterval:yLimits(2) + (binSize/2)
        for k=zLimits(1)+(binSize/2):binZInterval:zLimits(2) + (binSize/2)
            %% Filter out particle interactions found within the current spatial bin
            idx = find((dataSet(:,1) > (i - binSize)) .* (dataSet(:,1) < i));
            temp = dataSet(idx,:);
            idx = find((temp(:,2) > (j - binSize)) .* (temp(:,2) < j));
            temp = temp(idx,:);
            idx = find((temp(:,3) > (k - binSize)) .* (temp(:,3) < k));
            temp = temp(idx,:);
            %% Add up all interaction strengths found within this bin
            histo = [histo; i j k sum(temp(:,4))];
        end
    end
end
%% Remove bins with no particle interactions
idx = find(histo(:,4)>0);
histo = histo(idx,:);
numberOfImages = max(dataSet(:,5));
%% Plot result
PointSizeMultiplier = 100000;
scatter3(histo(:,1).*binXInterval + xLimits(1),histo(:,2).*binYInterval + yLimits(1),histo(:,3).*binZInterval + zLimits(1),(histo(:,4)/numberOfImages)*PointSizeMultiplier,(histo(:,4)/numberOfImages));
colormap hot;
%Size and color represent the average interaction intensity over time

由10000个随机生成的粒子相互作用制成的4D直方图。 每个轴分为10个箱。 大小和颜色表示随时间推移每个仓中粒子相互作用的总和: 在此处输入图片说明

一种方法是使用3D散点图(气泡),其圆/气泡大小可变,与粒子的强度成比例。

这是一个模拟的示例:

N = 1e4;       % number of particles

X = randn(N,1);          % randomly generated coordinates
Y = 2*randn(N,1);
Z = 0.5*randn(N,1);
S = exp(-sqrt(X.^2 + Y.^2 + Z.^2));  % bubble size vector

scatter3(X,Y,Z,S*200)

Scaterplot 结束

在这里,我随机生成了X,Y和Z的值,而S与距云中心的距离成反比。

在您的情况下,如果我们假设(X,Y,Z,w)值存储在名为Particles的2D数组中,则为:

X = Particles(:,1);
Y = Particles(:,2);
Z = Particles(:,3);
S = Particles(:,4);

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM