图像处理 深度增强学习_深度学习预处理图像增强 - CSDN
  • 深度学习图像数据增强data augmentation

    千次阅读 2018-05-04 15:38:09
    本文转自:http://www.cnblogs.com/gongxijun/p/6117588.html在图像深度学习中,为了丰富图像训练集,更好的提取图像特征,泛化模型(防止模型过拟合),一般都会对数据图像进行数据增强,数据增强,常用的方式,...

    本文转自:http://www.cnblogs.com/gongxijun/p/6117588.html

    在图像的深度学习中,为了丰富图像训练集,更好的提取图像特征,泛化模型(防止模型过拟合),一般都会对数据图像进行数据增强,

    数据增强,常用的方式,就是旋转图像,剪切图像,改变图像色差,扭曲图像特征,改变图像尺寸大小,增强图像噪音(一般使用高斯噪音,盐椒噪音)等.

    但是需要注意,不要加入其他图像轮廓的噪音.

      对于常用的图像的数据增强的实现,如下:

    # -*- coding:utf-8 -*-
    """数据增强
       1. 翻转变换 flip
       2. 随机修剪 random crop
       3. 色彩抖动 color jittering
       4. 平移变换 shift
       5. 尺度变换 scale
       6. 对比度变换 contrast
       7. 噪声扰动 noise
       8. 旋转变换/反射变换 Rotation/reflection
       author: XiJun.Gong
       date:2016-11-29
    """
    
    from PIL import Image, ImageEnhance, ImageOps, ImageFile
    import numpy as np
    import random
    import threading, os, time
    import logging
    
    logger = logging.getLogger(__name__)
    ImageFile.LOAD_TRUNCATED_IMAGES = True
    
    
    class DataAugmentation:
        """
        包含数据增强的八种方式
        """
    
    
        def __init__(self):
            pass
    
        @staticmethod
        def openImage(image):
            return Image.open(image, mode="r")
    
        @staticmethod
        def randomRotation(image, mode=Image.BICUBIC):
            """
             对图像进行随机任意角度(0~360度)旋转
            :param mode 邻近插值,双线性插值,双三次B样条插值(default)
            :param image PIL的图像image
            :return: 旋转转之后的图像
            """
            random_angle = np.random.randint(1, 360)
            return image.rotate(random_angle, mode)
    
        @staticmethod
        def randomCrop(image):
            """
            对图像随意剪切,考虑到图像大小范围(68,68),使用一个一个大于(36*36)的窗口进行截图
            :param image: PIL的图像image
            :return: 剪切之后的图像
    
            """
            image_width = image.size[0]
            image_height = image.size[1]
            crop_win_size = np.random.randint(40, 68)
            random_region = (
                (image_width - crop_win_size) >> 1, (image_height - crop_win_size) >> 1, (image_width + crop_win_size) >> 1,
                (image_height + crop_win_size) >> 1)
            return image.crop(random_region)
    
        @staticmethod
        def randomColor(image):
            """
            对图像进行颜色抖动
            :param image: PIL的图像image
            :return: 有颜色色差的图像image
            """
            random_factor = np.random.randint(0, 31) / 10.  # 随机因子
            color_image = ImageEnhance.Color(image).enhance(random_factor)  # 调整图像的饱和度
            random_factor = np.random.randint(10, 21) / 10.  # 随机因子
            brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor)  # 调整图像的亮度
            random_factor = np.random.randint(10, 21) / 10.  # 随机因1子
            contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor)  # 调整图像对比度
            random_factor = np.random.randint(0, 31) / 10.  # 随机因子
            return ImageEnhance.Sharpness(contrast_image).enhance(random_factor)  # 调整图像锐度
    
        @staticmethod
        def randomGaussian(image, mean=0.2, sigma=0.3):
            """
             对图像进行高斯噪声处理
            :param image:
            :return:
            """
    
            def gaussianNoisy(im, mean=0.2, sigma=0.3):
                """
                对图像做高斯噪音处理
                :param im: 单通道图像
                :param mean: 偏移量
                :param sigma: 标准差
                :return:
                """
                for _i in range(len(im)):
                    im[_i] += random.gauss(mean, sigma)
                return im
    
            # 将图像转化成数组
            img = np.asarray(image)
            img.flags.writeable = True  # 将数组改为读写模式
            width, height = img.shape[:2]
            img_r = gaussianNoisy(img[:, :, 0].flatten(), mean, sigma)
            img_g = gaussianNoisy(img[:, :, 1].flatten(), mean, sigma)
            img_b = gaussianNoisy(img[:, :, 2].flatten(), mean, sigma)
            img[:, :, 0] = img_r.reshape([width, height])
            img[:, :, 1] = img_g.reshape([width, height])
            img[:, :, 2] = img_b.reshape([width, height])
            return Image.fromarray(np.uint8(img))
    
        @staticmethod
        def saveImage(image, path):
            image.save(path)
    
    
    def makeDir(path):
        try:
            if not os.path.exists(path):
                if not os.path.isfile(path):
                    # os.mkdir(path)
                    os.makedirs(path)
                return 0
            else:
                return 1
        except Exception, e:
            print str(e)
            return -2
    
    
    def imageOps(func_name, image, des_path, file_name, times=5):
        funcMap = {"randomRotation": DataAugmentation.randomRotation,
                   "randomCrop": DataAugmentation.randomCrop,
                   "randomColor": DataAugmentation.randomColor,
                   "randomGaussian": DataAugmentation.randomGaussian
                   }
        if funcMap.get(func_name) is None:
            logger.error("%s is not exist", func_name)
            return -1
    
        for _i in range(0, times, 1):
            new_image = funcMap[func_name](image)
            DataAugmentation.saveImage(new_image, os.path.join(des_path, func_name + str(_i) + file_name))
    
    
    opsList = {"randomRotation", "randomCrop", "randomColor", "randomGaussian"}
    
    
    def threadOPS(path, new_path):
        """
        多线程处理事务
        :param src_path: 资源文件
        :param des_path: 目的地文件
        :return:
        """
        if os.path.isdir(path):
            img_names = os.listdir(path)
        else:
            img_names = [path]
        for img_name in img_names:
            print img_name
            tmp_img_name = os.path.join(path, img_name)
            if os.path.isdir(tmp_img_name):
                if makeDir(os.path.join(new_path, img_name)) != -1:
                    threadOPS(tmp_img_name, os.path.join(new_path, img_name))
                else:
                    print 'create new dir failure'
                    return -1
                    # os.removedirs(tmp_img_name)
            elif tmp_img_name.split('.')[1] != "DS_Store":
                # 读取文件并进行操作
                image = DataAugmentation.openImage(tmp_img_name)
                threadImage = [0] * 5
                _index = 0
                for ops_name in opsList:
                    threadImage[_index] = threading.Thread(target=imageOps,
                                                           args=(ops_name, image, new_path, img_name,))
                    threadImage[_index].start()
                    _index += 1
                    time.sleep(0.2)
    
    
    if __name__ == '__main__':
        threadOPS("/home/pic-image/train/12306train",
                  "/home/pic-image/train/12306train3")  

    更多数据增强方法:https://github.com/aleju/imgaug


    展开全文
  • 包括旋转、透视变换以及亮度调整等,开源地址:https://github.com/HuiyanWen/pre_pic 有用记得给github点个星,感谢。

    包括旋转、透视变换以及亮度调整等,开源地址:https://github.com/HuiyanWen/pre_pic

    有用记得给github点个星,感谢。

    展开全文
  • 图像数据增强

    2020-07-19 23:30:48
    图像数据增强,包括旋转,颜色变暗,变量,镜像等等,基于python,可进行批量图像处理。保证可用,好用。对于做深度学习特别好用。
  • 图像处理深度学习

    万次阅读 2018-05-05 22:02:57
    第一种 自我激发型 基于图像处理的方法,如图像增强和图像复原,以及曾经很火的超分辨率算法。都是在不增加额外信息的前提下的实现方式。 1. 图像增强 图像增强是图像预处理中非常重要且常用的一种方法,图像...

    针对模糊图像的处理,个人觉得主要分两条路,一种是自我激发型,另外一种属于外部学习型。接下来我们一起学习这两条路的具体方式。

    第一种 自我激发型

      基于图像处理的方法,如图像增强和图像复原,以及曾经很火的超分辨率算法。都是在不增加额外信息的前提下的实现方式。 
       
    1. 图像增强

      图像增强是图像预处理中非常重要且常用的一种方法,图像增强不考虑图像质量下降的原因,只是选择地突出图像中感兴趣的特征,抑制其它不需要的特征,主要目的就是提高图像的视觉效果。先上一张示例图: 
       
      这里写图片描述 
       
      图像增强中常见的几种具体处理方法为:

    1. 直方图均衡

        在图像处理中,图像直方图表示了图像中像素灰度值的分布情况。为使图像变得清晰,增大反差,凸显图像细节,通常希望图像灰度的分布从暗到亮大致均匀。直方图均衡就是把那些直方图分布不均匀的图像(如大部分像素灰度集中分布在某一段)经过一种函数变换,使之成一幅具有均匀灰度分布的新图像,其灰度直方图的动态范围扩大。用于直方均衡化的变换函数不是统一的,它是输入图像直方图的积分,即累积分布函数。

    2. 灰度变换

        灰度变换可使图像动态范围增大,对比度得到扩展,使图像清晰、特征明显,是图像增强的重要手段之一。它主要利用图像的点运算来修正像素灰度,由输入像素点的灰度值确定相应输出像素点的灰度值,可以看作是“从像素到像素”的变换操作,不改变图像内的空间关系。像素灰度级的改变是根据输入图像f(x,y)灰度值和输出图像g(x,y)灰度值之间的转换函数g(x,y)=T[f(x,y)]进行的。 
        灰度变换包含的方法很多,如逆反处理、阈值变换、灰度拉伸、灰度切分、灰度级修正、动态范围调整等。

    3. 图像平滑

        在空间域中进行平滑滤波技术主要用于消除图像中的噪声,主要有邻域平均法、中值滤波法等等。这种局部平均的方法在削弱噪声的同时,常常会带来图像细节信息的损失。 
        邻域平均,也称均值滤波,对于给定的图像f(x,y)中的每个像素点(x,y),它所在邻域S中所有M个像素灰度值平均值为其滤波输出,即用一像素邻域内所有像素的灰度平均值来代替该像素原来的灰度。 
        中值滤波,对于给定像素点(x,y)所在领域S中的n个像素值数值{f1,f2,…,fn},将它们按大小进行有序排列,位于中间位置的那个像素数值称为这n个数值的中值。某像素点中值滤波后的输出等于该像素点邻域中所有像素灰度的中值。中值滤波是一种非线性滤波,运算简单,实现方便,而且能较好的保护边界。

    4. 图像锐化

        采集图像变得模糊的原因往往是图像受到了平均或者积分运算,因此,如果对其进行微分运算,就可以使边缘等细节信息变得清晰。这就是在空间域中的图像锐化处理,其的基本方法是对图像进行微分处理,并且将运算结果与原图像叠加。从频域中来看,锐化或微分运算意味着对高频分量的提升。常见的连续变量的微分运算有一阶的梯度运算、二阶的拉普拉斯算子运算,它们分别对应离散变量的一阶差分和二阶差分运算。

    2. 图像复原

      这里写图片描述 
       
      其目标是对退化(传播过程中的噪声啊,大气扰动啊好多原因)的图像进行处理,尽可能获得未退化的原始图像。如果把退化过程当一个黑匣子(系统H),图片经过这个系统变成了一个较烂的图。这类原因可能是光学系统的像差或离焦、摄像系统与被摄物之间的相对运动、电子或光学系统的噪声和介于摄像系统与被摄像物间的大气湍流等。图像复原常用二种方法。当不知道图像本身的性质时,可以建立退化源的数学模型,然后施行复原算法除去或减少退化源的影响。当有了关于图像本身的先验知识时,可以建立原始图像的模型,然后在观测到的退化图像中通过检测原始图像而复原图像。 
       
    3. 图像超分辨率   
      一张图我们想脑补细节信息好难,但是相似的多幅图我们就能互相脑洞了。所以,我们可以通过一系列相似的低分辨图来共同脑补出一张高清晰图啊,有了这一张犯罪人的脸,我就可以画通缉令了啊。。。 
      超分辨率复原技术的目的就是要在提高图像质量的同时恢复成像系统截止频率之外的信息,重建高于系统分辨率的图像。继续说超分辨,它其实就是根据多幅低质量的图片间的关系以及一些先验知识来重构一个高分辨的图片。示例图如下: 
    这里写图片描述

    第二种 外部学习型

      外部学习型,就如同照葫芦画瓢一样的道理。其算法主要是深度学习中的卷积神经网络,我们在待处理信息量不可扩充的前提下(即模糊的图像本身就未包含场景中的细节信息),可以借助海量的同类数据或相似数据训练一个神经网络,然后让神经网络获得对图像内容进行理解、判断和预测的功能,这时候,再把待处理的模糊图像输入,神经网络就会自动为其添加细节,尽管这种添加仅仅是一种概率层面的预测,并非一定准确。

      本文介绍一种在灰度图像复原成彩色RGB图像方面的代表性工作:《全局和局部图像的联合端到端学习图像自动着色并且同时进行分类》。利用神经网络给黑白图像上色,使其变为彩色图像。稍作解释,黑白图像,实际上只有一个通道的信息,即灰度信息。彩色图像,则为RGB图像(其他颜色空间不一一列举,仅以RGB为例讲解),有三个通道的信息。彩色图像转换为黑白图像极其简单,属于有损压缩数据;反之则很难,因为数据不会凭空增多。

      搭建一个神经网络,给一张黑白图像,然后提供大量与其相同年代的彩色图像作为训练数据(色调比较接近),然后输入黑白图像,人工智能按照之前的训练结果为其上色,输出彩色图像,先来看一张效果图: 
      这里写图片描述

    1. 本文工作 
      •  用户无干预的灰度图像着色方法。 
      •  一个新颖的端到端网络,联合学习图像的全局和局部特征。 
      •  一种利用分类标签提高性能的学习方法。 
      •  基于利用全局特征的风格转换技术。 
      •  通过用户研究和许多不同的例子深入评估模型,包括百年的黑白照片。

    2. 着色框架 
         
        模型框架包括四个主要组件:低级特征提取网络,中级特征提取网络,全局特征提取网络和着色网络。 这些部件都以端对端的方式紧密耦合和训练。 模型的输出是图像的色度,其与亮度融合以形成输出图像。 
                 这里写图片描述

    3. 与另外两个工作对比

      • Gustav Larsson, Michael Maire, and Gregory Shakhnarovich. Learning Representations for Automatic Colorization. In ECCV 2016. 
      •Richard Zhang, Phillip Isola, and Alexei A. Efros. Colorful Image Colorization. In ECCV 2016.

    这里写图片描述

    参考文献:

    网页: 
    http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/extra.html

    代码: 
    https://github.com/satoshiiizuka/siggraph2016_colorization

    论文2:  
    http://richzhang.github.io/colorization/

    在线demo: 
    http://demos.algorithmia.com/colorize-photos/

    展开全文
  • 个人总结知识点 ...3,问:深度学习与逻辑回归的区别 在计算y=wx时,将逻辑回归的函数变成几十个函数的嵌套,然后利用链式求导法则对嵌套的几十个函数进行反向求导,得出损失函数 4,问:过拟合的原...

    个人总结知识点

    1.问:为什么y=wx明明是一个矩阵,而损失函数是一个值

    2,问:支持向量机SVM与逻辑回归的关系

    SVM把逻辑回归的sigmoid函数换成核函数,损失函数由平均交叉熵换成了不同分类的距离间隔

    3,问:深度学习与逻辑回归的区别

    在计算y=wx时,将逻辑回归的函数变成几十个函数的嵌套,然后利用链式求导法则对嵌套的几十个函数进行反向求导,得出损失函数

    4,问:过拟合的原因

    过多的参数

    5,问:深度学习中需要调的参数

    正则化系数,卷积核的权值,学习率等

    6,问:过拟合的解决方法

    1,dropout   2,使用池化(减少了参数)  3,加入L1,L2正则化,批正则化  4,数据增强  5,迁移学习  6,多个神经网络结果平均  7,RNN时,调试阶段提前终止训练  8,对抗训练  9,稀疏编码  10,流型正切

     

    书本知识点总结

    1,关于权值共享的通俗解释

    2,BP反向传播的自动求导的过程

    3.sigmoid函数实现二分类的原理

    4,逻辑回归/深度学习这些的大致工作原理和过程

    5,如何根据预测y和实际y的差别更新参数w

    6,L1,L2正则化的区别

    书本43页 

    7,opencv提取图像边缘的算法

    8,1X1卷积层的作用

    9,反卷积的实质

    实质就是将原矩阵扩大后中间补0,然后对扩大后的矩阵做卷积。

    10,学习率调整方法

    11,VGG16的特征提取部分只使用了3X3的卷积核,以及2X2的池化层

    12,提高检测精度的几种方法

    展开全文
  • 文章目录深度学习图像和视频的应用一、图像/视频处理1. 超分辨率问题2. 图像去噪3. 图像增强3.1 弱光照增强3.2 动态范围增强4. 质量评价二、图像/视频压缩2.1 传统压缩编码框架2.2 基于深度学习图像压缩 一、...
  • 2006年,加拿大多伦多大学教授、机器学习领域的泰斗Geoffrey Hinton和他的学生在《科学》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。...那么,深度学习算法在遥感图像处理领域是否也能发...
  • 收集了大量深度学习项目图像处理领域的代码链接。包括图像识别,图像生成,看图说话等等方向的代码,所有代码均按照所属技术领域建立索引,以便大家查阅使用。 2.1 图像生成 2.1.1 绘画风格到图片的转换:Neural ...
  • 深度学习中的图像处理

    千次阅读 2018-12-03 11:13:27
    大家整理的代码资源库,收集了大量深度学习项目图像处理领域的代码链接。包括图像识别,图像生成,看图说话等等方向的代码,所有代码均按照所属技术领域建立索引,以便大家查阅使用。 2.1 图像生成  2.1.1 绘画...
  • 关于低照度图像增强深度学习论文(AAAI 2020) EEMEFN-Low Light Image Enhancement via Edge Enhanced MultiExposure Fusion Network Problems •现有的方法往往很难从极度暗/亮的图像中复原细节信息; •由于...
  • 基于深度学习的医学图像分割综述

    万次阅读 多人点赞 2019-07-23 16:01:40
    医学图像分割技术的发展不仅影响到医学图像处理中其他相关技术的发展,如可视化、三维重建等,而且在生物医学图像的分析中也占有极其重要的地位。近年来,由于深度学习算法在医学图像分割中的应用, 医学图像分割技术...
  • 图像深度学习中,为了丰富图像训练集,更好的提取图像特征,泛化模型(防止模型过拟合),一般都会对数据图像进行数据增强, 数据增强,常用的方式,就是旋转图像,剪切图像,改变图像色差,扭曲图像特征,改变...
  • 深度学习图像处理)代码库

    千次阅读 2018-05-03 17:27:53
    为大家整理的代码资源库,收集了大量深度学习项目图像处理领域的代码链接。包括图像识别,图像生成,看图说话等等方向的代码,所有代码均按照所属技术领域建立索引,以便大家查阅使用。2.1 图像生成 2.1.1 绘画风格...
  • 深度学习图像处理的应用一览

    千次阅读 2019-09-27 12:00:23
    点击上方“AI算法与图像处理”,选择加"星标"或“置顶”重磅干货,每天 8:25 送达作者:黄浴 「 超级大牛,知乎搜索可知~超多技术干货」编辑:AI算法与图像处理来源...
  • 转载:https://blog.csdn.net/c2a2o2/article/details/77701181 ...包含了多种关于图像处理方面的项目,都有全面的代码,便于大家查阅使用。 1.1 图像生成 1.1.1 绘画风格到图片的转换:Neural Style 1.1.2 图像类比...
  • 图像数据增强方法概述 图像数据准备对神经网络与卷积神经网络模型训练有重要影响,当样本空间不够或者样本数量不足的时候会严重影响训练...1.使用标准化对图像进行图像增强 深度学习训练-详解图像数据标准化与...
  • 公众号关注 “ML_NLP” ...近年以来,随着深度学习图像识别领域取得巨大突破(以AI之父Geoffry Hinton在2012年提出的高精度AlexNet图像识别网络为代表),掀起了以神经网络为基础的深度学习研究热潮。目前为止,图
  • 深度强化学习1——强化学习深度强化学习

    万次阅读 多人点赞 2019-06-20 15:20:31
    从事深度强化学习有一段时间了,整理了网上的一些资料,写几篇博客作为知识的梳理和总结。 开讲前,先给大家看个深度强化学习的例子,下面是深度学习cnn和强化学习结合玩吃豆人的游戏 看图像我们会发现吃豆人会...
  • 数据增强的定义:明晰数据增强技术的原理及其在深度学习中的意义。 数据增强的方法:学会使用图像处理方法实现对于数据集中的样本扩充。 图像源扩充方法:学会通过与训练或扩充图像源的方式实现训练数据...
1 2 3 4 5 ... 20
收藏数 32,672
精华内容 13,068
关键字:

图像处理 深度增强学习