0

何時間も検索した後、私はあなたの専門知識に頼っています! 助けてください!

基本的に、グレースケール画像の個々のピクセルからデータにアクセスしようとしています。

私が話している画像へのリンクは次のとおりです。それは私が学びたいことではありません - ノイズを取り除く方法を知りたいのです!)

 public static void handlesinglepixel(int x, int y, int pixel) {
        int alpha = (pixel >> 24) & 0xff;
        int red = (pixel >> 16) & 0xff;
        int green = (pixel >> 8) & 0xff;
        int blue = (pixel) & 0xff;
        // Deal with the pixel as necessary...
    }

    public static void handlepixels(Image img, int x, int y, int w, int h) {
        int[] pixels = new int[w * h];
        PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
        try {
            pg.grabPixels();
        } catch (InterruptedException e) {
            System.err.println("interrupted waiting for pixels!");
            return;
        }
        if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
            System.err.println("image fetch aborted or errored");
            return;
        }
        for (int j = 0; j < h; j++) {
            for (int i = 0; i < w; i++) {
                handlesinglepixel(x + i, y + j, pixels[j * w + i]);
            }
        }
    }

これを使用して、個々のピクセルにアクセスできます。私はとても幸せです!しかし...隣接するピクセルを比較して、他のピクセルよりも異常に明るいかどうかを確認したいと思います。写真からノイズを取り除きたいので、これを行っています。何かアドバイス?

PS RescaleOp を使用して、すべてのピクセルの輝度係数を変更してから、再度乗算しましたが、画像が認識できなくなりました。どうやってノイズを除去するのか、本当に困っています!

あなたの回答を読むのを楽しみにしています。

4

2 に答える 2

2

これは、除去するノイズのタイプに大きく依存します。一部の隣接するピクセルが、設定された領域内の大部分のピクセルよりもはるかに明るい場合に遭遇した場合は、通常、単純なカーネルを使用して何らかのタイプの 2D フィルタリングを行っています。

ノイズの種類など、いくつかの情報が不足しています。なので限られた情報で精一杯進めていきます。

まず、「明るすぎる」とは?「明るすぎる」とは、隣接するピクセルよりも強度が標準偏差がわずかに高いだけですか、それとも基本的に黒または白のピクセルですか?

後者の場合はごま塩・インパルスノイズ除去です。

基本的に 3x3 空間フィルターを実行し、最頻値または中央値を選択します。出来上がり、過度に明るいピクセルはもうありません。ただし、これにより効果的に画像が少しぼやけるため、代わりに適応フィルタリングを使用することを検討してください。そのため、すべてのピクセルを変更するのではなく、周囲のピクセルよりも明るい場合にのみピクセルを変更します。

最後に、ピクセルが単に極端な外れ値 (インパルス/ごま塩ノイズ) である可能性があるのではなく、何らかの統計値に従って周囲のピクセルよりも明るいピクセルを単に削除したいということを考慮する必要があります。この最後のアプローチは、CPU 時間の点で非常にコストがかかりますが、局所的な極値を処理できます。

  1. NxN フィルター カーネルの場合、カーネルによってオーバーラップされたすべてのピクセルの平均/平均強度値、つまり E(X) を計算します。(つまり、オーバーフローを避けるために、各ピクセルを N^2 で割り、それらを合計します)
  2. 同じ NxN 領域について、標準偏差 E(X^2) を計算します。(つまり: 平均を計算し、次に各ピクセルについて (pixel_intensity - mean_value) の絶対値を計算し、それを 2 乗します。これらの差をすべて合計し、N^2 で割ります。
  3. NxN 領域のすべてのピクセルをループします。単一のピクセルが平均値から 2.5 標準偏差以上離れている場合は、その強度を一定の割合で減らします。

http://www.mathsisfun.com/data/standard-deviation.html

この統計的方法を適応フィルタリング技術 (つまり、利用可能なすべてのピクセルをやみくもに変更するのではなく、どのピクセルを変更する必要があるかを検出する) と組み合わせると、全体的な画質に大きな影響を与えることなく、問題のあるピクセルを削除できます。

最後に、画像処理に関して、LaPlace 演算子について調べることも検討する必要があります。これは単純なエッジ検出器として機能し、正しい方向に導く可能性もあります。

http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm

幸運を!

于 2013-10-27T22:30:46.593 に答える