文档章节

如何利用deeplearning4j中datavec对图像进行处理

 冷血狂魔
发布于 09/22 21:25
字数 674
阅读 26
收藏 1

一、导读

    众所周知图像是有红绿蓝三种颜色堆叠而成,利用deeplearning对图像处理,必须把图像转化为张量,每一张图片由有三维张量组成,三维分别是[depth、height、width],直观来讲,就是用三个矩阵堆叠起来,每一个矩阵代表一个通道,如下图。有时候需要对图片进行旋转、缩放、裁剪、缩小填充等等复杂的操作,没有一个好用的工具,整个操作过程是非常繁琐的。今天我们就来聊一聊DL4J的datavec对图像的处理。

                                     

二、datavec-data-image代码架构

    datavec-data-image是dl4j基于opencv封装的图像处理库,可以非常方便的把图片处理为张量。代码分三个重要部分,loader(图片加载器)、transform(转化器)。

    1、loader:图片加载器,主要用于将图片加载并转化为张量。整个类结构如下图

 

2、transform转化器,主要用于对图片张量的旋转、缩放、裁剪等操作,这里列出几个比较重要的转化器。

    ResizeImageTransform:缩放图片

    FlipImageTransform:翻转图片,例如上线左右颠倒

    CropImageTransform:裁剪图片

    BoxImageTransform:将图片固定到一个固定大小,如果图片大于该范围,则裁剪,如果小于该范围,则用0填充

    PipelineImageTransform:链式转化器,可以把图像经过一个流水线进行处理,例如:先缩放、在旋转、在翻转等等

    RotateImageTransform:旋转图片,例如旋转30、60等角度

三、代码示例

    1、NativeImageLoader读取图片,转为4维张量,这里之所以是四维,是因为加了minibatch维,如果只读取一张图片,minibatch维度为1

NativeImageLoader originalLoad = new NativeImageLoader(112, 112, 3);
INDArray image = loader.asMatrix(new File("/root/1.jpg"));

    2、上下左右颠倒

 NativeImageLoader Labelloader = new NativeImageLoader(112, 112, 3,new FlipImageTransform(-1));//上下,左右颠倒

    3、缩放图片

NativeImageLoader smallLoader = new NativeImageLoader(112, 112, 3, new ResizeImageTransform(80, 80));

    4、旋转图片,60度、90度、120度

NativeImageLoader loader60 = new NativeImageLoader(112, 112, 3,new RotateImageTransform(60)); 
NativeImageLoader loader90 = new NativeImageLoader(112, 112, 3,new RotateImageTransform(90)); 
NativeImageLoader loader120 = new NativeImageLoader(112, 112, 3,new RotateImageTransform(120));

    5、链式处理,先旋转60度,在固定到224*224的中心

NativeImageLoader pipeline = new NativeImageLoader(112, 112, 3,new PipelineImageTransform(new RotateImageTransform(60),new BoxImageTransform(224,224))  );
		

 

快乐源于分享。

   此博客乃作者原创, 转载请注明出处

© 著作权归作者所有

粉丝 113
博文 51
码字总数 62504
作品 0
杭州
程序员
私信 提问
Java 工程师快速入门深度学习,就从 Deeplearning4j 开始

作者:万宫玺 随着机器学习、深度学习为主要代表的人工智能技术的逐渐成熟,越来越多的 AI 产品得到了真正的落地。无论是以语音识别和自然语言处理为基础的个人助理软件,还是以人脸识别为基...

GitChat的博客
2018/12/13
0
0
Qt编写自定义控件57-直方波形图

一、前言 直方波形图控件非原创控件,控件大全中大概有20-30个控件非自己原创,而是参考了网上开源的代码,自己加以整理和完善,新增了插件的代码使得可以直接集成到QtDesigner或者QtCreator...

飞扬青云
09/22
39
0
资深算法工程师万宫玺:Java工程师转型AI的秘密法宝——深度学习框架Deeplearning4j | 分享总结

雷锋网AI研习社按:深度学习是人工智能发展最为迅速的领域之一,Google、Facebook、Microsoft等巨头都围绕深度学习重点投资了一系列新兴项目,他们也一直在支持一些开源深度学习框架。目前研...

杨文
2018/01/02
0
0
Java 工程师转型 AI 的秘密法宝——深度学习框架 Deeplearning4j | 回顾

深度学习是人工智能发展最为迅速的领域之一,Google、Facebook、Microsoft 等巨头都围绕深度学习重点投资了一系列新兴项目,他们也一直在支持一些开源深度学习框架。目前研究人员使用的深度学...

y0w1as5eg37urfds
2017/12/17
0
0
大神带你分分钟超越最好结果——基于分布式CPU计算的Deeplearning4j迁移学习应用实例

首发地址:https://yq.aliyun.com/articles/114669 更多深度文章,请关注:https://yq.aliyun.com/cloud 2016年,欧莱礼媒体公司首席数据科学家罗瑞卡宣称:“2017年将是数据科学和大数据圈参...

uncle_ll
2017/07/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【1015】LNMP架构二

【1015】LNMP架构二 三、PHP安装 PHP安装和LAMP安装PHP方法有差别,需要开启php-fpm服务 1、下载PHP7至/usr/local/src/ 切换目录:cd /usr/local/src 2、解压缩 tar -jxvf php-7.3.0.tar.gz...

飞翔的竹蜻蜓
38分钟前
4
0
浅谈Visitor访问者模式

一、前言 什么叫访问,如果大家学过数据结构,对于这点就很清晰了,遍历就是访问的一般形式,单独读取一个元素进行相应的处理也叫作访问,读取到想要查看的内容+对其进行处理就叫作访问,那么...

青衣霓裳
57分钟前
6
0
JS内嵌多个页面,页面之间如何更快捷的查找相关联的页面

假设parent为P页面, P页面有两个子页面,分别为B页面和C页面; B页面和C页面分别内嵌一个iframe,分别为:D页面和E页面 现在通过B页面的内嵌页面D的方法refreshEpage(eUrl)来加载内嵌页面E的内容...

文文1
58分钟前
7
0
Hibernate 5 升级后 getProperties 错误

升级到 Hibernate 5 后,提示有错误: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map; 完整的错误栈为: java.lang.NoSuchMethodError: org.hibernate......

honeymoose
59分钟前
6
0
mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部