给定的是一个灰度图像I作为2D张量(维W,H)和一个坐标张量C(Dim)。无,2)。我想将C的行解释为I中的坐标,在这些坐标处使用某种插值(双线性可能对我的用例很好)采样I,并将得到的值存储在一个新的张量P中(无量纲,即1维,有尽可能多的条目C有行)。
使用TensorFlow这可能(有效)吗?我能找到的只是调整图像大小的函数(如果你愿意,可以等距重采样)。但在坐标列表中我找不到任何现成的样本。
也就是说,我本想找到一个类似tf.interpolate()的函数:
I = tf.placeholder("float", shape=[128, 128])
C = tf.placeholder("float", shape=[None, 2])
P = tf.interpolate(I, C, axis=[0, 1], method="linear")
理想情况下,我会寻找一种解决方案,使我能够使用带形状(None,M)的C沿M维插值N维张量I,并产生N-M+1维输出,如上面代码中的“axis”参数所示。
(我的应用程序中的“图像”不是图片,而是来自物理模型(用作占位符)或替代学习模型(用作变量)的采样数据。现在这个物理模型有2个自由度,因此在“图像”中进行插值就足够了,但我可能会在将来研究更高维度的模型。)
如果现有的TensorFlow特性不可能实现这样的功能:当我想实现类似于tf.interpolate()的运算符时,应该从哪里开始?(文档和/或简单示例代码)
没有执行这种插值的内置操作,但是您应该能够使用现有TensorFlow操作的组合来执行。对于双线性情况,我建议采取以下策略:
从索引的张量
C
,计算对应于四个角点的整数张量。例如(名称假定原点在左上角):从表示特定角点的每个张量中,从这些点的
I
中提取值向量。例如,对于以下函数,对二维情况执行此操作:首先计算水平方向上的插值:
现在计算垂直方向上的插值:
考虑到TF还没有Numpy切片的通用性(github issue #206),而且
gather
只在第一维上工作,这对最近的邻居来说是很棘手的。但有一种方法可以通过使用gather->;transpose->;gather->;extract diagonal来解决这个问题从这样的矩阵开始:
此代码提取主目录上方的对角线
[]运算符变成
Squeeze
和Slice
时会发生一些神奇的变化相关问题 更多 >
编程相关推荐