⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scalablecolor.java

📁 图像检索的代码b
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        int count = 0;
        for (int k = 0; k < _h_value; k++) {
            for (int l = 0; l < _s_value; l++) {
                for (int m = 0; m < _v_value; m++) {
                    tmpHist[count] = _wholeHist[k][l][m];
                    count++;
                }
            }
        }
        QuantizeHistogram(tmpHist);
        haarTransformedHistogram = HaarTransform(tmpHist);
//        System.out.println("NumberOfCoefficients: " + NumberOfCoefficients );
//        for (int i = 0; i < NumberOfCoefficients; i++) {
//            System.out.println(haarTransformedHistogram[i] + " <- " + tmpHist[i]);
//        }
//        _wholeHist = null;
//        _desHistograms = null;
    }

    public void recalc() {
        if (img!=null) {
            int[] tmpHist = new int[_h_value * _v_value * _s_value];
            int count = 0;
            for (int k = 0; k < _h_value; k++) {
                for (int l = 0; l < _s_value; l++) {
                    for (int m = 0; m < _v_value; m++) {
                        tmpHist[count] = _wholeHist[k][l][m];
                        count++;
                    }
                }
            }
            QuantizeHistogram(tmpHist);
            haarTransformedHistogram = HaarTransform(tmpHist);
        }
    }

    void _RGB2HSV(int R, int G, int B, int[] hsv) {
        int max,min;
        float hue = 0f;

        max = Math.max(R, G);     //calculation of max(R,G,B)
        max = Math.max(max, B);

        min = Math.min(R, G);     //calculation of min(R,G,B)
        min = Math.min(min, B);

        if (max == 0)
            hsv[1] = 0;
        else
            hsv[1] = (int) (((max - min) / (float) max) * 255.0);      //Saturation range: (0..255)

        if (max == min)
            hue = 0;     // (max - min) = 0
        else {
            if ((float) R == max)
                hue = ((G - B) / (float) (max - min));

            else if ((float) G == max)
                hue = (2 + (B - R) / (float) (max - min));

            else if ((float) B == max)
                hue = (4 + (R - G) / (float) (max - min));

            hue *= 60;

            if (hue < 0.0)
                hue += 360;
        }

        hsv[0] = (int) (hue);						// Hue  range: (0..359)
        hsv[2] = max;							// Value range:(0..255)
    }

    void _Quant(int H, int S, int V, int m, int n) {
        int i, j, k;
        i = (int) (H / _quant_h);			//H in _quant_h	 levels
        j = (int) (S / _quant_s);			//S in _quant_s  levels
        k = (int) (V / _quant_v);			//V in _quant_v  levels

//        _desHistograms[m][n][i][j][k]++;
        _wholeHist[i][j][k]++;
    }

    public int getSimilarity(ScalableColor secHist) {
        int diffsum = 0;
        int diff = 0;
        int i,j,k;
        // similarity nur wenn #BitPlanes und #Coeff gleich ist:
        if (secHist.getNumberOfBitplanesDiscarded() == getNumberOfBitplanesDiscarded() &&
                secHist.getNumberOfCoefficients() == getNumberOfCoefficients() &&
                secHist.getHaarTransformedHistogram() != null &&
                haarTransformedHistogram != null) {
            int[] secHaarHist = secHist.getHaarTransformedHistogram();
            for (int l = 0; l < secHaarHist.length; l++) {
                diff = Math.abs(secHaarHist[l] - haarTransformedHistogram[l]);
                diffsum += diff;
            }
        } else {
            if (haarTransformedHistogram != null && secHist.getHaarTransformedHistogram() != null)
                System.out.println("NumberOfBitplanesDiscarded and/or NumberOfCoefficients not matching");
            else
                System.out.println("Damn it! One of the histograms is NULL");
        }
        // Summe der Differenzen als Mass der 膆nlichkeit
        return diffsum;
    }

//    public int getSimilarity(ScalableColor secHist, int xblock, int yblock) {
//        int diffsum = 0;
//        int diff = 0;
//        int i,j,k;
//
//        //the desired block
//        int x_block;
//        int y_block;
//
//        if (xblock > _xNumOfBlocks)
//            x_block = 0;
//        else
//            x_block = xblock - 1;
//
//        if (yblock > _yNumOfBlocks)
//            y_block = 0;
//        else
//            y_block = yblock - 1;
//
//        //quantisation - values and number of blocks have to be similar
//        if ((_h_value == secHist._h_value) && (_s_value == secHist._s_value) && (_v_value == secHist._v_value) &&
//                (_xNumOfBlocks == secHist._xNumOfBlocks) && (_yNumOfBlocks == secHist._yNumOfBlocks))
//            for (i = 0; i < _h_value; i++) {
//                for (j = 0; j < _s_value; j++) {
//                    for (k = 0; k < _v_value; k++) {
//                        diff = _desHistograms[x_block][y_block][i][j][k] - secHist.getBlockHistogramValue(x_block, y_block, i, j, k);
//                        if (diff < 0)
//                            diffsum += -(diff);
//                        else
//                            diffsum += diff;
//                    }
//                }
//            }
//        return diffsum;
//    }

