当前位置: 首页 > ds >正文

关键点翻转 数据增强踩坑

目录

关键点翻转逻辑和示例:

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


关键点翻转逻辑和示例:

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")

http://www.xdnf.cn/news/8747.html

相关文章:

  • C++性能相关的部分内容
  • 数据类型与运算符
  • 6.3.1图的广度优先遍历
  • 第一课:医学影像研究的科学思维与问题提出
  • js实现音频的录制
  • Vue 样式不一致问题全面分析与解决方案
  • 专业学习|经济学与管理学常用分析工具详解
  • 【人工智能】微调秘籍:解锁AI大模型的定制化魔法
  • python装饰器的简单理解
  • (2)-玩转Fiddler抓包-再识Fiddler
  • 天地图实景三维数据分享(江苏)
  • 【iOS】内存分区
  • 第2周 PINN核心技术揭秘: 如何用神经网络求解偏微分方程
  • 消息中间件之kafka
  • WSL 下面 Buildroot + QEMU 环境记录一下
  • [特殊字符] 使用增量同步+MQ机制将用户数据同步到Elasticsearch
  • Linux(6)——第一个小程序(进度条)
  • LeetCode 2942.查找包含给定字符的单词:使用库函数完成
  • 台式机安装新的固态硬盘后无显示
  • 【C语言练习】060. 使用指针操作字符串
  • Kotlin全栈工程师转型路径
  • Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置
  • Cesium中根据不同条件设置3D Tiles样式
  • 【VBA 中GetOpenFilename】常用友好的人机交互文件全路径选择模式
  • 计算机视觉与深度学习 | 基于 YOLOv8 + BeautyGAN + CodeFormer + Face Parsing 实现简单的人脸美颜
  • 【来自纳米AI-大模型】ubuntu 24.04 登陆界面分辨率太高,内容显示得特别小 问题解决方案(亲测有效)
  • lua脚本学习笔记1:Vscode添加lua环境_lua基本语法
  • HarmonyOS赋能套件介绍
  • 开篇:MCP理论理解和学习
  • 元组可以比较大小吗?一次返回多个值?编程语言的元组?声明变量一定需要指定类型吗?