OpenCV에서 나오는 LUT의 사용법을 한참 보면서
이놈이 뭐하는 놈인가...
왜 256사이즈로 만드는가...
고민했는데 간단하게 정리해본다.
일단 기본 개념은 모든 픽셀의 경우에 대해서 미리 계산을 해서 LUT에 저장한다는 것이다.
그렇다면 연산이 빨라지는 부분이, 만약 픽셀의 밝기가 100인 픽셀이 100개 있다면,
(1. LUT사용하지 않는 경우) 픽셀을 돌면서 밝기가 100인 픽셀 300개가 있다면 100개 각각마다 +10해서 110으로 결과값을 return한다.
(2. LUT를 사용하는 경우) 픽셀을 돌기 전에 밝기가 100일 경우에 110으로 리턴할 수 있도록 lut[100] = 110; 을 정의한다. 밝기가 100이 아닌 경우도 정리한다.
예를 들어 밝기가 0인 경우 -> lut[0] = 10;
밝기가 233인경우 ->lut[233] = 243;
(8bit영상을 받을 경우 총 구현가능한 색이 256까지이므로 lut 사이즈는 256이 되어야 한다)
그렇다면 "lut[현재픽셀값]" 에 "결과값"이 저장되게 되므로 앞에서 예를 든 밝기가 100인 300개의 픽셀은 한번만 계산해서 LUT에 저장해 놓으면,
다시 또 계산할 필요 없이 LUT에 접근해서 결과값민 가져오면 된다.
예를 들어 정리하면
1. LUT를 사용하지 않는 경우는 밝기가 100인 픽셀 300개에 대해서 각각 300번의 같은 계산을 해 주어야 한다.
2. LUT를 사용하는 경우는 밝기가 100인 픽셀 300개에 대해서 한 번 계산해서 LUT에 집어넣고, 그 결과를 매번 가져오기면 한다.
결과적으로 계산량이 줄게 된다는 소리!