具有固定裁剪和旋转角度参数的图像数据集增强

数据挖掘 Python 数据 图像分类 数据增强
2022-02-12 23:41:48

我有一个总共 170 张图像的数据集。每个图像我想创建 36 个这样的图像。

通过从图像的顶部和左侧裁剪 5%,从左上角裁剪图像。然后,新的图像被缩小到原来的大小188x188这种裁剪方法也可以从其他三个角落完成。同样的事情可以用 10% 的作物来完成。这导致除了原始图像之外还有 8 个图像。之后,这 9 个图像分别旋转了 0、90、180 和 270 度。因此,从每个输入图像中导出 36 个合成图像。

我需要这个数据集扩充的 python 代码。

1个回答

如果您需要使用 Python 处理图像,首选库是PIL在这里,我展示了一个函数来进行您已划定的修改。此代码不会管理多个文件,或者如何命名转换后的文件。但它确实显示了如何以您要求的方式修改图像。

代码:

from PIL import Image

def modify_image(im, crop_corner=None, crop_percent=5, rotate=0):
    """
    Crop and rotate an image

    :param im: base image 
    :param crop_corner: crop corner 0-3 clockwise from top left 
    :param crop_percent: crop percentage of size 
    :param rotate: rotate degrees (rotate after crop) 
    :return: a modified image 
    """
    x, y = im.size
    if crop_corner is not None:
        crop_x, crop_y = [int(i * crop_percent / 100.0) for i in (x, y)]
        size_x = x - crop_x
        size_y = y - crop_y
        if crop_corner in (1, 2):
            crop_x = 0
        if crop_corner in (2, 3):
            crop_y = 0
        im = im.crop((crop_x, crop_y, crop_x + size_x-1, crop_y + size_y-1))
        im = im.resize((x, y), Image.BICUBIC)

    im = im.rotate(rotate, expand=True)
    return im

测试代码:

test_image = Image.open('test_image.png')
new_image = modify_image(test_image, rotate=90)
new_image.show()

要保存图像,请参阅(文档