影像語義分割資料增強——imgaug(二)
有一個需求
使用imgaug工具包進行影像分割資料增強
說明:輸入有兩張圖片,分別是RGB圖片和對應的label圖片,然後通過程式碼對這兩張圖片做了 縮放、映象+上下翻轉、旋轉、xy平移、裁剪、旋轉 + 裁剪、高斯平滑的影像增強
兩張輸入圖片:
RGB圖片
對應的label
程式碼如下
import random
import glob
import numpy as np
import imgaug as ia
import imgaug.augmenters as iaa
from imgaug.augmentables.segmaps import SegmentationMapsOnImage
from PIL import Image
class ImageAugmentor(object):
def __init__(self, image_dir=None, segmap_dir=None, image_aug_dir=None, SegmentationClass_aug_dir=None):
self.image_dir = image_dir # 存放原圖的目錄,必須是RGB
self.segmap_dir = segmap_dir # 存放原圖對應的標籤,必須是p模式的圖片
self.image_aug_dir = image_aug_dir
self.SegmentationClass_aug_dir = SegmentationClass_aug_dir
self.image_num = 1
self.seed_set()
def seed_set(self, seed=1):
np.random.seed(seed)
random.seed(seed)
ia.seed(seed)
def array2p_mode(self, alpha_channel):
"""alpha_channel is a binary image."""
assert set(alpha_channel.flatten().tolist()) == {0, 1}, "alpha_channel is a binary image."
alpha_channel[alpha_channel == 1] = 128
h, w = alpha_channel.shape
image_arr = np.zeros((h, w, 3))
image_arr[:, :, 0] = alpha_channel
img = Image.fromarray(np.uint8(image_arr))
img_p = img.convert("P")
return img_p
def augmentor(self, image):
height, width, _ = image.shape
resize = iaa.Sequential([
iaa.Resize({"height": int(height/2), "width": int(width/2)}),
])
fliplr_flipud = iaa.Sequential([
iaa.Fliplr(),
iaa.Flipud(),
])
guassian_blur = iaa.Sequential([
iaa.GaussianBlur(sigma=(1.5, 2.5)),
])
rotate = iaa.Sequential([
iaa.Affine(rotate=(-90, 90))
])
translate = iaa.Sequential([
iaa.Affine(translate_percent=(0.2, 0.5))
])
crop_and_pad = iaa.Sequential([
iaa.CropAndPad(percent=(-0.25, 0), keep_size=False),
])
rotate_and_crop = iaa.Sequential([
iaa.Affine(rotate=45),
iaa.CropAndPad(percent=(-0.25, 0), keep_size=False)
])
ops = [resize, fliplr_flipud, rotate, translate, crop_and_pad, rotate_and_crop, guassian_blur]
# 縮放、映象+上下翻轉、旋轉、xy平移、裁剪、旋轉 + 裁剪、高斯平滑
return ops
def augment_image(self, image_name, segmap_name):
# 1.Load an image.
image = Image.open(image_name)
segmap = Image.open(segmap_name)
name = f"{self.image_num:04d}"
image.save(self.image_aug_dir + name + ".jpg")
segmap.save(self.SegmentationClass_aug_dir + name + ".png")
self.image_num += 1
image = np.array(image)
segmap = SegmentationMapsOnImage(np.array(segmap), shape=image.shape)
# 2. define the ops
ops = self.augmentor(image)
# 3.execute ths ops
for _, op in enumerate(ops):
name = f"{self.image_num:04d}"
print(f"當前增強了{self.image_num:04d}張資料...")
images_aug_i, segmaps_aug_i = op(image=image, segmentation_maps=segmap)
images_aug_i = Image.fromarray(images_aug_i)
images_aug_i.save(self.image_aug_dir + name + ".jpg")
segmaps_aug_i_ = segmaps_aug_i.get_arr()
segmaps_aug_i_ = self.array2p_mode(segmaps_aug_i_)
segmaps_aug_i_.save(self.SegmentationClass_aug_dir + name + ".png")
self.image_num += 1
if __name__ == "__main__":
image_name = "./JPEGImages/0036.jpg"
segmap_name = "./SegmentationClass/0036.png"
image_aug_dir = "./JPEG_AUG/"
SegmentationClass_aug_dir = "./SegmentationClass_AUG/"
image_augmentation = ImageAugmentor(image_aug_dir=image_aug_dir, SegmentationClass_aug_dir=SegmentationClass_aug_dir)
image_augmentation.augment_image(image_name, segmap_name)
實現方法
藉助imgaug工具包實現
引數說明
image_name
segmap_name
image_aug_dir
SegmentationClass_aug_dir
結果展示
原圖增強後的七張圖
標籤增強後的七張圖
相關文章
- 乾貨 | 影像資料增強實戰
- 常用語義分割資料集
- Pixellib語義分割-影像背景替換
- Ai影像分割模型PaddleSeg——自定義資料集處理AI模型
- 影像增強(Image enhancement)
- Oracle11新特性——分割槽功能增強(二)Oracle
- 影像語義分割之特徵整合和結構預測特徵
- transforms模組—PyTorch影像處理與資料增強方法ORMPyTorch
- YOLOv9:在自定義資料上進行影像分割訓練YOLO
- 谷歌開源最新語義影像分割模型DeepLab-v3+谷歌模型
- 機器學習筆記 - Pascal VOC資料集使用FCN語義分割機器學習筆記
- 標註案例分享:自動駕駛影像語義分割丨曼孚科技自動駕駛
- 31-語義分割
- 影像增強演算法總結演算法
- QGis二次開發基礎 -- 柵格影像增強顯示
- 什麼是資料增強?
- Oracle11gr2 審計語句增強(二)Oracle
- 夜間場景缺資料,如何進行語義分割?浙大提出基於GAN的高魯棒夜間語義分割框架框架
- 使用LabVIEW實現基於pytorch的DeepLabv3影像語義分割ViewPyTorch
- Oracle11新特性——分割槽功能增強Oracle
- PostgreSQL10.0preview效能增強-分割槽表效能增強(plan階段加速)SQLView
- Perfectly Clear Workbench for Mac(強大的影像清晰度增強工具)Mac
- 李飛飛等人提出Auto-DeepLab:自動搜尋影像語義分割架構架構
- 案例分享:自動駕駛3D點雲語義分割資料標註自動駕駛3D
- MIGO 增強 提交資料庫後Go資料庫
- java9系列第二篇-資源自動關閉的語法增強Java
- 通過自定義fact增強MCollective推送更新後設資料的靈活性薦
- PostgreSQL11preview-分割槽表增強彙總SQLView
- Oracle11新特性——分割槽功能增強(五)Oracle
- Oracle11新特性——分割槽功能增強(四)Oracle
- Oracle11新特性——分割槽功能增強(三)Oracle
- Oracle11新特性——分割槽功能增強(一)Oracle
- ES6-解構賦值,語義增強,擴充套件運算子賦值套件
- C#處理醫學影像(二):基於Hessian矩陣的醫學影像增強與窗寬窗位C#矩陣
- 【影像分割】基於四叉樹影像分割matlabMatlab
- 自動網路搜尋(NAS)在語義分割上的應用(二)
- Retinex影像增強演算法的優勢分析演算法
- Win8 Metro(C#)數字影像處理--2.62影像對數增強C#