【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)

简介: 【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)

需要源码或运行有问题请点赞关注收藏后评论区留言私信~~~

一、imgaug简介

imguag使一个用于机器学习实验中图像增强的Python依赖库,支持Python2.7和Python3.4以上的版本,它支持多种图像增强技术,并允许轻松地组合这些技术,具有简单但功能强大的随机界面,支持关键点(Keypoint)和标准框(Bounding Box)一起变换,并在后台进程中提供增强功能以提高性能

在Pycharm集成开发环境中直接install即可

二、数据增强库的基本使用

单样本数据增强方法包括空间几何变换以及颜色变换,其中,几何变换的操作主要有翻转,切割,旋转,缩放变形,仿射,颜色变换的操作主要有高斯噪声,模糊,HSV对比度变换,随机擦除法,锐化与浮雕等等,图片处理结果如下

代码如下

import cv2
import  numpy as np
from imgaug import  augmenters as iaa
seq=iaa.Sequential([
    iaa.Crop(px=(0,30)),
    iaa.Fliplr(0.7),
    iaa.GaussianBlur(sigma=(0,2.0)),
    iaa.Dropout(0.3),
    iaa.Grayscale(0.9),
    iaa.Emboss(0.9),
    iaa.EdgeDetect(0.5),
    iaa.AdditiveGaussianNoise(loc=0,scale=50),
    iaa.Multiply(2),
    iaa.contrast.LinearContrast(2),
    iaa.Affine(scale=0.5,translate_percent=-0.2,rotate=1,shear=90,order=1,cval=1,mode='constant')
])
imglist=[]
img=cv2.imread(r'C:\Users\Administrator\Desktop\qq.jpg')
cv2.imshow('img',img)
cv2.waitKey()
imglist.append(img)
images_aug=seq.augment_images(imglist)
#image=np.asarray(images_aug)
#cv2.imshow('image',image)
cv2.imwrite(r"
g",images_aug[0])

三、关键点变换

imgaug库支持在图像变换的同时变换图像中的关键点,关键点变换结果如下图所示 分为以下几步

1:导入第三方库

2:导入一张原图

3:定义四个关键点

4:定义一个变换序列

5:取出该图和关键点

6:打印坐标

7:将关键点画在图片上

代码如下

import imgaug as ia
from imgaug import augmenters as iaa
import matplotlib.pyplot as plt
image=ia.data.quokka(size=(256,256))
# 定义4个关键点
keypoints=ia.KeypointsOnImage([
    ia.Keypoint(x=65, y=100),
    ia.Keypoint(x=75, y=200),
    ia.Keypoint(x=100, y=100),
    ia.Keypoint(x=200, y=80)
], shape=image.shape)
# 定义一个变换序列
seq=iaa.Sequential([
    iaa.Multiply((1.2, 1.5)), # 改变亮度,不影响关键点
    iaa.Ae=(0.5, 0.7)
    ) # 旋转10度然后缩放,会影响关键点
])
先变换图像然后变换关键点,这样可以保证两次的变换完全相同。
# 如果调用次函数,需要在每次batch的时候都调用一次,否则不同的batch执行相同的变换。
seq_seq_det.augment_images([image])[0]
keypoints_aug = seq_det.augment_keypoints([keypoints])[0]
# print coordinates before/after augmentation (see below)
# use after.x_int and after.y_int to get rounded integer coordinates
for i in range(len(keypoints.keypoints)):
    before = keypoints.keypoints[i]
    after = keypoints_aug.keypoints[i]
    print("Keypoint %d: (%.8f, %.8f) -> (%.8f, %.8f)" % (
        i, before.x, before.y, after.x, after.y)
    )
# 将关键点画在图片上。
# image with keypoints before/after augmentation (shown below)
image_before = keypoints.draw_on_image(image, size=7)
image_after = keypoints_aug.draw_on_image(image_aug, size=7)
fig, axes = plt.subplots(2, 1, figsize=(20, 15))
plt.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8, hspace=0.3, wspace=0.0)
axes[0].set_title("image before")
axes[0].imshow(image_before)
axes[1].set_title("image after augmentation")
axes[1].imshow(image_after)
plt.show()

四、标注框(Bounding Box)变换

imgaug在图像变换的同时变换图像中的Bounding Box

1:将Bounding Box封装成对象

2:对Bounding Box进行变换

3:将Bounding Box画在图像上

4:移动Bounding Box的位置上,将变换后的Bounding Box映射到图像上,计算Bounding Box的IoU

变换结果如下

 

步骤分为以下几步

1:导入第三方库

2:导入quokka的一张原图

3:定义两个Bounding Box

4:定义一个变换序列

5:变换图像和bounding box

6:打印坐标

7:增强前后的图像显示

部分代码如下

import imgaug as ia
from imgaug import augmenters as iaa
import matplotlib.pyplot as plt
ia.seed(1)
image = ia.data.quokka(size=(256, 256))
# 定义2个bounding box
bbs = ia.BoundingBoxesOnImage([
    ia.BoundingBox(x1=65, y1=100, x2=200, y2=150),
    ia.Bound
seq = iaa.Sequential([
    iaa.Multiply((1.2, 1.5)), # 改变亮度, 不影响bounding box
    iaa.Affine(
        translate_px={"x": 40, "y": 60},
        scale=(0.5, 0.7)
    ) # 平移后缩放,会影响bounding box
])
# 固定变换
seq_det = seq.to_deterministic()
# 变换图像和bounding box
image_aug = seq_det.augment_images([image])[0]
bbs_aug = seq_
# 打印坐标
# use .x1_int, .y_int, ... to get integer coordinates
for i in range(len(bbs.bounding_boxes)):
    before = bbs.bounding_boxes[i]
    after = bbs_aug.bounding_boxes[i]
    print("BB %d: (%.4f, %.4f, %.4f, %.4f) -> (%.4f, %.4f, %.4f, %.4f)" % (
        i,
        before.x1, before.y1, before.x2, before.y2,
        after.x1, after.y1, after.x2, after.y2)
    )
# 输出
# BB 0: (65.0000, 100.0000, 200.0000, 150.0000) -> (130.7524, 171.3311, 210.1272, 200.7291)
# BB 1: (150.0000, 80.0000, 200.0000, 130.0000) -> (180.7291, 159.5718, 210.1272, 188.9699)
# image with BBs before/after augmentation (shown below)
image_before = bbs.draw_on_image(image, thickness=2)
image_after = bbs_aug.draw_on_image(image_aug, thickness=2, color=[0, 0, 255])
fig, axes = plt.subplots(2, 1, figsize=(20, 15))
plt.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8, hspace=0.3, wspace=0.0)
axes[0].set_title("image before")
axes[0].imshow(image_before)
axes[1].set_title("image after augmentation")
axes[1].imshow(image_after)
plt.show()

创作不易 觉得有帮助请点赞关注收藏~~~

目录
打赏
0
0
0
0
140
分享
相关文章
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
70 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
125 3
|
5月前
|
用python进行视频剪辑源码
这篇文章提供了一个使用Python进行视频剪辑的源码示例,通过结合moviepy和pydub库来实现视频的区间切割和音频合并。
124 2
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
226 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
|
4月前
|
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
174 7
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
191 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
169 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
118 0
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)

热门文章

最新文章