더북(TheBook)

limit 함수에 대해 좀 더 자세히 살펴보자. 그레이스케일 영상에서 픽셀 값은 BYTE 자료형으로 표현되기 때문에 항상 0~255 사이의 값을 가진다. 그러나 몇몇 영상 처리 알고리즘을 수행할 경우 픽셀 값에 0보다 작거나 255보다 큰 값을 대입하게 되는 경우가 있다. 이런 경우 BYTE 자료형이 표현할 수 있는 범위를 벗어나기 때문에 결과 값이 예상과 다른 형태로 변경된다. 예를 들어 아래 코드를 보자.

BYTE a = 255;
BYTE b = a + 1;

위 코드에서 a가 255이므로, (a+1)은 256이 된다. 그러나 이 값을 BYTE 타입의 변수 b에 저장할 때에는 256이 저장되는 것이 아니라 0이 저장되게 된다. 256을 정수형 16진수로 표현하면 0x00000100인데, 이를 BYTE 자료형에 저장할 때에는 맨 마지막 1바이트에 해당하는 0x00만 저장되기 때문이다. 그래서 흰색에 가까운 그레이스케일 값이 갑자기 검정색에 해당하는 0으로 변경되기 때문에 영상이 매우 이상하게 변경되는 경우가 있다. 이러한 상황을 예방하기 위해 limit 함수가 필요하다. 위의 코드를 다음과 같이 작성할 경우, b에는 255가 저장된다.

BYTE a = 255;
BYTE b = limit(a + 1);

limit 함수 구현은 소스 4-13에 나타내었다.

소스 4-13 limit 전역 함수 정의(IppImage.h)
template<typename T>
inline T limit(const T& value)
{
    return ((value > 255) ? 255 : ((value < 0) ? 0 : value));
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.