标签: image-registration

将2D图像刚性地注册到3D体积,对仿射变换具有良好的初始猜测

我有一个3D体积和一个2D图像和两者之间的近似映射(没有skwewing的仿射变换,已知缩放,旋转和平移近似已知且需要拟合).因为此映射中存在错误,我想进一步将2D图像注册到3D卷.我之前没有为注册目的编写代码,但由于我找不到任何程序或代码来解决这个问题,我想尝试这样做.我认为注册标准是优化互信息.我认为这也适用于此,因为两幅图像之间的强度不相等.所以我认为我应该为转换创建一个函数,一个用于交互信息的函数和一个用于优化的函数.

基于一篇文章,我确实在两年前的mathworks 线程中找到了一些Matlab代码.OP报告她设法让代码工作,但我不知道她是怎么做到的.另外在matlab的IP包中有一个实现,但我没有那个包,似乎没有相应的八度.SPM是一个使用matlab并已实现注册的程序,但不能处理2d到3d注册.在文件交换机上,存在使用互信息登记两个2D图像的强力方法.

她所做的是将多平面重建函数和相似/误差函数传递给最小化算法.但细节我不太明白.也许最好重新开始:

load mri; volume = squeeze(D);

phi = 3; theta = 2; psi = 5; %some small angles
tx = 1; ty = 1; tz = 1; % some small translation
dx = 0.25, dy = 0.25, dz = 2; %different scales
t = [tx; ty; tz];
r = [phi, theta, psi]; r = r*(pi/180);
dims = size(volume);
p0 = [round(dims(1)/2);round(dims(2)/2);round(dims(3)/2)]; %image …
Run Code Online (Sandbox Code Playgroud)

matlab geometry transformation image-processing image-registration

5
推荐指数
1
解决办法
2020
查看次数

如何估计具有非均匀平移/旋转的图像之间的子像素偏移

我有几张图像完全重叠同一场景。但所有图像之间都有一个小的偏移,大约 1 像素或更小,因此是子像素偏移。假设这是问题 (1):如何估计两个图像之间的子像素偏移(实际上,我知道如何进行,并且在下面编写了相关代码)。我这里用的是python。

除了问题(1)之外,还有问题(2),即整个图像上的非均匀偏移。让我们给出图像 A 和图像 B,在左上角,图像 A 在 x 和 y 轴上从图像 B 移动了大约 1 像素,但在中心,图像 A 在 x 和 y 轴上也从图像 B 移动了 0.5 像素。图像 A 和 B 之间的偏移在图像的整个表面中并不均匀。问题是我如何估计这种不均匀的偏移,让我们将其命名为偏移表面,对于所有图像的所有像素(以一个作为参考)(对于这个问题我也有一个解决方案,我将在下面解释)。

最后,问题(3)是用估计的平移表面(在(2)上计算)来平移图像。例如,我知道如何将图像在 X 轴上移动到 0.5 px,在 Y 轴上移动到 1.2 px。但我不知道如何对每个像素进行特定移位的阵列。

我的解决方案:

问题(1):该问题可以使用傅里叶空间中的互相关来解决。scipy库中已经存在一个函数:register_translation 参考这里,我只需要给出两个图像作为参数和我想要的浮点精度。

问题(2):请记住,图像所有表面的偏移并不均匀。我所做的基本上是,在 500x500 像素的窗口上,移位是均匀的,可以从问题 (1) 轻松估计。因此,我计算了窗口为 500x500px、步长为 100px 的图像所有表面之间的位移。因此,我现在估计的非均匀偏移如下所示估计的非均匀偏移。然后,我可以从这个实时估计的偏移中插入一个表面,这将为我提供图像每个像素的估计偏移。为此,我必须以与图像相同的分辨率对表面进行插值。我做到了,使用numpy.griddata. 这是两个分量(x 和 y)的结果非均匀平移插值的 x 和 y 分量。因此,我估计了图像所有表面之间的非均匀偏移。

问题(3):我现在想将这种转变应用于所有图像。我不知道该怎么做。要以子像素移动图像,您可以使用scipy.ndimagenamed中的函数,您可以在此处fourier_shift找到该函数,但您只能为所有图像提供一次移动。在这里,我想对图像的每个像素进行偏移。

你们有什么想法来解决问题(3)吗?另外,如果您认为有一个最简单的方法来解决问题 1 和 3,它仍然很有用!作为参考,我有 7 张 16000x26000px 的图像,所以像我一样需要一些时间来解决问题(2)。

python image fft image-registration

5
推荐指数
1
解决办法
1802
查看次数

计算圆和直线的变换

我试图确定两个图像之间的变换(旋转+平移+缩放)以便移动它们。

这些图像是用两种不同的方式拍摄的,产生了截然不同的纹理。所以我不能使用基于维持光流的技术。我认为对图像进行阈值处理以提取几何形状会很好(请参见下面的示例)。但后来我很难看到我能做什么......也许提取垂直线和中心圆来帮助我提取我的变换。

我使用 python 工作,我研究了 Opencv 可以提供的功能,但目前还没有取得什么成功。

在此输入图像描述

--- 稍后编辑 ---

我用霍夫变换检测了圆和线(见下图)。事实上,这将有助于正确注册。但是,我可以使用 Python 上的什么工具来注册这些元素呢?我经常使用光流守恒,但在这种情况下它相当复杂......

在此输入图像描述

python opencv image-processing image-registration

5
推荐指数
1
解决办法
815
查看次数