0

私は指の画像処理に取り組んでおり、現在は正規化を行いたいと考えています。

Griuale Biometric Web サイトでこのリンクを調べました。

正規化の考え方は、画像全体の平均と分散が事前定義された値に変更されるように、各ピクセルの強度を変更することにあります。

私を助けることができるJavaのコードまたはアルゴリズムの例を教えてください。

編集:

私は画像の正規化のために画像のピクセルMEANVARIANCE考慮しています:

これが私のコードです:

public class NormalizeHistMeanVariance {
private static BufferedImage original, normalize;

public static void main(String[] args) throws IOException {
    final int N = 256; // Number of graylevels
    final int M = 250; // Max value in histogram for displaying purposes
    int nrows, ncols, size, in_img[][], out_img[][];
    int i, j, max, maxgray;
    double hist[] = new double[N], norm, mean, var, tmp;

    String f1 = "E:/single.jpg";
    String f2 = "E:/normImg";
    File original_f = new File(f1);
    original = ImageIO.read(original_f);

    Histogram histogram = new Histogram(original);
    in_img = histogram.getPixels(original);

    nrows = in_img.length;
    ncols = in_img[0].length;
    size = in_img.length * in_img[0].length;

    // Compute average gray and histogram
    for (i = 0; i < N; i++)
        hist[i] = 0;
    mean = 0;
    for (i = 0; i < nrows; i++) {
        for (j = 0; j < ncols; j++) {
            hist[in_img[i][j]]++;
            mean += in_img[i][j];
        }
    }
    mean /= size;
    System.out.println("Mean graylevel = " + mean);

    // Compute variance
    var = 0;
    for (i = 0; i < nrows; i++) {
        for (j = 0; j < ncols; j++) {
            tmp = in_img[i][j] - mean;
            var += tmp * tmp;
        }
    }
    var = Math.sqrt(var / (size));
    System.out.println("Variance = " + var);

    max = maxgray = 0;
    for (i = 0; i < N; i++) {
        if (max < hist[i]) {
            max = (int) hist[i];
            maxgray = i;
        }
    }
    System.out.println("Max count " + max + " (graylevel = " + maxgray
            + " )");

    // Normalize to M for better display effect
    norm = (double) M / maxgray;
    System.out.println("Norm = " + norm);

    out_img = new int[nrows][ncols];
    for (int x = 0; x < in_img.length; x++) {
        for (int y = 0; y < in_img[0].length; y++) {
            out_img[x][y] = (int) (in_img[x][y] * norm);
        }
    }
    normalize = ImageUtils.CreateImagefromIntArray(out_img);

    writeImage(f2);
}

private static void writeImage(String output) throws IOException {
    File file = new File(output + ".jpg");
    ImageIO.write(normalize, "jpg", file);
}
}

私が欲しいのは、このリンクのような正規化後の滑らかな画像です。しかし、私は望ましい結果を得ていません。誰でも私を助けることができますか?

4

3 に答える 3

1

I can help you implementing Image Normalization used in this article Fingerprint Recognition Using Zernike Moments

Try to use Catalano Framework, in next version (1.2), I'll code Image Normalization in the framework.

Zernike Moments is ready like Hu Moments too, if you want to do like this article.

于 2013-09-02T19:15:37.463 に答える