如何利用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))  );

 

快樂源於分享。

此博客乃做者原創, 轉載請註明出處

相關文章
相關標籤/搜索