图像数据增强方式及其实现代码

本文探讨了图像数据增强在机器学习中的应用,包括水平和垂直翻转、旋转、平移、裁剪、对比度与亮度调整以及添加高斯噪声等方法。通过使用opencv和numpy库,详细展示了各种增强技术的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习随笔-记录自己的学习之路

简介:图像数据增强通常有以下几种方式:图像水平翻转、垂直翻转、平移、旋转、亮度调整、加噪声。本文利用opencv和numpy实现了以上数据增强方法,代码如下

  • 水平翻转
def horizon_flip(img):
    '''
    图像水平翻转
    :param img:
    :return:水平翻转后的图像
    '''
    return img[:, ::-1]
  • 垂直翻转
def vertical_flip(img):
    '''
    图像垂直翻转
    :param img:
    :return:
    '''
    return img[::-1]
  • 旋转
    利用cv2.getRotationMatrix2D获取旋转矩阵(坐标变换),和下图所学的旋转坐标变换矩阵不太一样,因为下图的旋转坐标计算公式是按同一坐标点旋转坐标系计算,但是旋转图像最后是要同统一一个图像坐标系,即图像左上角为原点建立坐标系。
    在这里插入图片描述
    在这里插入图片描述
def rotate(img, limit_up=10, limit_down=-10):
    '''
   
### 图像分割中的数据增强代码实现 在深度学习领域,尤其是在图像分割任务中,数据增强是一种有效的方法来增加训练集的多样性,从而提高模型的泛化能力。以下是基于 Python 的几种常用数据增强方法以及其实现方式。 #### 常见的数据增强技术 常见的数据增强操作包括旋转、翻转、缩放、裁剪、颜色变换等。这些操作可以通过多种库完成,例如 OpenCV 和 Albumentations 等[^1]。 #### 使用 Albumentations 实现数据增强 Albumentations 是一个专门用于计算机视觉任务的数据增强库,支持各种复杂的增强操作,并且可以轻松应用于图像分割任务。 以下是一个简单的例子,展示如何使用 Albumentations 对图像和对应的掩码(mask)进行同步增强: ```python import albumentations as A from PIL import Image import numpy as np # 定义增强管道 transform = A.Compose([ A.RandomRotate90(p=0.5), A.Flip(p=0.5), A.OneOf([ A.GaussNoise(var_limit=(10, 50), p=0.3), A.MotionBlur(blur_limit=7, p=0.3) ], p=0.5), A.Resize(256, 256, always_apply=True), ], additional_targets={'mask': 'image'}) # 加载图像和掩码 image = np.array(Image.open('path_to_image.jpg')) mask = np.array(Image.open('path_to_mask.png')) # 应用增强 augmented = transform(image=image, mask=mask) # 获取增强后的图像和掩码 enhanced_image = augmented['image'] enhanced_mask = augmented['mask'] # 显示结果 Image.fromarray(enhanced_image).show() Image.fromarray(enhanced_mask).show() ``` 上述代码展示了如何通过定义一系列随机增强操作来处理输入图像及其对应掩码。`additional_targets` 参数确保了掩码也会受到相同的转换。 #### 自定义增强逻辑 如果需要更灵活的控制,也可以自定义增强函数。例如,在 PyTorch 中加载数据时应用增强操作: ```python import torch from torchvision import transforms class CustomDataset(torch.utils.data.Dataset): def __init__(self, image_paths, mask_paths, augment=None): self.image_paths = image_paths self.mask_paths = mask_paths self.augment = augment def __getitem__(self, index): image = Image.open(self.image_paths[index]).convert('RGB') mask = Image.open(self.mask_paths[index]) if self.augment is not None: transformed = self.augment(image=np.array(image), mask=np.array(mask)) image = transformed['image'] mask = transformed['mask'] return image, mask def __len__(self): return len(self.image_paths) # 创建数据集实例 dataset = CustomDataset( image_paths=['path_to_images/*.jpg'], mask_paths=['path_to_masks/*.png'], augment=transform ) ``` 此代码片段说明了如何将 Albumentations 集成到自定义数据集中,以便在每次迭代期间动态执行增强。 #### 总结 随着深度学习的发展,图像分割的任务已经取得了显著进展[^2]。为了进一步提升性能,合理利用数据增强策略至关重要。以上介绍了两种常见的方式——借助专用库(如 Albumentations)或者手动编写增强逻辑,均能有效地扩展训练样本的空间分布特性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值