Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何创建三维空间密度图?_Matlab_Pixel Density - Fatal编程技术网

Matlab 如何创建三维空间密度图?

Matlab 如何创建三维空间密度图?,matlab,pixel-density,Matlab,Pixel Density,我有一个随时间变化的系统,由不同数量的粒子组成(~100k个粒子)。事实上,每个粒子代表三维空间中具有特定强度的相互作用。因此,每个粒子都有(X,Y,Z;w),这是坐标加上一个介于0和1之间的权重因子,表示该坐标中的相互作用强度。 在这里,我上传了10个系统的实时快照,粒子被表示为红色的小点;点越红,相互作用越强 问题是:如何生成这些粒子的3D(空间)密度图,最好是在Matlab或Origin Pro 9或?有没有一种方法,比如说,根据图像中的红色强度取这些图像的平均值 因为我有粒子的数值数据(

我有一个随时间变化的系统,由不同数量的粒子组成(~100k个粒子)。事实上,每个粒子代表三维空间中具有特定强度的相互作用。因此,每个粒子都有(X,Y,Z;w),这是坐标加上一个介于0和1之间的权重因子,表示该坐标中的相互作用强度。 在这里,我上传了10个系统的实时快照,粒子被表示为红色的小点;点越红,相互作用越强

问题是:如何生成这些粒子的3D(空间)密度图,最好是在Matlab或Origin Pro 9或?有没有一种方法,比如说,根据图像中的红色强度取这些图像的平均值

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


欢迎提出任何想法/意见

如果您的系统能够在Matlab中处理矩阵,那么

A = mean(M, 4);

假设
M
保存图像的4D编译,那么
A
将是您的地图。

一种方法是使用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)
结束

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

在您的情况下,如果我们假设(X,Y,Z,w)值存储在一个称为粒子的二维数组中,那么它将是:

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

希望这会有所帮助。

假设您的数据是在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
%%在三维空间中创建随机粒子交互的数据集
对于i=1:5000
如果i==1
数据集=[rand()*100 rand()*100 rand()*100 rand()i];
其他的
数据集(i,:)=[rand()*100rand()*100rand()*100rand()i];
结束
结束
%数据集=[x y z交互强度图像编号]
xLimits=[min(数据集(:,1))max(数据集(:,1))];
yLimits=[min(数据集(:,2))max(数据集(:,2))];
zLimits=[min(数据集(:,3))max(数据集(:,3))];
binSize=10;%要将每个空间维度拆分为的存储箱数
binXInterval=(xLimits(2)-xLimits(1))/bin大小;
binYInterval=(yLimits(2)-yLimits(1))/binSize;
binZInterval=(zLimits(2)-zLimits(1))/binSize;
历史=[];
对于i=xLimits(1)+(binSize/2):binXInterval:xLimits(2)+(binSize/2)
对于j=yLimits(1)+(binSize/2):binYInterval:yLimits(2)+(binSize/2)
对于k=zLimits(1)+(binSize/2):binZInterval:zLimits(2)+(binSize/2)
%%过滤掉当前空间箱中发现的粒子相互作用
idx=find((数据集(:,1)>(i-binSize)).*(数据集(:,1)(j-binSize)).*(temp(:,2)(k-binSize)).*(temp(:,3)0);
histo=histo(idx,:);
numberOfImages=max(数据集(:,5));
%%绘图结果
PointSizeMultiplier=100000;
散点3(histo(:,1)。*binXInterval+xLimits(1),histo(:,2)。*binYInterval+yLimits(1),histo(:,3)。*binZInterval+zLimits(1),(histo(:,4)/numberOfImages)*PointSizeMultiplier,(histo(:,4)/numberOfImages));
彩色热图;
%大小和颜色表示随时间变化的平均交互强度
由10000个随机生成的粒子相互作用生成的4D直方图。每个轴分为10个料仓。尺寸和颜色表示每个料仓中随时间累积的粒子相互作用:

它绝对可以作为矩阵导入matlab。但是,什么是
M
??(“
M
保存图像的4D编译…”您所说的“图像的4D编译”是什么意思?!我假设你有一个4D矩阵,每个工作
M(:,:,:,I)
包含你的红点的3D图像。这是个好主意。但是,与其改变气泡的大小,我想我更喜欢改变气泡的透明度。您知道如何在matlab中更改透明度吗?