Как я могу создать несколько изображений с известной энтропией - PullRequest
0 голосов
/ 04 июня 2018

Я написал функцию в java, которая вычисляет энтропию 2D-изображения на основе его серой гистограммы.Теперь я хочу проверить, работает ли он правильно или нет.Как я могу создать изображение с известной энтропией?

public static int[] computeHistogram2D(Grid2D grid, int bins, int width, int heigth) {

    int[] histo = new int[bins];
    double[] histof = new double[bins];
    float val = 0;
    float max = -Float.MAX_VALUE;
    float min = Float.MAX_VALUE;
    //maxVal:  -3.4028235E38 .. minVal:  3.4028235E38
    for (int i = 0; i < width; i++) {
        for (int j = 0 ; j < heigth; j++) {
                val = grid.getAtIndex(i, j);
                if (val > max) {
                    max = val;
                }
                if (val < min) {
                    min = val;
                }
    }
}

    for (int i = 0; i < width; i++) {
        for (int j = 0 ; j < heigth; j++) {
                val = grid.getAtIndex(i, j);
            int b = (int)val;
                histo[b]++;
                histof[b]++;
            }
        }
    System.out.println("maxValgrid2D:  " +max + "   minValGrid2D:  " + min);
    VisualizationUtil.createPlot(histof, "histogram2D", "intensity", "count").show();
    return histo;

}
static double computeEntropy2D(Grid2D grid,  int width, int height) {
System.out.println("width:" +width + "height " + height);
double[] entropyArray = new double[40];
                double entropy = 0.0;
                int bins = 40;
                int sizeX = width;
                int sizeY = height;
                int sizeZ = 1 ;
                int size = sizeX * sizeY * sizeZ; //Total pixels
                System.out.println("size:  " + size);
                int[] histo = computeHistogram2D(grid, bins, sizeX, sizeY);

                for (int i = 0; i < bins; i++) {
                    double val = (double) histo[i] / (double) size; //Normalized Histogram

                    entropy = entropy + (-(val * Math.log (val + 0.00001)));
                    entropyArray[i] = entropy;

                    //System.out.println("maxValgrid2D:  " +max + "   minValGrid2D:  " + min);

                }
                VisualizationUtil.createPlot(entropyArray, "entPlot", "tX", "Entropy").show();
        System.out.println("entropy2D:   " + entropy);
                return entropy;
            }

Я работаю над магистерской диссертацией, когда я написал это, мой супервайзер сказал, что вы должны проверить свои коды с каким-нибудь изображением с известной энтропией.чтобы создать образ с известной энтропией ... Я много искал, но не мог найти ничего, что могло бы помочь мне в этом ...

...