diff --git a/src/main/java/azgracompress/benchmark/SQBenchmark.java b/src/main/java/azgracompress/benchmark/SQBenchmark.java index 5f01c98aa234822c1c8c83f7062bf4aca8c82e2d..50a7504adab308a1acd7dd9de56dffb54b52cddc 100644 --- a/src/main/java/azgracompress/benchmark/SQBenchmark.java +++ b/src/main/java/azgracompress/benchmark/SQBenchmark.java @@ -58,7 +58,7 @@ public class SQBenchmark extends BenchmarkBase { final int[] middlePlaneData; try { - middlePlaneData = planeLoader.loadPlaneU16(middlePlaneIndex).getData(); + middlePlaneData = planeLoader.loadPlaneData(middlePlaneIndex); } catch (IOException e) { e.printStackTrace(); System.err.println("Failed to load middle plane data."); @@ -73,7 +73,7 @@ public class SQBenchmark extends BenchmarkBase { // NOTE(Moravec): Actual planeIndex is zero based. final int[] planeData; try { - planeData = planeLoader.loadPlaneU16(planeIndex).getData(); + planeData = planeLoader.loadPlaneData(planeIndex); } catch (IOException e) { e.printStackTrace(); System.err.println("Failed to load plane data."); diff --git a/src/main/java/azgracompress/benchmark/VQBenchmark.java b/src/main/java/azgracompress/benchmark/VQBenchmark.java index 1be7eb4e6b08c64024737322dfbf36c4321c56db..3161f1a04876d654fc6555a9676cecd4a15a36c9 100644 --- a/src/main/java/azgracompress/benchmark/VQBenchmark.java +++ b/src/main/java/azgracompress/benchmark/VQBenchmark.java @@ -82,7 +82,8 @@ public class VQBenchmark extends BenchmarkBase { final int middlePlaneIndex = rawImageDims.getZ() / 2; final ImageU16 middlePlane; try { - middlePlane = planeLoader.loadPlaneU16(middlePlaneIndex); + + middlePlane = new ImageU16(options.getInputDataInfo().getDimensions().toV2i(), planeLoader.loadPlaneData(middlePlaneIndex)); } catch (IOException e) { e.printStackTrace(); System.err.println("Failed to load middle plane data."); @@ -91,9 +92,9 @@ public class VQBenchmark extends BenchmarkBase { final int[][] refPlaneData = getPlaneVectors(middlePlane, qVector); LBGVectorQuantizer vqInitializer = new LBGVectorQuantizer(refPlaneData, - codebookSize, - workerCount, - qVector.toV3i()); + codebookSize, + workerCount, + qVector.toV3i()); final LBGResult vqResult = vqInitializer.findOptimalCodebook(); quantizer = new VectorQuantizer(vqResult.getCodebook()); System.out.println("Created quantizer from middle plane."); @@ -104,7 +105,7 @@ public class VQBenchmark extends BenchmarkBase { final ImageU16 plane; try { - plane = planeLoader.loadPlaneU16(planeIndex); + plane = new ImageU16(options.getInputDataInfo().getDimensions().toV2i(), planeLoader.loadPlaneData(planeIndex)); } catch (IOException e) { e.printStackTrace(); System.err.println(String.format("Failed to load plane %d data. Skipping plane.", planeIndex)); @@ -116,9 +117,9 @@ public class VQBenchmark extends BenchmarkBase { if (options.getCodebookType() == CompressionOptions.CodebookType.Individual) { LBGVectorQuantizer vqInitializer = new LBGVectorQuantizer(planeData, - codebookSize, - workerCount, - qVector.toV3i()); + codebookSize, + workerCount, + qVector.toV3i()); LBGResult vqResult = vqInitializer.findOptimalCodebook(); quantizer = new VectorQuantizer(vqResult.getCodebook()); System.out.println("Created plane quantizer."); @@ -127,8 +128,8 @@ public class VQBenchmark extends BenchmarkBase { final String quantizedFile = String.format(QUANTIZED_FILE_TEMPLATE, planeIndex, codebookSize); final String diffFile = String.format(DIFFERENCE_FILE_TEMPLATE, planeIndex, codebookSize); final String absoluteDiffFile = String.format(ABSOLUTE_DIFFERENCE_FILE_TEMPLATE, - planeIndex, - codebookSize); + planeIndex, + codebookSize); final int[][] quantizedData = quantizer.quantize(planeData, workerCount); diff --git a/src/main/java/azgracompress/cli/functions/MeasurePlaneErrorFunction.java b/src/main/java/azgracompress/cli/functions/MeasurePlaneErrorFunction.java index 5e60b21e1c4e73f0f12ea5ad16de32ad30cf7874..f644cb8a758aa112e1ef4887876099beea744b9f 100644 --- a/src/main/java/azgracompress/cli/functions/MeasurePlaneErrorFunction.java +++ b/src/main/java/azgracompress/cli/functions/MeasurePlaneErrorFunction.java @@ -1,11 +1,9 @@ package azgracompress.cli.functions; import azgracompress.cli.CustomFunctionBase; -import azgracompress.io.FileInputData; -import azgracompress.io.InputData; import azgracompress.cli.ParsedCliOptions; -import azgracompress.data.ImageU16; import azgracompress.data.V3i; +import azgracompress.io.FileInputData; import azgracompress.io.loader.RawDataLoader; import azgracompress.utilities.Utils; @@ -58,7 +56,7 @@ public class MeasurePlaneErrorFunction extends CustomFunctionBase { final String folder) { System.out.println( String.format("runPlaneDifferenceForAllBits\n\tChannel: %d\n\tMethod: %s\n\tType: %s", - channel, type, folder)); + channel, type, folder)); // final int channel = 0; assert (channel == 0 || channel == 1); final String comp_file = channel == 0 ? COMP_FILE_ch0 : COMP_FILE_ch1; @@ -131,7 +129,7 @@ public class MeasurePlaneErrorFunction extends CustomFunctionBase { FileInputData compFileInfo = new FileInputData(compressedFile); compFileInfo.setDimension(dims); - final RawDataLoader refPlaneloader = new RawDataLoader( refFileInfo); + final RawDataLoader refPlaneloader = new RawDataLoader(refFileInfo); final RawDataLoader compPlaneloader = new RawDataLoader(compFileInfo); Thread[] workers = new Thread[workerCount]; @@ -143,18 +141,19 @@ public class MeasurePlaneErrorFunction extends CustomFunctionBase { workers[wId] = new Thread(() -> { - ImageU16 originalPlane, compressedPlane, differencePlane; + + int[] originalPlaneData, compressedPlaneData; for (int planeIndex = fromIndex; planeIndex < toIndex; planeIndex++) { try { - originalPlane = refPlaneloader.loadPlaneU16(planeIndex); - compressedPlane = compPlaneloader.loadPlaneU16(planeIndex); + originalPlaneData = refPlaneloader.loadPlaneData(planeIndex); + compressedPlaneData = compPlaneloader.loadPlaneData(planeIndex); } catch (IOException e) { e.printStackTrace(); break; } - final int[] diffData = Utils.getDifference(originalPlane.getData(), compressedPlane.getData()); + final int[] diffData = Utils.getDifference(originalPlaneData, compressedPlaneData); Utils.applyAbsFunction(diffData); final double absDiffSum = Arrays.stream(diffData).mapToDouble(v -> v).sum(); @@ -181,9 +180,9 @@ public class MeasurePlaneErrorFunction extends CustomFunctionBase { for (final PlaneError planeError : planeErrors) { writer.write(String.format("%d\t%.4f\t%.4f\n", - planeError.getPlaneIndex(), - planeError.getAbsoluteError(), - planeError.getMeanAbsoluteError())); + planeError.getPlaneIndex(), + planeError.getAbsoluteError(), + planeError.getMeanAbsoluteError())); } } catch (IOException e) { diff --git a/src/main/java/azgracompress/compression/SQImageCompressor.java b/src/main/java/azgracompress/compression/SQImageCompressor.java index 02865f6470ba5466a61e0e3af7b6d5361e4fbc16..9de5d2921aae7ddbb3827169875d812bdab4bc10 100644 --- a/src/main/java/azgracompress/compression/SQImageCompressor.java +++ b/src/main/java/azgracompress/compression/SQImageCompressor.java @@ -2,10 +2,9 @@ package azgracompress.compression; import azgracompress.U16; import azgracompress.cache.QuantizationCacheManager; -import azgracompress.io.InputData; import azgracompress.compression.exception.ImageCompressionException; -import azgracompress.data.ImageU16; import azgracompress.huffman.Huffman; +import azgracompress.io.InputData; import azgracompress.io.loader.IPlaneLoader; import azgracompress.io.loader.PlaneLoaderFactory; import azgracompress.quantization.scalar.LloydMaxU16ScalarQuantization; @@ -116,17 +115,16 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm writeCodebookToOutputStream(quantizer, compressStream); } else if (options.getCodebookType() == CompressionOptions.CodebookType.MiddlePlane) { stopwatch.restart(); - ImageU16 middlePlane = null; + int[] middlePlaneData; final int middlePlaneIndex = getMiddlePlaneIndex(); try { - - middlePlane = planeLoader.loadPlaneU16(middlePlaneIndex); + middlePlaneData = planeLoader.loadPlaneData(middlePlaneIndex); } catch (IOException ex) { throw new ImageCompressionException("Unable to load middle plane data.", ex); } reportStatusToListeners(String.format("Training scalar quantizer from middle plane %d.", middlePlaneIndex)); - quantizer = trainScalarQuantizerFromData(middlePlane.getData()); + quantizer = trainScalarQuantizerFromData(middlePlaneData); huffman = createHuffmanCoder(huffmanSymbols, quantizer.getCodebook().getSymbolFrequencies()); stopwatch.stop(); @@ -140,18 +138,16 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm for (final int planeIndex : planeIndices) { stopwatch.restart(); - ImageU16 plane = null; - + int[] planeData; try { - - plane = planeLoader.loadPlaneU16(planeIndex); + planeData = planeLoader.loadPlaneData(planeIndex); } catch (IOException ex) { throw new ImageCompressionException("Unable to load plane data.", ex); } if (!hasGeneralQuantizer) { reportStatusToListeners(String.format("Training scalar quantizer from plane %d.", planeIndex)); - quantizer = trainScalarQuantizerFromData(plane.getData()); + quantizer = trainScalarQuantizerFromData(planeData); writeCodebookToOutputStream(quantizer, compressStream); huffman = new Huffman(huffmanSymbols, quantizer.getCodebook().getSymbolFrequencies()); @@ -161,7 +157,7 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm assert (quantizer != null) : "Scalar Quantizer wasn't initialized."; assert (huffman != null) : "Huffman wasn't initialized."; - final int[] indices = quantizer.quantizeIntoIndices(plane.getData(), 1); + final int[] indices = quantizer.quantizeIntoIndices(planeData, 1); planeDataSizes[planeCounter++] = writeHuffmanEncodedIndices(compressStream, huffman, indices); @@ -185,7 +181,7 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm if (inputDataInfo.isPlaneIndexSet()) { try { reportStatusToListeners("Loading single plane data."); - trainData = planeLoader.loadPlaneU16(inputDataInfo.getPlaneIndex()).getData(); + trainData = planeLoader.loadPlaneData(inputDataInfo.getPlaneIndex()); } catch (IOException e) { throw new ImageCompressionException("Failed to load plane data.", e); } diff --git a/src/main/java/azgracompress/compression/VQImageCompressor.java b/src/main/java/azgracompress/compression/VQImageCompressor.java index 6292c15702129daba0064f278bb67965f285e03e..dd29cb1ba411f894eba7818df97d164f377c6b85 100644 --- a/src/main/java/azgracompress/compression/VQImageCompressor.java +++ b/src/main/java/azgracompress/compression/VQImageCompressor.java @@ -1,7 +1,6 @@ package azgracompress.compression; import azgracompress.cache.QuantizationCacheManager; -import azgracompress.data.Chunk3D; import azgracompress.fileformat.QuantizationType; import azgracompress.io.InputData; import azgracompress.compression.exception.ImageCompressionException; @@ -130,8 +129,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm final int middlePlaneIndex = getMiddlePlaneIndex(); ImageU16 middlePlane = null; try { - - middlePlane = planeLoader.loadPlaneU16(middlePlaneIndex); + middlePlane = new ImageU16(options.getInputDataInfo().getDimensions().toV2i(), planeLoader.loadPlaneData(middlePlaneIndex)); } catch (IOException ex) { throw new ImageCompressionException("Unable to load reference plane data.", ex); } @@ -155,7 +153,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm ImageU16 plane = null; try { - plane = planeLoader.loadPlaneU16(planeIndex); + plane = new ImageU16(options.getInputDataInfo().getDimensions().toV2i(), planeLoader.loadPlaneData(planeIndex)); } catch (IOException ex) { throw new ImageCompressionException("Unable to load plane data.", ex); } @@ -193,7 +191,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm private int[][] loadPlaneQuantizationVectors(final IPlaneLoader planeLoader, final int planeIndex) throws IOException { - ImageU16 refPlane = planeLoader.loadPlaneU16(planeIndex); + ImageU16 refPlane = new ImageU16(options.getInputDataInfo().getDimensions().toV2i(), planeLoader.loadPlaneData(planeIndex)); return refPlane.toQuantizationVectors(options.getQuantizationVector().toV2i()); } @@ -272,15 +270,15 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm public long[] compressVoxels(DataOutputStream compressStream) throws ImageCompressionException { - int[][] voxels; - try { - IPlaneLoader loader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo()); - final int[] data = loader.loadAllPlanesU16Data(); - Chunk3D bigVoxel = new Chunk3D(options.getInputDataInfo().getDimensions(), data); - voxels = bigVoxel.divideInto3DVectors(options.getQuantizationVector()); - } catch (Exception e) { - throw new ImageCompressionException("Unable to create data loader or load image data.", e); - } + // int[][] voxels; + // try { + // IPlaneLoader loader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo()); + // final int[] data = loader.loadAllPlanesU16Data(); + // Chunk3D bigVoxel = new Chunk3D(options.getInputDataInfo().getDimensions(), data); + // voxels = bigVoxel.divideInto3DVectors(options.getQuantizationVector()); + // } catch (Exception e) { + // throw new ImageCompressionException("Unable to create data loader or load image data.", e); + // } return null; }