script day.log

大学生がなんとなく始めた、趣味やら生活のことを記録していく。

ヒストグラム平坦化について

前回伸張化を行ったので、濃度ヒストグラムなどの感覚は掴めました。
makose3p1229.hatenablog.com

今回は平坦化についてです。
今度は度数を平坦にして、伸張化よりメリハリをつけましょうって話です。
式はこんな感じ。

\begin{align}
\hat{z} &= z_{max}P_1(z) \\
P_1(z) &= \frac{1}{M \cdot N}\sum^{z}_{i = 0}h(i)
\end{align}

これをCで書くとこんな感じ。(image_w[i][j] = \hat{z})

for (int i = 0; i < HEIGHT; i++)
    {
        for (int j = 0; j < WIDTH; j++)
        {
            int z_prev = 0;
            for (int k = 0; k < image[i][j]; k++)
            {
                z_prev += histgram[k];
            }
            float p = (float)z_prev / (float)(HEIGHT * WIDTH);
            image_w[i][j] = (unsigned char)(z_max * p);
        }
}

実行した後、原画像よりも、伸張化よりも明るくなりました。
しかし濃度ヒストグラムを見ると、真っ平らにはなっていませんでした。
デジタル画像の場合、計算上は可能なのですが、厳密には平坦化が行なえません。
しかし、このままでも効果は表れていました。

[プログラム全文は以下より(ex3を参考)]
github.com