ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RGB 정규화, 255와 256 사이에서 헷갈리는 이유
    IT & AI 2026. 6. 3. 12:22

    RGB 정규화, 255와 256 사이에서 헷갈리는 이유

    AI 뉴스 썸네일
    AI 뉴스 썸네일

    이미지를 다루는 코드에서 `uint8` RGB 값을 `float`로 바꿀 때는 보통 255로 나눠요. 그런데 0.5를 더한 뒤 256으로 나누면 각 값이 구간의 가운데에 놓여서 더 자연스럽다고 느끼는 개발자도 있어요. Pekka Väänänen의 글은 이 작은 선택이 검은색, 흰색, 디더링, 양자화 해석까지 어떻게 이어지는지 차분히 따져요. 2

    핵심 요약

    구분핵심왜 볼 만한가요
    표준 방식`img / 255.0`은 0을 0.0, 255를 1.0에 맞춰요GPU의 UNORM 변환과 맞고, 검은색·흰색을 코드에서 직접 다루기 쉬워요
    대안 방식`(img + 0.5) / 256.0`은 각 정숫값을 구간 중앙에 놓아요디더링처럼 구간 경계를 신경 쓰는 작업에서는 계산이 깔끔해질 수 있어요
    실제 선택외부 이미지를 읽는 일반 이미지 처리라면 255가 안전해요대부분의 도구와 워크플로가 0.0과 1.0 끝점을 기대하기 때문이에요

    1. 255로 나누면 검정과 흰색이 그대로 남아요

    8비트 RGB는 채널마다 0부터 255까지 256개 값을 가져요. 표준 방식은 0을 0.0에, 255를 1.0에 놓아요. 그래서 검은 픽셀을 `0.0`으로 검사하거나, 흰색과 알파 1.0을 특별하게 다루는 코드와 잘 맞아요. 원문도 이 방식이 GPU의 UNORM-to-float 변환과 같은 방향이라고 짚어요. 2

    256 방식은 출발점이 달라요. `0`이 `0.5 / 256`, 즉 약 `0.001953125`가 돼요. 이 값은 수학적으로는 구간의 가운데라는 장점이 있지만, 처리 코드 입장에서는 검정이 더 이상 0.0이 아니에요. 마스크, 알파, 임곗값 처리처럼 `0`과 `1`에 의미를 두는 그래픽스 코드에서는 이 차이가 의외로 불편해질 수 있어요.

    2. 256 방식이 끌리는 이유도 있어요

    255 방식에는 직관을 흔드는 부분이 있어요. `[0, 1]` 범위의 균일 난수를 만든 뒤 다시 8비트 정수로 반올림하면, 양 끝의 0과 255가 다른 값보다 절반 정도 덜 나올 수 있어요. 끝점 구간이 다른 구간보다 좁게 보이기 때문이에요. 2

    반대로 256 방식은 각 정숫값을 구간 중앙에 놓아요. 그래서 디더링처럼 잡음을 더하고 다시 양자화하는 작업에서는 경계 처리를 단순하게 만들 수 있어요. Andrew Kesler의 2015년 글도 색상 깊이를 바꿀 때 이런 관점을 옹호해요. 다만 이 장점은 저장과 로딩 방식을 모두 통제할 때 더 의미가 있어요. 3

    3. 일반 이미지 처리에서는 255가 더 안전해요

    원문의 결론은 실용적이에요. 다른 사람이 만든 이미지를 읽고 처리한다면 255로 정규화하는 쪽이 낫다고 봐요. 이미지가 어떤 방식으로 양자화됐는지 알 수 없고, 대부분의 그래픽스 API와 이미지 처리 코드는 0과 255를 각각 0.0과 1.0으로 보는 관습 위에 쌓여 있기 때문이에요. 1

    256 방식은 틀린 공식이라기보다 다른 약속에 가까워요. 입력을 만들고 저장하고 다시 읽는 전체 과정을 직접 설계한다면 선택지가 될 수 있어요. 하지만 외부 이미지, 기존 라이브러리, 동료 코드가 섞이는 순간에는 작은 오프셋이 버그처럼 보일 수 있어요.

    왜 중요한가요

    이 글이 재미있는 이유는 정답 하나를 외우게 해서가 아니에요. `255냐 256이냐`라는 질문은 픽셀값이 점을 뜻하는지, 구간을 뜻하는지, 끝점에 특별한 의미를 둘지 묻는 문제예요. 같은 숫자라도 렌더링, 이미지 처리, 신호 처리, 하드웨어 출력에서는 해석이 달라질 수 있어요. 2

    개발자가 실제로 가져갈 기준은 단순해요. 공개 이미지와 일반 그래픽스 워크플로에서는 255를 쓰는 편이 호환성이 좋아요. 디더링이나 자체 포맷처럼 양자화 모델을 끝까지 통제하는 작업이라면 256 방식을 검토해 볼 수 있어요. 중요한 건 두 방식을 한 파이프라인에서 섞지 않는 거예요. 3

    참고 자료

    1. RGB 값을 255로 나눠 정규화해야 할까, 256으로 나눠야 할까? — GeekNews
    2. Should you normalize RGB values by 255 or 256? — 30fps.net
    3. Converting Color Depth — eastfarthing.com
Designed by Tistory.