Files
2026-07-13 12:46:08 +08:00

109 lines
3.3 KiB
Python

from __future__ import print_function, division
import cv2
import numpy as np
from skimage import data
import imgaug as ia
from imgaug import augmenters as iaa
TIME_PER_STEP = 20000
NB_AUGS_PER_IMAGE = 10
def main():
image = data.astronaut()
image = ia.imresize_single_image(image, (64, 64))
keypoints_on_image = ia.KeypointsOnImage([ia.Keypoint(x=10, y=10)], shape=image.shape)
images_arr = np.array([image for _ in range(NB_AUGS_PER_IMAGE)])
images_list = [image for _ in range(NB_AUGS_PER_IMAGE)]
keypoints_on_images = [keypoints_on_image.deepcopy() for _ in range(NB_AUGS_PER_IMAGE)]
print("image shape:", image.shape)
print("Press ENTER or wait %d ms to proceed to the next image." % (TIME_PER_STEP,))
children = [
iaa.CoarseDropout(p=0.5, size_percent=0.05),
iaa.AdditiveGaussianNoise(scale=0.1*255)
]
n = [
None,
0,
1,
len(children),
len(children)+1,
(1, 1),
(1, len(children)),
(1, len(children)+1),
(1, None)
]
cv2.namedWindow("aug", cv2.WINDOW_NORMAL)
cv2.resizeWindow("aug", 64*NB_AUGS_PER_IMAGE, (2+4+4)*64)
rows = []
for ni in n:
aug = iaa.SomeOf(ni, children, random_order=False)
rows.append(aug.augment_images(images_arr))
grid = to_grid(rows, None)
cv2.imshow("aug", grid[..., ::-1]) # here with rgb2bgr
cv2.waitKey(TIME_PER_STEP)
for ni in n:
print("------------------------")
print("-- %s" % (str(ni),))
print("------------------------")
aug = iaa.SomeOf(ni, children, random_order=False)
aug_ro = iaa.SomeOf(ni, children, random_order=True)
aug_det = aug.to_deterministic()
aug_ro_det = aug_ro.to_deterministic()
aug_kps = []
aug_kps.extend([aug_det.augment_keypoints(keypoints_on_images)] * 4)
aug_kps.extend([aug_ro_det.augment_keypoints(keypoints_on_images)] * 4)
aug_rows = []
aug_rows.append(images_arr)
aug_rows.append(images_list)
aug_rows.append(aug_det.augment_images(images_arr))
aug_rows.append(aug_det.augment_images(images_arr))
aug_rows.append(aug_det.augment_images(images_list))
aug_rows.append(aug_det.augment_images(images_list))
aug_rows.append(aug_ro_det.augment_images(images_arr))
aug_rows.append(aug_ro_det.augment_images(images_arr))
aug_rows.append(aug_ro_det.augment_images(images_list))
aug_rows.append(aug_ro_det.augment_images(images_list))
grid = to_grid(aug_rows, aug_kps)
title = "n=%s" % (str(ni),)
grid = ia.draw_text(grid, x=5, y=5, text=title)
cv2.imshow("aug", grid[..., ::-1]) # here with rgb2bgr
cv2.waitKey(TIME_PER_STEP)
# TODO could be replaced by imgaug.draw_grid()?
def to_grid(rows, rows_kps):
if rows_kps is None:
rows = [np.hstack(list(row)) for row in rows]
return np.vstack(rows)
else:
rows_rendered = []
for row, row_kps in zip(rows, rows_kps):
row_with_kps = []
for i in range(len(row)):
img = row[i]
img_kps = row_kps[i].draw_on_image(img)
row_with_kps.append(img_kps)
rows_rendered.append(np.hstack(row_with_kps))
return np.vstack(rows_rendered)
if __name__ == "__main__":
main()