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

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))  );

 

快乐源于分享。

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

相关文章
相关标签/搜索