我有两套3D
图片(它们以 2D stacks
的形式出现)。 Image A
是10 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
可以吗与 A
,考虑到我完全忽略了 z-coordinate
会发生什么?
谢谢。
最佳答案
正如您提到的,这是显微 CT,我假设这两个图像是同一对象的不同尺寸分辨率。这意味着像素具有特定的空间位置,而不仅仅是值,因此对于这种情况,没有像素(假设像素是立方体中心的无限小点)在两个图像中匹配。
因此,假设在图像 A 中,像素中心的位置是它们的索引 (1,1,1)、(1,1,2) 等。这意味着图像开始(像素边界)在“世界值(value)”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.5
(我们的图像边框)的第一个像素是 0.375
,而下一个像素是 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
关于matlab - 我如何有效地将图像与分辨率是原始图像两倍的图像进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49799359/