rueki
CutMix 실습하기 본문
728x90
반응형
import os
import numpy as np
import random
import cv2
import matplotlib.pyplot as plt
image_path = '../cutmix/data/'
index_len = len(os.listdir(image_path))
image_list = os.listdir(image_path)
image = load_image(image_path, 10)
image_size = image.shape[0]
def load_image(path, index):
image = cv2.imread(os.path.join(path, image_list[index]), cv2.IMREAD_COLOR)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB).astype(np.float32)
image /= 255.0
return image
def cutmix(path,index, imsize):
w, h = imsize, imsize
s = imsize // 2
# 중앙값 랜덤하게 잡기
xc, yc = [int(random.uniform(imsize*0.25, imsize*0.75)) for _ in range(2)] #256 ~ 768
indexes = [index] + [random.randint(0, index) for _ in range(3)]
#검은색 배경의 임의 이미지 생성 (여기다가 이미지들 붙여넣는 방식)
result_img = np.full((imsize, imsize, 3), 1, dtype=np.float32)
for i, index in enumerate(indexes):
image = load_image(path, index)
#top left
if i == 0:
x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc # xmin, ymin, xmax, ymax (large image)
x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h # xmin, ymin, xmax, ymax (small image)
elif i == 1: # top right
x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc
x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h
elif i == 2: # bottom left
x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h)
x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, max(xc, w), min(y2a - y1a, h)
elif i == 3: # bottom right
x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h)
x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h)
result_img[y1a:y2a, x1a:x2a] = image[y1b:y2b, x1b:x2b]
return result_img
test = cutmix(image_path, 10,image_size)
plt.imshow(test)
plt.show()
data : kaggle - wheat detection
728x90
반응형
'python' 카테고리의 다른 글
BOJ 1715. 카드 정렬하기 (Priority Queue) (0) | 2022.09.30 |
---|---|
이미지 경로 전처리 및 레이블링 코드 (0) | 2021.06.06 |
파이썬 UnderScore (0) | 2021.01.07 |
Shallow Copy, Deep copy (0) | 2021.01.05 |
Lambda, reduce, map, filter (0) | 2021.01.05 |
Comments