0

当我使用“albumentations”时,我将“min_visibility”设置为参数之一。但是,在我下面的示例代码中,仍然存在一个边界框 (Pos2),它与原始大小相比只有 0.223 倍,即使 min_visibility 设置为 0.3。

似乎在每个步骤(A.CenterCrop,A.Rotate)中评估了“min_visibility”的面积变化。但不评估端到端步骤 (A.CenterCrop + A.Rotate) 的变化。

如果有人好心地说明这种现象的一些原因,我将不胜感激。

import cv2
import albumentations as A
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

# prepare sample image and bboxes
image = np.ones((3600, 5500, 3)) * 255
bboxes = [[1300, 1500, 2200, 2500, 'Pos1'], [3500, 500, 4200, 1300, 'Pos2']]

# calc original area
areas = {}
for bbox in bboxes:
    areas[bbox[-1]] = (bbox[3]- bbox[1]) * (bbox[2] - bbox[0])

# augumentations
transforms = A.Compose([
                        A.CenterCrop(width=2000, height=3000, p=1),
                        A.Rotate(limit=[90,90], p=1, border_mode=cv2.BORDER_CONSTANT, value=(255,255,255)),
], bbox_params=A.BboxParams(format='pascal_voc', min_visibility=0.3))

transformed = transforms(image=image, bboxes=bboxes)

new_image = transformed["image"]
new_bboxes = transformed["bboxes"]

# check transformed area
new_areas={}
for bbox in new_bboxes:
    new_areas[bbox[-1]] = (bbox[3]- bbox[1]) * (bbox[2] - bbox[0])

# show ratio of area
for key, val in new_areas.items():
    print(f"{key} area ratio: {val/ areas[key] : .3f}")

环境

  • 专辑版本:1.1.0
  • Python版本:3.7.12
  • 操作系统:Linux(谷歌 Colab)
4

0 回答 0