用MATLAB生成Gaussian截面的三维小球矩阵

有时画图的时候,需要画三维的小球分布图,但是如果用MATLAB自带的scatter3函数,没有投影透视关系等,不够真实。考虑到再成像系统中,用微球测定的PSF都是高斯分布的,故而需要画高斯截面的小球。这个程序可以生成小球位于任意位置、任意数量的三维小球矩阵。
画一个高斯截面的小球的函数(其实就是3d高斯函数):

%画三维小球的程序。用gauss函数。
%xv是输入的一个空白图像,就是一个 Nx * Ny * Nz 的矩阵,在这个矩阵里画小球。
%mu是小球的位置中心,是一个具有3个元素的向量。
%sigma代表小球的半径。也是一个具有3个元素的向量。就是可以画一个椭球。
%yv是这个函数画完小球的输出的矩阵。它的大小与xv一样。
function [yv] = Gaussian3(xv,mu,sigma)
    [X,Y,Z]=meshgrid(1:size(xv,1),1:size(xv,2),1:size(xv,3));
    X=permute(X,[2,1,3]);
    Y=permute(Y,[2,1,3]);
    Z=permute(Z,[2,1,3]);
    yv=exp(-((X-mu(1)).^2/(2*sigma(1)^2)+(Y-mu(2)).^2/(2*sigma(2)^2)+(Z-mu(3)).^2/(2*sigma(3)^2)));
end

如果要画多个小球,这个函数应当这样使用:

例程:

pos3=[25,26,27;45,65,45;15,85,99];%pos3是小球的位置坐标(单位为像素),一个小球一行
imout=zeros(Nx,Ny,Nz);%声明一个三维矩阵用于画小球,注意矩阵三个维度的大小都一定要比小球最大的位置坐标更大。
for i=1:size(pos3,1)
    yv = peakIntensity(i)*Gaussian3(imout,pos3(i,:),[r r r]);
    imout(yv>imout)=yv(yv>imout);
end
%最终画好的多小球的图就是imout

画好的小球可以用imagej的3D project展示:
在这里插入图片描述
可以看出,小球具有明显的高斯分布截面,能模拟真实情况

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值