如何有效地将图像与分辨率为原始图像的两倍的另一图像进行比较?

时间:2018-04-12 14:36:21

标签: matlab image-processing

我有两组3D张图片(它们以2D stacks的形式出现)。 Image A10 micron,尺寸为1000 x 1024 x 1017,而图片B为5 micron,尺寸为:2004 x 2048 x 2036。我喜欢对随机选择的2D slices A的一组进行计算,然后将其与B的同一组切片进行比较。但是,由于B的每个切片A的切片数量是两倍,因此将B的两个切片与A的每个切片进行比较是明智的吗?如果是这样,我如何确定B的两个切片中哪一个确切地构成A的切片?

在考虑这个问题时,我还想到A使用2函数为我选择用于计算的每个imresize炸掉2D slice。考虑到我完全忽略了B会发生的情况,可以将这个新的Az-coordinate进行比较吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

如你所说这是microCT,我假设两个图像都是同一个对象的不同大小分辨率。这意味着像素具有特定的空间位置,而不仅仅是值,因此对于这种情况,在两个图像中都没有像素(假设像素是立方体中心的无限小点)。

因此,我们假设在图像A中,像素中心的位置是它们的索引(1,1,1),(1,1,2)等。这意味着图像开始(像素边界)处于“世界值“0.5,以size(imgA)+0.5

结束

现在,首先将所需的像素坐标转换为此范围。 imgB像素中心位于(ind-0.5)*size(imgA)/size(imgB)+0.5个位置。

示例:假设

size(imgA,1)=3; size(imgB,1)=4;

因此imgA中的像素位于x位置1:3。使用上面的公式,imgB上的像素位于[0.8750 1.6250 2.3750 3.1250]中。 请注意第一个像素是0.375 0.5(我们的图像边框),下一个像素位于0.75(双0.375*2)。

我们将更高分辨率的图像缩放到相同的“真实世界”坐标。

现在到了真实的东西。

我们需要在参考(A)图像中创建所需的坐标。为此,我们这样做:

[y, x, z]=...
   ndgrid((1:size(imgB,1)-0.5)*size(imgA,1)/size(imgB,1)+0.5),...
          (1:size(imgB,2)-0.5)*size(imgA,2)/size(imgB,2)+0.5),...
          (1:size(imgB,3)-0.5)*size(imgA,3)/size(imgB,3)+0.5);

现在这3个有我们想要的坐标。 注意!每个都是size(imgB) !!!您需要总共使用RAM 5*size(imgB)来处理此问题。

现在我们可以插入

imAinB=interp3(imgA,x,y,z,'linear'); % Or nearest

答案 1 :(得分:0)

似乎你的功能是imresize3。您可以使用以下内容将一个卷更改为其他卷:

B = imresize3(V,[numrows numcols numplanes])

您还可以探索插值方法。