我正在使用微软的CustomVision.ai构建一个自定义视觉应用程序。
我正在使用这个教程:https://learn.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/csharp-tutorial-od
在某一时刻,我需要做到以下几点:
当你在目标检测项目中标记图像时,你需要使用标准化坐标来指定每个标记对象的区域
为此,我需要编写以下代码:
Dictionary<string, double[]> fileToRegionMap = new Dictionary<string, double[]>() {// FileName, Left, Top, Width, Height{"scissors_1", new double[] { 0.4007353, 0.194068655, 0.259803921, 0.6617647 } },{"scissors_2", new double[] { 0.426470578, 0.185898721, 0.172794119, 0.5539216 } },{"scissors_3", new double[] { 0.289215684, 0.259428144, 0.403186262, 0.421568632 } }...
其中,double值是图像中对象的标准化坐标。
我如何从图像中获取这些坐标?有没有可以使用的软件来创建这些坐标并将它们添加到代码中?
回答:
标准化坐标是范围从0.0到1.0(不包括1.0)的坐标。
如果你有一张图像,其坐标范围为
(X = 0..Width, Y = 0..Height)
使用以下公式转换坐标:
double x_normalized = X / Width;double y_normalized = Y / Height;
这假设坐标X
或Y
或Width
或Height
是以double
或float
形式给出的。如果它们是以int
形式给出的,请使用
double x_normalized = (double)X / Width;double y_normalized = (double)Y / Height;
对于图像中对象的宽度或高度也适用同样的方法
double object_width_normalized = object_width / Width;double object_height_normalized = object_height / Height;
注意,如果坐标是以int
形式给出的,通常它们在范围[0..Width - 1, 0..Height - 1
内,因此除法结果将是0.0 <= value < 1.0
。