Настройка ограничительной рамки в формате yolo при изменении размера изображения

#python #opencv #yolo

#python #opencv #yolo

Вопрос:

Я пытаюсь изменить размер изображений, но изменение размера изображений также требует от меня изменения значений ограничивающей рамки. Имеет ли это формат yolo x y ширина высота

Когда я изменяю размер изображения определенной ширины и высоты, какова была бы логика преобразования нормализованного значения связанного поля в формате x y Width height в новые значения после изменения размера изображения на temp_width и temp_height в python

Комментарии:

1. scaling_factor_width = newImageSizeWidth/oldImageSizeWidth теперь просто масштабируйте координату x ограничивающего прямоугольника и значение ширины ограничивающего прямоугольника с этим коэффициентом масштабирования. То же самое для scale_factor_height и высоты и координаты y ограничивающей рамки. Если вы хотите использовать вложенные изображения (обрезка), вам нужно будет вычесть новую координату x / y положения вложенного изображения из положения x / y ограничивающей рамки.

Ответ №1:

Формат YOLO действительно представляет собой нормализованные координаты / данные bbox (он же ограничительный прямоугольник).

Здесь есть четкие объяснения, как получить эти данные (а также Pascal VOC).
Ниже вы найдете код для получения этих данных в формате Yolo.
Тогда вы поймете, что до тех пор, пока вы используете масштабированные изображения, вам нечего менять.

Действительно, нормализованные координаты x_center, y_center, box_width и box_height bbox будут масштабироваться соответственно изображениям.

Но если вы их обрезаете, вам нужно будет получить координаты [x_topleft, y_topleft, box_width, box_height] bbox и нормализовать их с учетом размера crop_image.

Предположим, у вас есть ‘bbox’:

 bbox = np.array([x_topleft, y_topleft, box_width, box_height])
       
b_width = bbox[2,]
b_height = bbox[3,]
x_max = bbox[0,]   b_width
y_max = bbox[1,]   b_height

bbox[0,] = ((x_max   bbox[0,]) / 2)  / width
bbox[1,] = ((y_max   bbox[1,]) / 2)  / height
bbox[2,] = bbox[2,] / width
bbox[3,] = bbox[3,] / height
        
bobox = bbox[0,], bbox[1,], bbox[2,], bbox[3,] # normalized x_center, y_center, box_width and box_height