Skip to content
Snippets Groups Projects
VQBenchmark.java 6.19 KiB
package azgracompress.benchmark;

import azgracompress.cli.ParsedCliOptions;
import azgracompress.data.Block;
import azgracompress.data.ImageU16;
import azgracompress.data.V2i;
import azgracompress.data.V3i;

public class VQBenchmark extends BenchmarkBase {

    public VQBenchmark(final ParsedCliOptions options) {
        super(options);
    }

    @Override
    public void startBenchmark() {
        startBenchmark(options.getQuantizationVector());
    }

    private ImageU16 reconstructImageFromQuantizedVectors(final int[][] vectors,
                                                          final V2i qVector) {
        Block reconstructedChunk = new Block(new V2i(rawImageDims.getX(), rawImageDims.getY()));
        if (qVector.getY() > 1) {
            reconstructedChunk.reconstructFrom2DVectors(vectors, qVector);
        } else {
            // 1D vector
            reconstructedChunk.reconstructFromVectors(vectors);
        }
        return reconstructedChunk.asImageU16();
    }

    public void startBenchmark(final V3i qVector) {
        // NOTE(Moravec): This will be enabled once we need to benchmark something.
        //        if (planes.length < 1) {
        //            return;
        //        }
        //        IPlaneLoader planeLoader;
        //        try {
        //            planeLoader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo());
        //        } catch (Exception e) {
        //            e.printStackTrace();
        //            System.err.println("Unable to create specific reader.");
        //            return;
        //        }
        //        if (qVector.getY() > 1) {
        //            System.out.println("2D qVector");
        //        } else {
        //            System.out.println("1D qVector");
        //        }
        //        boolean dirCreated = new File(this.outputDirectory).mkdirs();
        //        System.out.printf("|CODEBOOK| = %d%n", codebookSize);
        //        VectorQuantizer quantizer = null;
        //
        //        if (options.getCodebookType() == CompressionOptions.CodebookType.Global) {
        //            System.out.println("Loading codebook from cache");
        //            QuantizationCacheManager cacheManager = new QuantizationCacheManager(cacheFolder);
        //            final VQCodebook codebook = cacheManager.loadVQCodebook(inputFile, codebookSize, qVector);
        //            if (codebook == null) {
        //                System.err.println("Failed to read quantization vectors from cache.");
        //                return;
        //            }
        //            quantizer = new VectorQuantizer(codebook);
        //            System.out.println("Created quantizer from cache");
        //
        //        } else if (options.getCodebookType() == CompressionOptions.CodebookType.MiddlePlane) {
        //            final int middlePlaneIndex = rawImageDims.getZ() / 2;
        //            int[][] refPlaneData;
        //            try {
        //                refPlaneData = planeLoader.loadVectorsFromPlaneRange(options, Utils.singlePlaneRange(middlePlaneIndex));
        //            } catch (ImageCompressionException e) {