1、导读java
众所周知图像是有红绿蓝三种颜色堆叠而成,利用deeplearning对图像处理,必须把图像转化为张量,每一张图片由有三维张量组成,三维分别是[depth、height、width],直观来说,就是用三个矩阵堆叠起来,每个矩阵表明一个通道,以下图。有时候须要对图片进行旋转、缩放、裁剪、缩小填充等等复杂的操做,没有一个好用的工具,整个操做过程是很是繁琐的。今天咱们就来聊一聊DL4J的datavec对图像的处理。架构
2、datavec-data-image代码架构工具
datavec-data-image是dl4j基于opencv封装的图像处理库,能够很是方便的把图片处理为张量。代码分三个重要部分,loader(图片加载器)、transform(转化器)。code
一、loader:图片加载器,主要用于将图片加载并转化为张量。整个类结构以下图orm
二、transform转化器,主要用于对图片张量的旋转、缩放、裁剪等操做,这里列出几个比较重要的转化器。blog
ResizeImageTransform:缩放图片图片
FlipImageTransform:翻转图片,例如上线左右颠倒ip
CropImageTransform:裁剪图片图片处理
BoxImageTransform:将图片固定到一个固定大小,若是图片大于该范围,则裁剪,若是小于该范围,则用0填充博客
PipelineImageTransform:链式转化器,能够把图像通过一个流水线进行处理,例如:先缩放、在旋转、在翻转等等
RotateImageTransform:旋转图片,例如旋转30、60等角度
3、代码示例
一、NativeImageLoader读取图片,转为4维张量,这里之因此是四维,是由于加了minibatch维,若是只读取一张图片,minibatch维度为1
NativeImageLoader originalLoad = new NativeImageLoader(112, 112, 3); INDArray image = loader.asMatrix(new File("/root/1.jpg"));
二、上下左右颠倒
NativeImageLoader Labelloader = new NativeImageLoader(112, 112, 3,new FlipImageTransform(-1));//上下,左右颠倒
三、缩放图片
NativeImageLoader smallLoader = new NativeImageLoader(112, 112, 3, new ResizeImageTransform(80, 80));
四、旋转图片,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));
五、链式处理,先旋转60度,在固定到224*224的中心
NativeImageLoader pipeline = new NativeImageLoader(112, 112, 3,new PipelineImageTransform(new RotateImageTransform(60),new BoxImageTransform(224,224)) );
快乐源于分享。
此博客乃做者原创, 转载请注明出处