通过在常规网格上采样的位移场对图像进行扭曲

3
假设我有一个图像I(x,y)和一个向量场w(x,y),它们都在同一规则网格上采样。我的目标是根据向量场扭曲图像并创建输出图像J(u,v)。这是通过将I中的点(x,y)映射到J中的点(u,v)来完成的。问题是我不知道最简单的实现方法。我在网上阅读到这类问题基本上有两种主要方法。
前向映射:只需将位移向量添加到图像I的每个坐标(x,y)即可。问题在于这样做会得到非整数坐标点(u',v'),因为w(x,y)不一定是整数值,并且从像素到像素也有所变化。我的问题是:如何将该图像插值到整数坐标?例如,如果我想计算J(12,25)的像素值,如果样本不在规则网格上,我应该使用哪些样本进行插值?
反向映射:通过将转换的逆应用于坐标(u,v),找出图像I中对应于J中整数坐标(u,v)的非整数坐标(x',y')。然后可以轻松地对对应于非整数坐标(x',y')的值进行插值。我的问题是:我能否以某种方式将其应用于我的问题?我能否反转位移场?我如何找到将整数值从J映射到I中的非整数值的位移场的逆?
为了澄清,我不是在寻找现有解决方案的实现(我知道Matlab和OpenCV等函数可以做到这一点)。我只想理解其背后的理论,并开始自己进行实验。

你解决了这个问题吗,David? - papabiceps
不是很确定。我仍然不知道它是如何完成的。我找到了一些信息,例如在SimpleITK中有一个名为InverseDisplacementFieldImageFilter的类。在描述中,您可以找到基于样条的技术。但是,我不知道像SimpleITK中的DisplacementFieldTransform或WarpImageFilter这样的类是否在使用位移场扭曲图像时使用此方法。 - David
如果您仍在寻找有关此问题的解决方案和评论,我最近也不得不解决同样的问题,并将我的解决方案提交到了一个类似的问题上:https://dev59.com/uVgR5IYBdhLWcg3wHqXB#65566295 - pthibault
1个回答

0

谢谢你的回答。双线性插值的问题在于我应该如何找到可以用于插值的点。例如:使用前向映射,我想计算J(12,25)。也许我需要从J(11.5,24.10)、J(15.6,21)、J(10.6,25.1)、J(12.9,26)进行插值,因为这些是在J中最接近的邻居(在这个虚构的例子中)。如何从坐标列表中找出这些最接近的点?是否有快速的方法来做到这一点(可能是排序+搜索)?是否可能有更好的方法来解决整个问题,或者这是正确的方法? - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接