图像增强处理Python程序

Posted 鲁棒最小二乘支持向量机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像增强处理Python程序相关的知识,希望对你有一定的参考价值。

用于图像数据增强处理,图像分割、显著性目标检测等计算机视觉任务可用

随机裁剪和翻转图像函数

def random_crop_flip(inp_img, gt_img):
    """
    随机裁剪和翻转图像
    :param inp_img:一个 HxWxC 输入Image图像
    :param gt_img:一个 HxW 输入GT图像
    :return:随机裁剪和翻转的图像
    """
    h, w = gt_img.shape

    rand_h = np.random.randint(h/8)  # / 除
    rand_w = np.random.randint(w/8)
    offset_h = 0 if rand_h == 0 else np.random.randint(rand_h)
    offset_w = 0 if rand_w == 0 else np.random.randint(rand_w)
    p0, p1, p2, p3 = offset_h, h+offset_h-rand_h, offset_w, w+offset_w-rand_w

    rand_flip = np.random.randint(10)  # 返回一个随机整数
    if rand_flip >= 5:
        inp_img = inp_img[::, ::-1, ::]  # [::-1] 反向排序 [:-1] 从位置0到-1之前的数
        gt_img = gt_img[::, ::-1]

    return inp_img[p0:p1, p2:p3], gt_img[p0:p1, p2:p3]

随机旋转图像函数

def random_rotate(inp_img, gt_img, max_angle=25):
    """
    在+max_angle到-max_angle角度内随机旋转图像
    旋转max_angle角度
    :param inp_img:一个 HxWxC 输入图像
    :param gt_img:一个 HxW 输入GT图像
    :param max_angle:图像可以在任意方向旋转的最大角度
    :return:随机旋转的图像
    """
    # angle = np.random.randint(-max_angle, max_angle) # 返回一个随机角度
    angle = max_angle # 旋转max_angle角度
    h, w = gt_img.shape
    center = (w / 2, h / 2)

    M = cv2.getRotationMatrix2D(center, angle, 1.0)  # 给定一个旋转中心点的坐标、旋转角度和缩放因子,返回一个仿射变换矩阵 M
    cos = np.abs(M[0, 0])
    sin = np.abs(M[0, 1])

    #  计算图像的新尺寸并调整旋转矩阵
    new_w = int((h * sin) + (w * cos))
    new_h = int((h * cos) + (w * sin))
    M[0, 2] += (new_w / 2) - center[0]
    M[1, 2] += (new_h / 2) - center[1]

    return cv2.warpAffine(inp_img, M, (new_w, new_h)), cv2.warpAffine(gt_img, M, (new_w, new_h))

随机亮度函数

def random_brightness(inp_img):
    """
    随机扰动输入图像的亮度
    :param inp_img:一个 HxWxC 输入图像
    :return:亮度随机扰动的图像
    """
    contrast = np.random.rand(1) + 0.5  # 返回一个随机数,随机数位于[0, 1)中
    light = np.random.randint(-20, 20)
    inp_img = contrast * inp_img + light

    return np.clip(inp_img, 0, 255)  # np.clip 将一个nd.array的值限制在给定的上下界, 如果元素值小于下界则将值改为下界值a_min, 同理如果大于上界,则将值改为上界值a_max

旋转图像裁剪边缘

def random_rotate_lossy(inp_img, gt_img, max_angle):
    """
    在+max_angle到-max_angle角度内随机旋转图像
    旋转max_angle角度
    :param inp_img:一个 HxWxC 输入图像
    :param gt_img:一个 HxW 输入图像
    :param max_angle:图像可以在任意方向旋转的最大角度
    :return:随机旋转的图像
    """
    # angle = np.random.randint(-max_angle, max_angle) # 在+max_angle到-max_angle角度内随机旋转图像
    angle = max_angle # 旋转max_angle角度
    h, w = gt_img.shape
    center = (w / 2, h / 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    return cv2.warpAffine(inp_img, M, (w, h)), cv2.warpAffine(gt_img, M, (w, h))

本文希望对大家有帮助,当然上文若有不妥之处,欢迎指正。

分享决定高度,学习拉开差距

以上是关于图像增强处理Python程序的主要内容,如果未能解决你的问题,请参考以下文章

一些知识点

scala-协变逆变上界下界

有上下界的网络流1-无源汇带上下界网络流SGU194

scala-协变逆变上界下界

Scala的协变covariant(+),逆变contravariant(-),上界(<:),下界(;:)

Scala的协变covariant(+),逆变contravariant(-),上界(<:),下界(;:)