【问题标题】:How can I convert form [xmin ymin xmax ymax] to [x y width height] normalized in image?如何将表格 [xmin ymin xmax ymax] 转换为图像中标准化的 [x y width height]?
【发布时间】:2019-11-20 22:18:51
【问题描述】:

我正在使用 Microsoft 的 CustomVision.ai 构建自定义视觉应用程序。

我正在使用this tutorial

在物体检测项目中标记图像时,需要使用归一化坐标指定每个标记物体的区域。

我有一个 XML 文件,其中包含有关图像的注释,例如命名为sample_1.jpg:

<annotation>
        <filename>sample_1.jpg</filename>
    <size>
        <width>410</width>
        <height>400</height>
        <depth>3</depth>
    </size>
    <object>
        <bndbox>
            <xmin>159</xmin>
            <ymin>15</ymin>
            <xmax>396</xmax>
            <ymax>302</ymax>
        </bndbox>
    </object>
</annotation>

我必须根据提供的教程将边界框坐标从 xmin,xmax,ymin,ymax 转换为 x,y,w,h 坐标。

谁能给我一个转换函数?

【问题讨论】:

  • 在这种情况下 x 和 y 是什么意思?

标签: python object-detection microsoft-custom-vision


【解决方案1】:

假设 x/ymin 和 x/ymax 是您的边界角,分别是左上角和右下角。那么:

x = xmin
y = ymin
w = xmax - xmin
h = ymax - ymin

然后您需要对它们进行归一化,这意味着将它们作为整个图像的一部分,因此只需将每个值除以其各自的大小从上面的值中得出:

x = xmin / width
y = ymin / height
w = (xmax - xmin) / width
h = (ymax - ymin) / height

这假定原点位于左上角,如果不是这种情况,则必须应用移位因子。

【讨论】:

    【解决方案2】:

    这是一个函数,用于转换值并将它们标准化为图像大小:

    def convert(xmin, ymin, xmax, ymax, img_w, img_h):
        dw = 1./(img_w)
        dh = 1./(img_h)
        x = (xmin + xmax)/2.0 - 1
        y = (ymin + ymax)/2.0 - 1
        w = xmax - xmin
        h = ymax - ymin
        x = x*dw
        w = w*dw
        y = y*dh
        h = h*dh
        return (x,y,w,h)
    

    对于你上面的例子:

    my_xmin = 159
    my_ymin = 15
    my_xmax = 396
    my_ymax = 302
    my_img_w = 410
    my_img_h = 400
    convert(my_xmin, my_ymin, my_xmax, my_ymax, my_img_w, my_img_h)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 2021-10-30
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多