tfjs进行RGB-BGR转换的三种方法

变量定义

var t_rgb; 原始RGB的tensor
var t_bgr; 目标BGR的tensor

小结

默认从frame数组构造的tensor的hwc格式的,所以我们先要将hwc格式转成chw格式,然后再去交换R和B通道的数据,这是从图像层面比较容易想到的过程,但是也比较复杂,方法1就描述了这个过程。

然后我们可以注意到,实际上并不需要显示的CHW格式,我们要做的事情就是交换R和B的值,所以方法2直接在第三个维度去做split,然后重新组合成新的tensor即可。

进一步,我们考虑一下宏观的信息,注意到RGB和BGR,都是三通道,而且只是顺序上相反,所以最简单的方法就是做一个reverse,直接将通道顺序反过来,从RGB直接到BGR。

方法1

  1. hwc转chw
  2. unstack,分成r g b 三个通道
  3. stack,将b g r 组成一个新的tensor
  4. 新的chw的bgr转成hwc的bgr格式
var tensor_chw = t_rgb.transpose([2,0,1]);
var tensor_unstack = tf.unstack(tensor_chw, 0);
var tensor_stack = tf.stack([tensor_unstack[2], tensor_unstack[1], tensor_unstack[0]], 0);
t_bgr = tensor_stack.transpose([2,0,1]);

方法2

  1. split,沿着第三个维度进行切分,三等分,即分成了R G B三个通道
  2. concat,将B G R 三个通道组成新的tensor
var t_split = tf.split(t_rgb, 3, 2);
t_bgr = tf.concat([t_split[2], t_split[1], t_split[0]], 2);

方法3

  1. reverse,在hwc格式的RGB的第三个维度做reverse,直接转成hwc格式的BGR tensor
var t_bgr = tf.reverse(t_rgb, -1);

参考

tfjs API

你可能感兴趣的:(TensorFlow)