본문 바로가기

프로그래밍/c++ /영상처리

감마 보정

반응형

감마 보정

- 지수 법칙 변환

- y = T(x)  =cx^r

- 영상을 출력하는 장치마다 출력 값이 다름. 그래서 원래의 영상을 출력하기 위해서 감마 보정을 함.

 

void CImageTool_20150908View::OnGammaCorrection() // 감마 보정
{

// 영상읽어오기.
 int i, j, w, h, n = 40;
 RGBBYTE** ptr = NULL;
 CImageTool_20150908Doc* pDoc = GetDocument();
 BYTE value;

 if (pDoc->m_Dib.IsValid())
 {
  w = pDoc->m_Dib.GetWidth();
  h = pDoc->m_Dib.GetHeight();
  ptr = pDoc->m_Dib.GetRGBPtr();
 }

// 감마 보정
 float gamma = 2.5f; // 감마(r) 값을 2.5로 보정하기위해서 선언
 float invgamma = 1.f / gamma;

 for (j = 0; j < h; j++)
 for (i = 0; i < w; i++)
 {
  value = (ptr[j][i].r + ptr[j][i].g + ptr[j][i].b) / 3.0f;
  ptr[j][i].r = ptr[j][i].g = ptr[j][i].b = (BYTE)limit(pow(value / 255.f, invgamma) * 255 + 0.5f);
 }
 Invalidate(); // On Draw 함수 호출
}

 

반응형

'프로그래밍 > c++ /영상처리' 카테고리의 다른 글

Mean Filter ( 평균값 필터)  (0) 2015.10.01
OnLButtonDown  (0) 2015.09.21
Member initializer  (0) 2015.09.19
색채 대비  (0) 2015.09.16
2차원배열 동적할당  (0) 2015.09.11