2012-04-12 6 views
2

私はこの技術と本当に混同しています。ヒストグラムはすべての値の頻度です(私はグレースケール画像で作業しています)。これを行うための方法であって、累積アレイのポイントワイズ画像処理 - ヒストグラム均等化(処理)

int[] populateHist (PImage x) 
{ 
    x.loadPixels(); 
    int[] out = new int[256]; 
    for (int i = 0; i < x.pixels.length; i++) 
    { 
    out[(int)red(x.pixels[i])]++; 
    } 
    return out; 
} 

拡がり関数:

int[] spreadFunc (int[] a) 
{ 
    int[] out = new int[256]; 
    for (int i = 0; i < a.length; i++) 
    { 
    if (i == 0) 
    { 
     out[i] = (a[i]); 
    } 
    else 
    out[i] = (a[i]) + (a[i-1]); 
    } 
    return out; 
} 

次のステップは、それらの値を正規化することであるので、最大値をとり、すべての値を分割する正しいです最大値が255になるように同じ特定の数値で指定します。

また、ヒストグラムを正規化しても、拡散したピクセル値で画像を再現する方法が混乱することがあります。

答えて

0

まず、CDF(累積分布関数)を取得します。これは基本的にあなたの「拡散関数」ですが、0から1になるように正規化する必要があります(ピクセル数で割り、2倍を使用します)。

第二に、あなたはピクセルy = cdf(x)*255

の値をリマップそれともy = cdf(x)を行うと、0〜255の範囲に直線的に最小 - 最大値リマップは、それは基本的には同じことです。

たとえば、http://en.wikipedia.org/wiki/Histogram_equalization#Implementation