【问题标题】:How to crop and resize Images without chaning the original coordinates如何在不更改原始坐标的情况下裁剪和调整图像大小
【发布时间】:2019-11-27 05:11:52
【问题描述】:

我有一堆带有 X 和 Y 坐标的图像,它们是训练的标记。我必须将图像大小调整为 500 X 500。如何在不影响原始位置的情况下更改大小?

我已经尝试过 tf.image.resize_with_crop_or_pad 但是当我使用它的 x 和 Y 将点绘制到裁剪后的图像时,它会显示错误的坐标,它位于左上方。

newImage = tf.image.resize_with_crop_or_pad(
        image,
        500,
        500
    )

我希望原始图像不受其原始坐标的影响并且有空间,因此当我在图像上绘制原始点时它完全适合。

【问题讨论】:

  • image 是单个图像还是一组图像?标记数据的格式/形状是什么?
  • 批量图片,形状为 (97, 270, 312, 3) == (batchsize, size, size, channels)

标签: python image numpy tensorflow


【解决方案1】:

您可以使用

移动点
x += (500 - image.shape(0)) / 2
y += (500 - image.shape(1)) / 2

这应该可以工作,因为该函数总是裁剪和填充图像以使其居中。当原始图像的大小为奇数时,您可能需要检查它是如何工作的,因为这会给出一个浮点数,并且它可能距离预期点半个像素。

【讨论】:

  • 就像评论一样,这是正确的,但是应该注意,如果图像的宽度或高度大于 500,您可能会从图像中获取坐标(因为标记位置被裁剪掉了)。但这真的是不可避免的。
  • 你是绝对正确的。解决方案可能是丢弃x<0 or x>500 or y<0 or y>500 的点,或者当任何点满足上述条件时丢弃整个图像。
  • 这有点正确,但是当您谈论大约 25GB+ 的坐标时。这不适用。只需将图像左上角移动即可。
  • 我认为建议的总和是最快的解决方案,但您可以尝试不同的方法。对于每个图像,创建一个新的零矩阵并将目标坐标初始化为 1。例如 M = np.zeros(image.shape),然后为每个点设置 M[x, y] = 1。然后您可以将相同的功能应用于MnewM = tf.image.resize_with_crop_or_pad(M, 500, 500)。但由于准备矩阵需要时间,它肯定会更慢。
猜你喜欢
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
相关资源
最近更新 更多