当前位置:   article > 正文

数据处理——图像处理_np.transpose(2,0,1)

np.transpose(2,0,1)

数据处理——图像处理

引入库

  1. import os
  2. import cv2
  3. import random
  4. import torch
  5. import numpy as np
  6. import pandas as pd
  7. from torch.utils.data import Dataset
  8. from imgaug import augmenters as iaa
  9. from utils.process_labels import encode_labels, decode_labels, decode_color_labels

imgaug是一个图像数据扩增工具

 剪裁图像

  1. def crop_resize_data(image, label=None, image_size=(1024, 384), offset=690):
  2. roi_image = image[offset:, :]
  3. if label is not None:
  4. roi_label = label[offset:, :]
  5. train_image = cv2.resize(roi_image, image_size, interpolation=cv2.INTER_LINEAR) #image做的是线性插值
  6. train_label = cv2.resize(roi_label, image_size, interpolation=cv2.INTER_NEAREST) #label做的是最邻近插值
  7. return train_image, train_label
  8. else:
  9. train_image = cv2.resize(roi_image, image_size, interpolation=cv2.INTER_LINEAR)
  10. return train_image

图像可能会有部分是没用的,比如说,我们想实现车道线分割任务,但是,图像中天空占比很大,这时候需要将天空剪裁掉来节省我们的显存资源。 

 图像扩增

Guassian Noise, Sharpen Augmentation

  1. class ImageAug(object):
  2. image, mask = sample
  3. if np.random.uniform(0,1) > 0.5:
  4. seq = iaa.Sequential([iaa.OneOf([
  5. iaa.AdditiveGaussianNoise(scale=(0, 0.2 * 255)), # 加高斯白噪声
  6. iaa.Sharpen(alpha=(alpha=(0.1,0.3), lightness=(0.7,1.3)), # 锐化
  7. iaa.GaussianBlur(sigma=(o,1.0))])]) # 高斯模糊
  8. image = seq.augment_image(image)
  9. return image, mask

Deformation Augmentation

  1. class DeformAug(object):
  2. def __call__(self, sample):
  3. image, mask = sample
  4. seq = iaa.Sequential([iaa.CropAndPad(percent=(-0.05,0.1))])
  5. seg_to = seq.to_deterministic()
  6. image = seg_to.augment_image(image)
  7. mask = seg_to.augment_image(mask)
  8. return image, mask

Scale Augmentation

  1. class ScaleAug(object):
  2. def __cal__(self, sample):
  3. image, mask = sample
  4. scale = random.uniform(0.7,1.5) # 按照均匀分布在0.7~1.5之间取值
  5. h,w,_ = image.shape
  6. aug_image = image.copy() # 复制一下,不要修改原数据
  7. aug_mask = mask.copy()
  8. aug_image = cv2.resize(aug_image, (int(scale * w), int(scale * h)))
  9. aug_mask = cv2.resize(aug_mask, (int(scale * w, int(scale * h)))
  10. if (scale < 1.0):
  11. new_h, new_w, _ = aug_image.shape
  12. pre_h_pad = int((h - new_h) / 2)
  13. pre_w_pad = int((w - new_w) / 2)
  14. pad_list = [[pre_h_pad, h - new_h - pre_h_pad], [pre_w_pad, w - new_w - pre_w_pad], [0, 0]]
  15. aug_image = np.pad(aug_image, pad_list, mode="constant")
  16. aug_mask = np.pad(aug_mask, pad_list[:2], mode="constant")
  17. if (scale > 1.0):
  18. new_h, new_w, _ = aug_image.shape
  19. pre_h_crop = int ((new_h - h) / 2)
  20. pre_w_crop = int ((new_w - w) / 2)
  21. post_h_crop = h + pre_h_crop
  22. post_w_crop = w + pre_w_crop
  23. aug_image = aug_image[pre_h_crop:post_h_crop, pre_w_crop:post_w_crop]
  24. aug_mask = aug_mask[pre_h_crop:post_h_crop, pre_w_crop:post_w_crop]
  25. return aug_image, aug_mask

向量化

  1. class ToTensor(object):
  2. def __call__(self, sample):
  3. image, mask = sample
  4. image = np.transpose(image, (2,0,1))
  5. image = image.astype(np.float32)
  6. mask = mask.astype(np.long)
  7. return {'image':torch.from_numpy(image.copy()),
  8. 'mask':torch.from_numpy(mask.copy())}

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/823885
推荐阅读
相关标签
  

闽ICP备14008679号