輝度が一部に偏ってしまうと全体的に暗い感じの画像になってしまいます.例えば暗い画像は次のようなヒストグラムになってしまいますが,使えるレンジがまだまだ残っているのに一部の範囲しか使っていないのももったいない話です.そこでこのような画像の輝度が0から255まで目一杯使うように線形変換をしてみます.ヒストグラムに関係する変換方法はいろいろあるのですが,これが一番簡単です.結構取り繕った感のある方法ですが,以外といい結果が得られます.
変換の方法ですが,単純に正規化して最大値を255にあわせています.式は次のようになります.
max,minは原画像に含まれる輝度の最大値と最小値です.プログラムは次のようになります.
void Histlinearconversion(Image *img) { int max=0, min=255; int i; for(i=0; i<img->width*img->height; i++){ if(max < img->rgb[i].r) max = img->rgb[i].r; if(min > img->rgb[i].r) min = img->rgb[i].r; } if(!max)return; for(i=0; i<img->width*img->height; i++){ img->rgb[i].r = img->rgb[i].g = img->rgb[i].b = 255.0*(img->rgb[i].r - min)/(max - min); } }
これによって変換した画像のヒストグラムは以下のようになります.比が小さすぎて表示されていませんが輝度の最大値は255になっています.