//    public int getHistogramValue(int i, int j, int k) {
//        return _wholeHist[i][j][k];
//    }

//    public int getBlockHistogramValue(int blockX, int blockY, int i, int j, int k) {
//        return _desHistograms[blockX][blockY][i][j][k];
//    }

    // von XM ... :)
    void histo_3d_hirarch_5(int[][] tabelle, int tablae, int[] histogram,
                            int h_size, int s_size, int v_size, int hist_nr) {
        int i,j,sum,dif,x1,y1,x2,y2;
        int[][] matrix = new int[16][16];
        int iprint = 0;

        for (i = 0; i < h_size * s_size * v_size; ++i)
            matrix[i % (h_size)][i / (h_size)] = histogram[i];

        for (i = 0; i < tablae; ++i) {
            y1 = tabelle[0][i];
            x1 = tabelle[1][i];
            y2 = tabelle[2][i];
            x2 = tabelle[3][i];
            sum = matrix[y1][x1] + matrix[y2][x2];
            dif = matrix[y2][x2] - matrix[y1][x1];

            if (iprint == 1)
                matrix[y1][x1] = sum;
            matrix[y2][x2] = dif;
        }

        for (i = 0; i < h_size * s_size * v_size; ++i)
            histogram[i] = matrix[i % (h_size)][i / (h_size)];
    }

    // von XM ... :)
    private void histo_3d_hirarch_16_5(int[][] tabelle, int tablae, int[] histogram,
                                       int h_size, int s_size, int v_size, int hist_nr) {
        int i,j,sum,dif,x1,y1,x2,y2;
        int[][] matrix = new int[16][16];
        int iprint = 0;

        for (i = 0; i < h_size * s_size * v_size; ++i)
            matrix[i % (h_size)][i / (h_size)] = histogram[i];

        for (i = 0; i < tablae; ++i) {
            if (tabelle[4][i] <= 8) continue;
            y1 = tabelle[0][i];
            x1 = tabelle[1][i];
            y2 = tabelle[2][i];
            x2 = tabelle[3][i];
            sum = matrix[y1][x1] + matrix[y2][x2];
            dif = matrix[y2][x2] - matrix[y1][x1];

            if (iprint == 1) {

                matrix[y1][x1] = sum;
            }
            matrix[y2][x2] = dif;
        }

        for (i = 0; i < h_size * s_size * v_size; ++i)
            histogram[i] = matrix[i % (h_size)][i / (h_size)];
    }

    int[] QuantizeHistogram(int[] aHist) {
        int factor = 15, iwert = 0;
        double wert,potenz = 0.4;
        double arg,maxwert;


        maxwert = (double) 40 * (double) 2047 / (double) 100;

        for (int i = 0; i < NumberOfCoefficients; i++) {
            wert = (double) (aHist[i]);

            if (wert > maxwert) iwert = (int) factor;

            if (wert <= maxwert) {
                arg = wert / maxwert;
                wert = (float) factor * Math.pow(arg, potenz);
                iwert = (int) (wert + 0.5);
            }

            if (iwert > factor) iwert = factor;

            aHist[i] = iwert;
        }
        return aHist;
    }

    // kopiert von XM ... :)
    private int[] HaarTransform(int[] aHist) {
        int index,tablae = 255,iwert,hist_nr;
        int[] histogram_in,histogram_out;
        int RecHistogram = 0;
        int h_size,s_size,v_size,max_color = 256;


        int[][] tabelle = {
            {
                0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10,
                12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6,
                8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2,
                4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14,
                0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10,
                12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6,
                8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2,
                4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14,
                0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10,
                12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6,
                8, 10, 12, 14, 0, 4, 8, 12, 0, 4, 8, 12, 0, 4, 8, 12, 0, 4, 8, 12, 0, 4,
                8, 12, 0, 4, 8, 12, 0, 4, 8, 12, 0, 8, 0
            },

            {
                0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
                2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5,
                5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8,
                8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
                11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13,
                13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0,
                0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6,
                6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10,
                12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0,
                0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10,
                10, 10, 10, 10, 0, 0, 0, 0, 2, 2, 2, 2, 8, 8, 8, 8, 10, 10, 10, 10, 0, 0,
                0, 0, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0
            },

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -