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

📅  最后修改于: 2023-12-03 15:20:34.644000             🧑  作者: Mango

TensorFlow.js tf.image.cropAndResize()函数

tf.image.cropAndResize()是TensorFlow.js中的一种图像处理函数,可以用来在图像中裁剪并调整大小。

语法
tf.image.cropAndResize(
    image: tf.Tensor<tf.Rank.R4> | tf.Tensor<tf.Rank.R3>,
    boxes: tf.Tensor<tf.Rank.R2>,
    boxInd: tf.Tensor<tf.Rank.R1>,
    cropSize: [number, number],
    method: 'bilinear' | 'nearest',
    extrapolationValue?: number
)
参数
  • image: 要进行裁剪和调整大小的图像张量,必须是4D(batch, height, width, channel)或3D(height, width, channel)。
  • boxes: 一个[num_boxes, 4]形状的张量,表示要在image中裁剪的num_boxes个框,每个框由x1, y1, x2, y2四个值描述。
  • boxInd: 一个长度为num_boxes的一维张量,表示每个框包含在image张量的哪个batch中,当image是3D时,boxInd可以省略。
  • cropSize: 要调整的输出形状,格式为[height, width]
  • method: 指定调整大小的方法,可以是'bilinear'或'nearest'。
  • extrapolationValue(可选):当部分裁剪和调整大小超出原始图像时,可以指定边缘像素的值,可以是数字或NaN。
返回值

一个4D或3D的张量,表示调整大小后的图像。

使用示例

以下示例显示了如何将图像切成几个框,并且将每个框调整为指定大小。在这个例子中,我们使用了一个狗的图像,将它分成了两个框,并将每个框调整为100×100的大小。我们使用的是'bilinear'方法,它将首先使用双线性内插来调整图像,然后使用最近邻内插来调整它。我们使用Image对象的.src属性加载图像,然后将它传递给tf.browser.fromPixels()函数,这样就可以将它转换为Tensor对象。

const image = new Image();
// 加载狗狗图片
image.src = 'https://i.imgur.com/UaJODyP.jpeg';

image.onload = async () => {
  const tensorImg = tf.browser.fromPixels(image);
  const batchedImage = tensorImg.expandDims(0);

  const boxes = tf.tensor2d([[0.1, 0.2, 0.6, 0.9], [0.3, 0.4, 0.7, 0.8]]);
  const boxInd = tf.tensor1d([0, 0]);
  const cropSize = [100, 100];

  // 裁剪并调整大小
  const croppedImages = tf.image.cropAndResize(batchedImage, boxes, boxInd, cropSize, 'bilinear');
  const croppedImage = croppedImages.squeeze();

  // 将张量转换为Image对象并显示
  const croppedImageArr = await croppedImage.array();
  const newImg = new ImageData(croppedImageArr, 100, 100);
  const canvas = document.createElement('canvas');
  canvas.width = 100;
  canvas.height = 100;
  const ctx = canvas.getContext('2d');
  ctx.putImageData(newImg, 0, 0);
  document.body.appendChild(canvas);
};

以上代码的输出将是一个包含两张100×100的狗狗图片的画布,每张图片都是原始图像的一部分。

总结

tf.image.cropAndResize()函数是一个强大的TensorFlow.js图像处理工具,可以用来裁剪图像并调整大小。它非常适合用于对象检测、图像分割、特征提取等任务中。在使用时,需要注意调整输出图像的大小和裁剪的位置。