// ReviceHistgram.v ヒストグラム補正モジュール
// 並列化不可能な中間処理です。

module ReviceHistgram(Histgram,Reviced:parameter)
int Histgram[256];  // 元のヒストグラム
int Reviced[256];     // 補正されたヒストグラム
{
    {
	int i;
	int sum;            // ヒストグラムの部分話
	int pixnum = 0;     // 入力画像の全画素数
	float a_freq[256];  // ヒストグラムの累積度数
	float vmin;         // 累積度数の最小値
	float vmin_inv;     // 累積度数計算時の定数部分

	// 全画素数を計算
	for(i = 0; i < 256; i++)
	    pixnum += Histgram[i];

	// 累積度数を初期化
	for(i = 0; i < 256; i++)
	    a_freq[i] = 0.;
	
	// 累積度数を計算
	sum = 0;
	for(i = 0; i < 256; i++){
	    sum += Histgram[i];
	    a_freq[i] = (float)sum / pixnum;
	}
	
	// 累積度数の最小値を別名保存
	vmin = a_freq[0];
	vmin_inv = 255./(1.-vmin);
	
	// 均一化されたヒストグラムの計算
	for(i = 0; i < 256; i++)
	    Reviced[i] = (int)((a_freq[i] - vmin)*vmin_inv);
    }
}

コントラスト補正メインフローへ戻る

VIOS トップページ