gpt4 book ai didi

c - 如何对四边形使用tensorflow.crop_and_resize()

转载 作者:行者123 更新时间:2023-11-30 19:28:25 25 4
gpt4 key购买 nike

我想从由 8 个坐标点定义的图像中裁剪随机四边形并调整其大小:

(xtl, ytl), (xtr, ytr), (xbr, ybr), (xbl, ybl)

我有a code sample implementing the same crop and resize for a rectangle from an image, described by 4坐标 -

(x1,y1), (x2, y2)

我没有太多使用 C 语言,但我仍然可以理解代码在做什么,直到无法理解作者为什么要进行计算。具体来自上面要点中的第 53 行。

伪代码直到我理解:

涉及的变量:

图像 -

 float * image_data // float pointer to image data of original tensor shape- A = `<Batch X Channel X Height X Width>`
int batch_size // Batch value - for simplicity lets take single image A0= 1
int depth // Channel value from above shape for rgb A1= 3
int image_height // Height value from above shape A2= 128
int width // width value from above shape A3 = 128

即原始图像是3个128x128行x列的矩阵

盒子 -

float * boxes_data //float pointer to boxes coordinates in format B = `[y1,x1,y2,x2] X Number_of_Boxes`
int * box_index_data // can be ignored for our purpose B0= 0
int start_box // starting count of box B1 = 0
int limit_box // ending count of box B2 = 5000

也就是说,我们有一个包含 5000 个坐标(每 4 个)的列表,其中包含我们想要从原始图像中裁剪的矩形。

通过使用双线性插值来调整每个裁剪的大小以达到所需的裁剪尺寸。

农裁剪 -

float * corps_data //variable of all zeroes to hold final resized cropped pixels of shape - C = <5000*3*128*128> ie. 5000 matrices of original image size
int crop_height // height we wish to crop to C0 = 8 ie height of cropped box is 8 pixels
int crop_width // width we wish to crop to C1 = 64 ie height of cropped box is 64 pixels
float extrapolation_value // can be ignored for our purpose C2 = 0

算法:

  1. 首先循环所有框(0 到 5000)
  2. 初始化当前框和坐标(box、y1、x1、y2、x2)
  3. 断言复选框_index - 可以忽略

对于简单情况,crop 始终大于 1,

  • 计算height_scale =(框的高度)*(原始图像与裁剪尺寸之间的比例)
  • 计算width_scale =(框的宽度)*(原始图像与裁剪尺寸之间的比例)
  • 启动第二个嵌套循环以选择列中的所有裁剪像素
  • 计算 in_y ??
  • ---不明白为什么。
  • 启动第二个嵌套循环以选择列中的所有裁剪像素
  • 又是一些晦涩的头骨背叛混淆代码。
  • 返回裁剪后的像素值。
  • 有人可以解释一下这里发生的事情吗?我必须循环选择部分的每个像素并填充临时像素,我必须插值是吗?

    如何更改此函数以裁剪随机四边形并调整其大小?

    更多阅读:

    我理解其背后的理论,为了消除量化偏移,它们对等距像素进行采样,对于网格单元之间的像素值,它是使用双线性插值计算的。这些选定的值被平均池化以投影在统一大小的图层上。

    任务:

    实现文本对齐,如 this paper 所示

    我想输入任意大小和方向的四边形,并将其映射到固定的网格大小,例如 128X128 的图像,我有两个四边形,其中一个很小,例如 ~20x20 (盒子) 和一个大的 ~80x100(盒子)。我有他们的坐标。现在如何仅选择这些像素并将它们投影为统一尺寸,例如 64x64(裁剪)

    最佳答案

    您可以使用 OpenCV 库解决这个问题。

    如果四边形是任意的(不是平行四边形) - 您需要透视变换(否则 - 更简单的仿射变换)

    制作4对对应坐标:四边形顶点 - 所得矩形顶点

    求透视变换矩阵:getPerspectiveTransform

    使用此矩阵:warpPerspectivetransform

    关于c - 如何对四边形使用tensorflow.crop_and_resize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53974575/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com