ISP:ガンマ

画像は、画素Xを有し、値100は、次に、画素Xの補正は、次のステップであると仮定する。

1.正規:0と1の間の実数に画素値を変換します。アルゴリズムは以下の通りである:(X + 0.5)/ 256ここで、分割及び加算演算を含みます。画素X、0.392528の対応する正規化された値のために。

2.事前補償:式に従って、インデックスに対応する1 /ガンマ値に正規化画素データを取得します。このステップでは、要求累乗を含んでいます。2.2のガンマ値、1 /ガンマが0.454545である場合、X値の結果は、プレ補償^ 0.392528 0.454545 = 0.653764のに正規化。

3.抗正規化:実数値逆変換事前補償スルーは、0と255の間の整数値です。特定のアルゴリズム:F * 256 - 0.5このステップは、減算および乗算を含みます。続きの実施形態では、上記の式にX 0.653764の結果の事前補償は、対応するX 167事前補償画素値を与えるために、ディスプレイ167は、データを送信する最後のものです。

 

アルゴリズム:控訴運用効率は、このような状況のため、高速なルックアップテーブル(ルックアップテーブルLUT)は比較的低いです。変換前と後に提供される、Xの値が0と255の間です。

 

このアルゴリズムは、低ビットビットビットに高には適用されません、同じ原理、見積もりに異なる式は適していませんか?検討するために、

 

 

#include <math.h>

typedef unsigned char UNIT8; // 0~255
UNIT8 g_GammaLUT[256];

// fPrecompensation = 1 / gamma
void BuildLUTTable(float fPrecompensation )
{
  int i;
  float f;
  for( i=0;i<256;i++)
  {
    f=(i+0.5F)/256;//归一化
    f=(float)pow(f,fPrecompensation); //预补偿
    g_GammaLUT[i]=(UNIT8)(f*256-0.5F);//反归一化 & 结果存入 g_GammaLUT
  }
}

void GammaCorrectiom(UNIT8 src[],int iWidth,int iHeight,float fGamma,UNIT8 Dst[])
{
  int iCols,iRows;
  BuildLUTTable(1/fGamma);//gamma校正查找表初始化
 
  //查找表矫正
  for(iRows=0;iRows<iHeight;iRows++)
  {
    for(iCols=0;iCols<iWidth;iCols++)
    {
      Dst[iRows*iWidth+iCols]=g_GammaLUT[src[iRows*iWidth+iCols]];
    }
  }
}

typedefをunsigned char型単位8。// 0〜255
単位8 g_GammaLUT [256]。

// fPrecompensation = 1 /ガンマ
空BuildLUTTable(フロートfPrecompensation)
{
  私はint型。
  フロートF;
  以下のための式(I = 0、I <256; I ++)
  {
    F =(I + 0.5F)/ 256; //正規化
    F =(FLOAT)POW(F、fPrecompensation); //事前補償
    g_GammaLUT [I] =(単位8)(F * 256-0.5F); //&非正規化結果g_GammaLUTに格納
  }
}

空GammaCorrectiom(単位8のSRC []、int型IWIDTH、int型IHEIGHT、フロートfGamma、単位8 Dstの[])
{
  int型iCols、iRows。
  BuildLUTTable(1 / fGamma); //ガンマ補正ルックアップテーブルを初期化
 
  //補正ルックアップテーブル
  (iRows ++; iRows <IHEIGHT iRows = 0)のための
  {
    (; iCols <IWIDTH; iCols ++ iCols = 0)のための
    {
      DST [iRows * IWIDTH + iCols] = g_GammaLUT [SRC [iRows * IWIDTH + iCols]。
    }
  }
}

 

 

 

公開された15元の記事 ウォンの賞賛8 ビュー20000 +

おすすめ

転載: blog.csdn.net/YXFLINUX/article/details/51260666