w-haiS 2023-12-30 15:45 采纳率: 64.3%
浏览 3
已结题

albumentations.Rotate导致关键点丢失?

我现在一张图中有三个关键点,如下图origin image所示,

img

我的关键点标注信息为三个点[1,2,3],每个关键点分别对应的名称为[23_top, 23_left, 23_down];
我现在试图使用数据增强,考虑使用Rotate进行图片小幅度旋转,增强代码如下

return A.Compose(
        [
            A.Sequential([
                # A.Rotate(limit=5, p=1),
                A.RandomScale(scale_limit=0.1, interpolation=1, always_apply=False, p=0.5),
                A.GaussianBlur(blur_limit=3, p=0.5),
                A.GaussNoise(p=0.5),
                A.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3, brightness_by_max=True,
                                           always_apply=False, p=0.5),  # Random change of brightness & contrast
            ], p=1)
        ],
        keypoint_params=A.KeypointParams(format='xy'),
        bbox_params=A.BboxParams(format='pascal_voc', label_fields=['bboxes_labels'])
      )

但是使用该增强方法导致关键点的丢失,由原先的三个点变成了2个点,这种关键点的丢失会导致最后获取错误的名称进行解析,
变换后的效果如图所示,我应该怎么做,可以通过数据增强之后仍然保持三个点,最终的目的是保证我解析关键点时,不会出现名字错误匹配的情况?

img

  • 写回答

2条回答 默认 最新

  • 爱编程的鱼 2023-12-30 16:42
    关注

    在进行图像旋转时,关键点的坐标也需要相应地进行旋转。albumentations 库提供了 keypoint_params 来设置如何处理关键点。在你的代码中,你已经将 keypoint_params 设置为 A.KeypointParams(format='xy'),这是一种常见的设置,表示关键点的坐标以 'x' 和 'y' 的形式提供。

    A.Rotate 中,你可以设置 keypoint_scale 参数,该参数定义了关键点的旋转相对于图像旋转的缩放比例。这样,当你旋转图像时,关键点的坐标也会按照一定比例进行旋转。

    下面是你可以尝试的修改:

    return A.Compose(
        [
            A.Sequential([
                A.Rotate(limit=5, p=1, keypoint_scale=(0.8, 1.2)),
                A.RandomScale(scale_limit=0.1, interpolation=1, always_apply=False, p=0.5),
                A.GaussianBlur(blur_limit=3, p=0.5),
                A.GaussNoise(p=0.5),
                A.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3, brightness_by_max=True,
                                           always_apply=False, p=0.5),  # Random change of brightness & contrast
            ], p=1)
        ],
        keypoint_params=A.KeypointParams(format='xy'),
        bbox_params=A.BboxParams(format='pascal_voc', label_fields=['bboxes_labels'])
    )
    

    在这里,keypoint_scale=(0.8, 1.2) 设置了关键点旋转的缩放比例范围,你可以根据需要进行调整。这样,关键点在图像旋转时也会做相应的调整,不容易丢失。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 12月30日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)