From 9adcedbd2b9578fd8c94723c96b08bb71b1bfeb6 Mon Sep 17 00:00:00 2001
From: Vojtech Moravec <vojtech.moravec.st@vsb.cz>
Date: Fri, 16 Oct 2020 11:34:08 +0200
Subject: [PATCH] Fix loading of single plane in middle plane codebook
 training.

---
 .../qcmp/compression/SQImageCompressor.java   | 36 +++++++++----------
 1 file changed, 16 insertions(+), 20 deletions(-)

diff --git a/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java b/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java
index 381c250..ae5be44 100644
--- a/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java
+++ b/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java
@@ -181,7 +181,7 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm
         return planeDataSizes;
     }
 
-    private int[] loadConfiguredPlanesData() throws ImageCompressionException {
+    private int[] loadConfiguredPlanesData() throws ImageCompressionException, IOException {
         final InputData inputDataInfo = options.getInputDataInfo();
         final IPlaneLoader planeLoader;
         try {
@@ -191,36 +191,32 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm
         }
         int[] trainData = null;
 
-        if (inputDataInfo.isPlaneIndexSet()) {
-            try {
-                reportStatusToListeners("Loading single plane data.");
-                trainData = planeLoader.loadPlaneData(inputDataInfo.getPlaneIndex());
-            } catch (final IOException e) {
-                throw new ImageCompressionException("Failed to load plane data.", e);
-            }
+        if (options.getCodebookType() == CompressionOptions.CodebookType.MiddlePlane) {
+            final int middlePlaneIndex = inputDataInfo.getDimensions().getZ() / 2;
+            reportStatusToListeners("Loading single plane data.");
+            trainData = planeLoader.loadPlaneData(middlePlaneIndex);
+        } else if (inputDataInfo.isPlaneIndexSet()) {
+            reportStatusToListeners("Loading single plane data.");
+            trainData = planeLoader.loadPlaneData(inputDataInfo.getPlaneIndex());
         } else if (inputDataInfo.isPlaneRangeSet()) {
             reportStatusToListeners("Loading plane range data.");
             final int[] planes = getPlaneIndicesForCompression(options.getInputDataInfo());
-            try {
-                trainData = planeLoader.loadPlanesU16Data(planes);
-            } catch (final IOException e) {
-                e.printStackTrace();
-                throw new ImageCompressionException("Failed to load plane range data.", e);
-            }
+            trainData = planeLoader.loadPlanesU16Data(planes);
         } else {
             reportStatusToListeners("Loading all planes data.");
-            try {
-                trainData = planeLoader.loadAllPlanesU16Data();
-            } catch (final IOException e) {
-                throw new ImageCompressionException("Failed to load all planes data.", e);
-            }
+            trainData = planeLoader.loadAllPlanesU16Data();
         }
         return trainData;
     }
 
     @Override
     public void trainAndSaveCodebook() throws ImageCompressionException {
-        final int[] trainData = loadConfiguredPlanesData();
+        final int[] trainData;
+        try {
+            trainData = loadConfiguredPlanesData();
+        } catch (final IOException e) {
+            throw new ImageCompressionException("Failed to load configured plane data in SQImageCompressor.");
+        }
 
         final LloydMaxU16ScalarQuantization lloydMax = new LloydMaxU16ScalarQuantization(trainData,
                                                                                          getCodebookSize(),
-- 
GitLab