matlab - 我如何有效地将图像与分辨率是原始图像两倍的图像进行比较?

标签 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可以吗与 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:3imgB 上的像素使用上述公式,在 [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/

相关文章:

matlab - 在MATLAB中计算警告消息

python-3.x - 摆脱 OpenCV-Python 中的线条

opencv - 我们可以使用 Lucas Kanade 光流(opencv)进行基于颜色的检测或轮廓对象跟踪吗?

image-processing - OpenCV - 用于不同角度的长物体的 Haar 分类器

python - Opencv 阈值代码在 python2.7(Windows) 中工作但不工作 Raspberry Pi

c++ - 使用 opencv 通过 Filestorage 保存时出错

MATLAB - 如何消除图像上的阴影背景

c++ - OpenCV如何在matlab中共享库?

matlab - 将大向量中的每个元素分配给重复次数的有效方法

MATLAB 对象属性可见但不可修改