📌  相关文章
📜  Tensorflow.js tf.image.transform()函数

📅  最后修改于: 2022-05-13 01:56:55.958000             🧑  作者: Mango

Tensorflow.js tf.image.transform()函数

Tensorflow.js 是谷歌开发的一个开源库,用于在浏览器或节点环境中运行机器学习模型以及深度学习神经网络。

.image.transform()函数用于将指定的变换应用于图像。

句法:

tf.image.transform(image, transforms, interpolation?, fillMode?, 
fillValue?, outputShape?)

参数:此方法接受以下参数:

  • images:指定的 4d 张量,其配置为 [batch, imageHeight, imageWidth, depth]。它可以是 tf.Tensor4D、TypedArray 或 Array 类型。
  • 变换:所述的投影变换矩阵或矩阵。它是范围为 8 的一维张量或维度为 N x 8 的张量。如果单行变换是 [a0, a1, a2, b0 b1, b2, c0, c1],随后它会绘制输出点,即(x, y) 转化为修改后的输入点即 (x', y') = ((a0 x + a1 y + a2) / k, (b0 x + b1 y + b2) / k),其中 k = c0 x + c1 y + 1。此外,与将输入点绘制到输出点的变换相比,变换是相反的。
  • 插值:即规定的插值方式。它可以是“最近”或“双线性”类型。它是可选的,默认值为“最近”。
  • fillMode:这里,超出输入边距的指定点按照指定模式填充。该模式是可选的,可以是“常量”、“反射”、“包装”或“最近”类型。默认值为“常量”。在“反射”模式下,即(dcba | abcd | dcba),输入通过在最大像素的边缘进行冥想来拉长。在“常数”模式下,即 (kkkk | abcd | kkkk),输入通过填充超出边界的每个值以及相同的常数值k 来拉长。在' wrap '模式下,即(abcd | abcd | abcd),输入通过包围相对边缘而被拉长。在“最近”模式下,即(aaaa | abcd | dddd),输入被最近的像素拉长。
  • fillValue:如果规定的fillMode是“常量”,它是一个浮点数,描述了要在边缘之外填充的值。它是可选的,类型为 number。
  • outputShape:可选,类型为[number, number]。

返回值:返回 tf.Tensor4D 对象。

示例 1:使用 4d 张量和 2d 张量即变换。

Javascript
// Importing the tensorflow.js library
const tf = require("@tensorflow/tfjs")
  
// Calling image.transform() method and
// Printing output
tf.image.transform(tf.tensor4d([[
  
  [[4, 7], [21, 9]],
  
  [[8, 9], [1, 33]]
  
]]), tf.tensor2d([1, 2, 3, 4, 5, 6, 7, 8], [1, 8])).print();


Javascript
// Importing the tensorflow.js library
const tf = require("@tensorflow/tfjs")
  
// Defining an array of floats
const arr = [[
  [[1.1, 1.7, 1.5, 1.1], 
  [1.7, 1.9, 8.1, 6.3]],
  [[3.3, 3.4, 3.7, 4.0], 
  [5.1, 5.2, 5.3, 5.9]]
]];
  
// Calling image.transform() method and
// Printing output
tf.image.transform(arr, tf.tensor2d(
    [1.3, 2.4, 3.5, 4.5, 5.1, 6.0, 7.2, 8.5], 
    [1, 8]),'bilinear', 'reflect', 2, [2, 2])
    .print();


输出:

Tensor
    [[[[0, 0 ],
       [1, 33]],

      [[1, 33],
       [8, 9 ]]]]

示例 2:使用浮点数插值fillModefillValue以及outputShape的数组。

Javascript

// Importing the tensorflow.js library
const tf = require("@tensorflow/tfjs")
  
// Defining an array of floats
const arr = [[
  [[1.1, 1.7, 1.5, 1.1], 
  [1.7, 1.9, 8.1, 6.3]],
  [[3.3, 3.4, 3.7, 4.0], 
  [5.1, 5.2, 5.3, 5.9]]
]];
  
// Calling image.transform() method and
// Printing output
tf.image.transform(arr, tf.tensor2d(
    [1.3, 2.4, 3.5, 4.5, 5.1, 6.0, 7.2, 8.5], 
    [1, 8]),'bilinear', 'reflect', 2, [2, 2])
    .print();

输出:

Tensor
    [[[[3.3      , 3.4000001, 3.7      , 4        ],
       [4.3536587, 4.4536586, 4.6365857, 5.112195 ]],

      [[4.4178948, 4.5178947, 4.6936841, 5.1800003],
       [3.8970597, 4.0186343, 4.3869019, 4.721858 ]]]]

参考: https://js.tensorflow.org/api/latest/#image.transform