根据强度变化计算3D距离

时间:2019-07-01 10:24:44

标签: image matlab 3d processing euclidean-distance

我有三个部分(顶部,中间,底部)灰度图像(3D)。在每个部分中,我都有一个坐标为(x,y)和强度值为[0-255]的点。每个部分之间的距离为20像素。 我创建了一个插图来展示如何使用显微镜生成这些图像:

插图
Illustration.

插图(侧视图):红线是感兴趣的对象。蓝星代表在顶部,中部和底部区域可见的点。这些点的(x,y)坐标是已知的。对象的长度保持不变,但是可以在空间中旋转-“焦点不清晰”(插图显示了在时间点5处的旋转线)。在时间点1,红线静止(在2D图像中:2个点,其距离等于对象的长度)。

我想通过使用强度的变化,关于物体长度的知识以及我所掌握的部分中的信息来估计端点(表示为星形)的x,y,z坐标。任何帮助将不胜感激。

以下是图像的示例:

Bot部分
Bot section

中间部分
Mid section

顶部
Top section

PSF image

1 个答案:

答案 0 :(得分:1)

我猜正确的方法是为您的 bot top 帧记录三个z坐标略有不同的图像,然后执行3D -deconvolution(使用Richardson-Lucy或其他算法)。

但是,更简单的方法将是我在评论中概述的方法。如果您将数据用于出版物,则强烈建议您强调这只是一种估计,并包括完成该过程的步骤。

我建议执行以下步骤:

由于我没有您的PSF数据,因此我通过将PSF估算为3D-Gaussiamn来伪造一些数据。当然,这是一个很大的简化,但是您应该能够将其背后的想法理解。

首先,沿z将高斯拟合到PSF:

[xg, yg, zg] = meshgrid(-32:32, -32:32, -32:32);

rg = sqrt(xg.^2+yg.^2);

psf = exp(-(rg/8).^2) .* exp(-(zg/16).^2);


% add some noise to make it a bit more realistic

psf = psf + randn(size(psf)) * 0.05;
% view psf:

% 
subplot(1,3,1);
s = slice(xg,yg,zg, psf, 0,0,[]);
title('faked PSF');
for i=1:2
    s(i).EdgeColor = 'none';
end

% data along z through PSF's center

z = reshape(psf(33,33,:),[65,1]);
subplot(1,3,2);
plot(-32:32, z);
title('PSF along z');

% Fit the data

% Generate a function for a gaussian distibution plus some background

gauss_d = @(x0, sigma, bg, x)exp(-1*((x-x0)/(sigma)).^2)+bg;

ft = fit ((-32:32)', z, gauss_d, ...
    'Start', [0 16 0] ... % You may find proper start points by looking at your data
);

subplot(1,3,3);
plot(-32:32, z, '.');
hold on;
plot(-32:.1:32, feval(ft, -32:.1:32), 'r-'); 
title('fit to z-profile');

enter image description here

将强度Iz坐标相关联的函数是

gauss_d = @(x0, sigma, bg, x)exp(-1*((x-x0)/(sigma)).^2)+bg;

您可以为x重新安排此公式。由于平方根,有两种可能性:


% now make a function that returns the z-coordinate from the intensity
% value:

zfromI = @(I)ft.sigma * sqrt(-1*log(I-ft.bg))+ft.x0;
zfromI2= @(I)ft.sigma * -sqrt(-1*log(I-ft.bg))+ft.x0;

请注意,我伪造的PSF被标准化为最大值。如果您的PSF数据未标准化,则可以将其除以最大值。

现在,您可以使用zfromIzfromI2来获取强度的z坐标。同样,I应该归一化,即强度与参考点强度的比例:

zfromI(.7)

ans =

    9.5469

>> zfromI2(.7)

ans =

   -9.4644       

请注意,由于我添加的随机噪声,您的结果可能看起来略有不同。