Ati*_*hon 6 python opencv image-processing scipy tensorflow
编辑:Tensorflow 1.3现在包括tf.contrib.resampler
此操作。从v0.2开始,PyTorch还通过该affine_grid
功能支持此操作。
我想知道Tensorflow中是否有等效于cv2.remap(或scipy.ndimage.interpolate.map_coordinates的函数)的正式或自定义实现。
这个问题是相似的,但是答案不是我想要的,因为tf.contrib.image.transform
函数执行投影映射cv2.remap
并scipy...map_coordinates
执行逐像素映射。
我刚刚浏览了 GitHub 存储库,它似乎没有实现,tf.contrib.image.transform
没有使用任何子例程,纯粹返回插值。然而,像素位置本身的变换只是您可以自己完成的简单矩阵乘法。如果您不熟悉,请参阅我的回答。不过,您需要自己进行插值。基本上,您只需将坐标放入一个新(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
Run Code Online (Sandbox Code Playgroud)
然后乘以(3,3)
变换矩阵以获得新位置
s0*x0' s1*x0' s2*x0' ...
s0*y0' s1*y1' s2*y2' ...
s0 s1 s2
Run Code Online (Sandbox Code Playgroud)
其中s0
, ...,sN
是缩放因子,因此最后除以最后一行以消除缩放,然后将前两行作为您的点。
x0' x0' x0' ...
y0' y1' y2' ...
Run Code Online (Sandbox Code Playgroud)
您需要确保使用浮点运算,然后可以根据需要进行插值。
您可以在 TensorFlow 中执行所有这些操作。如果您只是将其作为预处理步骤,那么您当然可以将张量分解为 numpy 数组并使用cv2.remap
or进行处理scipy.ndimage.interpolate.map_coordinates
,然后将其放回到张量中,但这样做并没有真正的好处。
归档时间: |
|
查看次数: |
677 次 |
最近记录: |