2024-04-26 11:05:39 发布
网友
编辑:Tensorflow 1.3现在包含了此操作的tf.contrib.resampler。从v0.2开始,PyTorch还通过affine_grid函数支持此操作。在
tf.contrib.resampler
affine_grid
我想知道是否有一个与cv2.remap(或scipy.ndimage.interpolate在地图上,基本上是一样的。在
This question与此类似,但答案不是我要寻找的,因为tf.contrib.image.transform函数执行投影映射,cv2.remap和{}执行像素映射。在
tf.contrib.image.transform
cv2.remap
我只是浏览了一下GitHub存储库,它似乎没有实现,tf.contrib.image.transform不使用任何子例程,只返回插值值。然而,像素位置的转换本身只是简单的矩阵乘法,您可以自己做。如果你不熟悉,请看我的答案。你需要自己做插值。基本上,你只需要把你的坐标放入一个新的(3,N)矩阵(其中N是点数)如下(为了简洁起见,假设你只有N=4点):
(3,N)
N
N=4
x0 x0 x0 x0 x1 x1 x1 x1 x2 x2 x2 x2 x3 x3 x3 x3 y0 y1 y2 y3 y0 y1 y2 y3 y0 y1 y2 y3 y0 y1 y2 y3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
然后乘以你的(3,3)变换矩阵得到新的位置
(3,3)
其中s0,…,sN是缩放因子,所以最后除以最后一行以去除缩放比例,然后只取前两行作为点。在
s0
sN
x0' x0' x0' ... y0' y1' y2' ...
你需要确定你使用的是浮点运算,然后你可以随心所欲地进行插值。在
您可以在TensorFlow中执行所有这些操作。如果您只是将其作为预处理步骤来执行,那么您当然可以将张量分解为numpy数组,并使用cv2.remap或{}进行处理,然后将其放回张量中,但这样做没有真正的好处。在
迟交的答复
在tf1.13中有一个新函数tf.contrib.image.dense_image_warp,它或多或少地做{},但没有插值。在
tf.contrib.image.dense_image_warp
我只是浏览了一下GitHub存储库,它似乎没有实现,
tf.contrib.image.transform
不使用任何子例程,只返回插值值。然而,像素位置的转换本身只是简单的矩阵乘法,您可以自己做。如果你不熟悉,请看我的答案。你需要自己做插值。基本上,你只需要把你的坐标放入一个新的(3,N)
矩阵(其中N
是点数)如下(为了简洁起见,假设你只有N=4
点):然后乘以你的
^{pr2}$(3,3)
变换矩阵得到新的位置其中
s0
,…,sN
是缩放因子,所以最后除以最后一行以去除缩放比例,然后只取前两行作为点。在你需要确定你使用的是浮点运算,然后你可以随心所欲地进行插值。在
您可以在TensorFlow中执行所有这些操作。如果您只是将其作为预处理步骤来执行,那么您当然可以将张量分解为numpy数组,并使用}进行处理,然后将其放回张量中,但这样做没有真正的好处。在
cv2.remap
或{迟交的答复
在tf1.13中有一个新函数},但没有插值。在
tf.contrib.image.dense_image_warp
,它或多或少地做{相关问题 更多 >
编程相关推荐