关键点翻转 数据增强踩坑

目录

关键点翻转逻辑和示例:

下面是翻转增强的例子,不是真实情况


关键点翻转逻辑和示例:

1. 图像左右翻转

2. X 坐标翻转:x' = image_width - 1 - x

3. 对称结构(如左眼、右眼),要做索引重排。

镜像映射表 (mirror_mapping):

这个数组定义了翻转后关键点的新顺序。

对于常见的 68 点或 5 点人脸标注,有固定的映射表,可以根据你使用的模型进行设置。

下面是翻转增强的例子,不是真实情况

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 示例人脸关键点(以 68 点为例,假设已对齐到图片上)
# 注意:这些点是假设的测试用数据
landmarks = np.array([
    [30, 50], [35, 48], [40, 47], [45, 48], [50, 50],  # 鼻子线中点示意
    [20, 40], [25, 38], [55, 38], [60, 40],            # 左右眼角示意
    [28, 60], [32, 62], [48, 62], [52, 60],            # 嘴角示意
])

# 显示原始图像和关键点
def show_image_with_landmarks(img, landmarks, title="Image"):
    plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    plt.scatter(landmarks[:, 0], landmarks[:, 1], c='r')
    plt.title(title)
    plt.axis('off')
    plt.show()

# 创建一个示例图像(白底+假人脸框)
img = np.full((100, 80, 3), 255, dtype=np.uint8)
cv2.rectangle(img, (10, 30), (70, 80), (200, 200, 200), 2)

# 1. 水平翻转图像
flipped_img = cv2.flip(img, 1)
h, w = img.shape[:2]

# 2. 翻转关键点 x 坐标(w - 1 - x)
flipped_landmarks = landmarks.copy()
flipped_landmarks[:, 0] = w - 1 - landmarks[:, 0]

# 3. 调整左右对称点的顺序(关键)
# 例如对于68点模型,要将左眼和右眼、左嘴角和右嘴角等对调
# 示例中我们假设第5和第0对调,6和3对调,7和2对调,等等(按你模型具体定义调整)
mirror_mapping = [4, 3, 2, 1, 0, 8, 7, 6, 5, 13, 12, 11, 10, 9]  # index映射(这里只处理了14个点)
flipped_landmarks = flipped_landmarks[mirror_mapping]

# 显示原图和翻转图
show_image_with_landmarks(img, landmarks, "Original")
show_image_with_landmarks(flipped_img, flipped_landmarks, "Flipped")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值