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)) );
快樂源於分享。
此博客乃做者原創, 轉載請註明出處