화상 처리로 화질의 개선을 시도하기
〈화상정보처리〉 수업 노트
화상 정보는 기하 변환을 거치거나, 인터넷을 통해 계속 전달되면서 캡처되고, 이미지 압축 알고리즘을 연이어 거치는 과정에서 화질이 저하된다. 이러한 사례뿐 아니라 원래부터 화질이 좋지 않은 화상을 대상으로 화질 개선을 시도할 수 있다.
화질은 최근에 딥러닝을 도입하여 이미지를 고해상도 이미지로 재생성하는 것 외에도 전통적인 다른 수단을 사용할 수도 있다. 같은 입력을 두고서도 밝게 보이게, 경계를 또렷하게, 또는 파일 크기를 줄이면서도 그럴듯하게 보이도록 가공하는 것 모두 화질을 개선하는 방법이 될 수 있다.
*참고: OLED 디스플레이가 LCD 디스플레이보다 화질이 좋다고 느껴지는 이유 중 하나도 같은 맥락에서 이해할 수 있다. 각 픽셀 소자를 완전히 끌 수 있는 OLED와 달리, LCD는 항상 백라이트가 켜져 있어 검은색을 제대로 표현하지 못한다. 여기서 나타나는 명암비의 차이가 사람에게 있어 화질의 차이로 인식된다.
그레이스케일과 컬러 화상
화상 처리에서 다루는 화상은 크게 그레이스케일 화상과 컬러 화상으로 나뉜다. 그레이스케일 화상(grayscale image)은 각 화소의 값이 흑과 백 사이의 무채색 농도만으로 표현되는 화상이다. 반면 컬러 화상(color image)은 다양한 색을 사용해 표현되는 화상으로, 그 안에서도 다시 두 가지로 구분된다.
풀컬러 화상(full color image)은 자연계에 존재하는 색 분포에 근접한 색수로 표현된 화상을 가리키며, 통상 24비트, 즉 약 1,677만 색으로 표현된 것을 말한다. 이에 비해 인덱스 컬러 화상(indexed color image)은 풀컬러보다 훨씬 적은 제한된 수의 색(팔레트)으로만 표현된 화상이다. GIF처럼 최대 256색으로 색 수가 제한된 파일 형식이 인덱스 컬러의 대표적인 사례이다.
컬러 화상의 표색계
컬러 화상에서 “색”은 단순히 감각적으로 다루는 대상이 아니라 수치로 정의하고 조작해야 하는 데이터다. 이를 위해 색을 수치로 체계화한 표색계(color space)가 필요하다.
CIE 표색계
국제조명위원회(CIE)는 색을 정밀하게 정의하기 위한 여러 표색계를 규정하고 있다. 1931년에 제정된 CIE RGB 표색계는 원색을 R(700nm), G(546.1nm), B(435.8nm)의 세 단일 파장으로 정의하며, 디스플레이 출력 지시 등 실무에서 가장 널리 활용된다.
같은 해 정의된 CIE XYZ 표색계는 RGB 가법 혼색만으로는 표현하기 어려운 단일 파장광까지도 포괄할 수 있도록 설계된 체계다. 이 표색계에서 Y 성분은 휘도(luminance)로 정의되며, X와 Z는 인간 시각의 원추세포(LMS) 감도에 근사하도록 삼자극값을 설계한 결과물이다. 다만 XYZ 표색계는 수치와 색의 대응이 직관적이지 않다는 단점이 있어, XYZ에서 색도(chromaticity)만을 추출해 색의 절대적인 성질을 보기 쉽게 표현하는 xyY 표색계가 파생되었다.
균등색공간으로는 1976년에 정의된 CIELUV(L, u, v)와 CIELAB(L, a, b)가 있다. CIELUV는 xy 색도도에서 파장 간격의 불균등성을 완화하려는 목적에서 고안되었으며, 발광 기반의 디스플레이 응용이나 컴퓨터 그래픽스에서 활용된다. CIELAB는 장치 차이와 인간 지각 차이를 반영한 색차(color difference) 계산에 널리 쓰이는 표색계로, 두 색 사이의 거리를 유클리드 거리로 정의함으로써 색차를 수치로 정량화할 수 있다.
HSV 표색계
HSV(또는 HSI) 표색계는 색을 색상(Hue), 채도(Saturation), 명도/강도(Value/Intensity)로 분해하여 표현한다. RGB가 장치의 혼색 메커니즘을 반영한 체계라면, HSV는 사람이 색을 직관적으로 인지하는 방식에 더 가깝게 설계되어 있다. 이러한 특성 덕분에 색상 선택 UI나 페인트 툴에서 널리 사용된다.
맨셀 표색계
맨셀 표색계(Munsell color system)는 색을 색상(Hue), 명도(Value), 채도(Chroma)의 세 속성으로 표현한다. 가시광의 색을 R·Y·G·B·P의 5색으로 나누고, 여기에 중간색인 YR·GY·BG·PB·RP를 추가해 총 10계열을 구성한다. 이를 다시 10분할하면 100색상 체계가 완성된다. 이 색상들을 원형으로 배열한 것을 색상환(hue circle)이라 부른다.
기타 표색계
이 외에도 용도에 따라 다양한 표색계가 사용된다. CMYK는 프린터와 인쇄에서 쓰는 표색계로, 빛의 RGB는 더할수록 밝아지는 가법 혼색인 데 반해, 잉크는 겹칠수록 어두워지는 감법 혼색 원리를 따른다. YIQ는 NTSC TV 방송 송신에서 사용하던 표색계로, 휘도 Y와 오렌지–시안 성분인 I, 녹–마젠타 성분인 Q의 세 요소로 표현된다. YUV, YCbCr, YPbPr은 모두 휘도 Y와 두 개의 색차 신호로 이루어진 체계로, JPEG와 MPEG 등 화상 압축 및 전송 분야에서 자주 등장한다.
히스토그램
그레이스케일 화상에서 히스토그램이란 화소 휘도의 빈도 분포를 나타내는 도표로, 가로축에 휘도(농도), 세로축에 출현 빈도(픽셀 수) 또는 출현율을 표시한다. 그레이스케일에서는 이것이 곧 농도 분포 자체이므로 농도 히스토그램(density histogram)이라고도 부른다.
컬러 화상의 경우 히스토그램을 표현하는 방법은 두 가지로 나뉜다. 하나는 표색계의 각 채널별로 1차원 히스토그램을 나란히 그리는 방법이고, 다른 하나는 예컨대 RGB라면 R·G·B 각 채널을 축으로 하는 3차원 공간을 구성하고 각 점의 빈도를 밝기 등으로 표현하는 방법이다.
밝기 개선: 히스토그램 평균 이동
화상이 전반적으로 너무 어둡거나 밝을 때에는 전체 화소의 평균 휘도를 이동시키는 조작이 필요하다. 이는 히스토그램 전체를 좌우로 평행 이동시키는 것과 동치다. 평균값 보정량을 $\Delta I$라 하면 각 화소의 휘도는 다음과 같이 갱신된다.
\[I_{\mathrm{new}}(x, y) = I_{\mathrm{old}}(x, y) + \Delta I\]실제 구현에서는 계산 결과가 표현 가능한 범위를 벗어나지 않도록 클리핑(clipping) 처리가 수반된다.
대비 개선: 히스토그램 분산 조작
대비는 히스토그램의 분산, 즉 퍼짐 정도와 밀접하게 연결된다. 히스토그램의 퍼짐이 작으면 화소 휘도가 좁은 범위에 밀집되어 화상이 밋밋하게 보이고, 퍼짐이 크면 어두운 영역과 밝은 영역이 잘 분리되어 화상이 또렷하게 보인다. 대비를 개선하는 대표적인 방법으로는 히스토그램 스트레치와 히스토그램 평탄화가 있다.
히스토그램 스트레치
히스토그램 스트레치(histogram stretching)는 원 화상의 최소·최대 휘도를 표현 가능한 전체 범위로 선형 매핑하는 방식이다. $L_{\mathrm{MAX}}$를 양자화 비트 수로 나타낼 수 있는 최대 휘도 값, $I_{\mathrm{MIN}}$과 $I_{\mathrm{MAX}}$를 원 화상 히스토그램의 최소·최대 휘도라 하면, 변환식은 다음과 같다.
\[I_{\mathrm{new}}(x, y) = L_{\mathrm{MAX}} \cdot \frac{I_{\mathrm{old}}(x, y) - I_{\mathrm{MIN}}}{I_{\mathrm{MAX}} - I_{\mathrm{MIN}}}\]실용적으로는 앞서 다룬 평균 이동(밝기 조정)과 함께 사용하는 경우가 많다.
히스토그램 평탄화
히스토그램 평탄화(histogram equalization)는 특정 휘도에 픽셀이 편중된 상태를 완화하여, 전체 휘도 범위에 걸쳐 화소가 고르게 분포하도록 재배치하는 방법이다. 절차를 구체적으로 서술하면 다음과 같다.
먼저 원 화상의 히스토그램을 $g(x)$라 하고, 이로부터 누적 히스토그램 $G(x)$를 구성한다.
\[G(x) = \int_{0}^{x} g(t)\,dt\]여기서 $x$는 화소의 휘도 값이다. 이어서 평탄화된 히스토그램에서 각 구간의 목표 빈도 $p$를 설정하고, $G(x) \approx kp$를 만족하는 휘도값 $x$를 찾는다($k = 1, 2, \dots$). 원 화상에서 $x_k \le x < x_{k+1}$인 구간에 속하는 화소들은 해당 구간의 가중 평균 휘도 $q$로 치환된다.
\[q = \frac{\int_{x_k}^{x_{k+1}} t\,g(t)\,dt}{\int_{x_k}^{x_{k+1}} g(t)\,dt}\]필요에 따라 평탄화 결과에 다시 스트레치를 적용해 최종 대비를 정돈할 수도 있다.
그레이스케일 화상의 제한 계조 표현
그레이스케일 화상에는 매우 다양한 휘도가 존재하지만, 이를 제한된 수의 대표 휘도로 치환하여 표현하는 경우도 있다. 아날로그 그레이스케일을 디지털로 변환할 때 수행하는 양자화(quantization) 자체가 제한 계조 표현의 한 형태라고 볼 수 있다. 대표 휘도를 적절히 선택하면 대비가 향상되거나 저장 공간을 절약할 수 있지만, 잘못 선택하면 오히려 화질 열화가 심해진다.
히스토그램 균등 할당의 개념도: 사진과 같이 동간격으로 히스토그램을 나누어 대표 휘도를 할당한다.
히스토그램 균등 할당을 적용한 실제 화상과 히스토그램. 원 화상은 휘도가 좁은 범위에 몰려 있지만, 제한 계조 표현에서는 전체 휘도 범위에 걸쳐 대표 휘도가 고르게 분포한다.
대표 휘도를 결정하는 방법으로는 여러 가지가 제안되어 있다. 히스토그램의 분포와 무관하게 균등한 간격으로 대표 휘도를 배치하는 히스토그램 균등 할당, 빈도가 높은 구간에 대표 휘도를 더 많이 할당하는 히스토그램 빈도 우선 할당, 히스토그램의 중앙값을 기준으로 이분 트리처럼 분할해 나가는 중간값 컷(median cut), 그리고 군집화(clustering) 등의 분류 기법을 이용하는 방법이 있다.
히스토그램 빈도 우선 할당의 개념도: 히스토그램에서 빈도가 높은 구간에 더 많은 대표 휘도를 할당한다.
중간값 컷의 개념도: 히스토그램을 중앙값 기준으로 이분 트리처럼 분할해 나가며 대표 휘도를 할당한다.
군집화를 이용한 대표 휘도 결정의 개념도: 히스토그램을 군집화하여 대표 휘도를 결정한다.
대표 휘도를 정한 뒤에는 각 화소를 어느 대표 휘도에 대응시킬지 결정해야 한다. 가장 가까운 대표 휘도로 할당하는 유클리드 거리 기준이 기본적이며, 대표 휘도 주변의 분포(분산과 상관)까지 고려하는 마할라노비스 거리 기준을 사용하면 더 정교한 할당이 가능하다.
디더와 오차 확산
제한 계조로 변환하면, 원래는 연속적으로 변화하던 휘도가 계단처럼 나뉘면서 지도의 등고선과 같은 가짜 경계선(artificial edge)이 나타나기 쉽다. 이는 변환 과정에서 고주파 성분이 대폭 제거되거나, 특정 휘도가 공간적으로 몰리는 경향 때문이다. 이러한 부작용을 완화하기 위해 디더(dither)와 오차 확산(error diffusion) 기법이 사용된다.
디더는 제한 계조 변환 과정에서 고주파 성분을 인위적으로 혼입해 계조감을 시각적으로 남기는 방법이다. 랜덤 디더는 원 화상에 균일 난수로 생성한 화이트 노이즈를 더한 뒤 제한 계조 변환을 수행한다. 오더드 디더(ordered dither)는 미리 정해진 규칙적인 패턴(천 무늬처럼 반복되는 형태)을 더하는 방식이다.
오차 확산은 각 화소를 제한 계조로 변환할 때 발생하는 양자화 오차를 소멸시키지 않고 주변 화소에 분배(확산)함으로써, 오차가 국소적으로 누적되지 않도록 조절한다. 이 방식은 프린터 출력에서 널리 활용된다.
랜덤 디더의 계산 과정: 원 화상에 균일 난수로 생성한 노이즈를 더한 뒤 제한 계조 변환을 수행한다.
랜덤 디더를 적용한 실제 화상과 히스토그램. 원 화상은 휘도가 좁은 범위에 몰려 있지만, 제한 계조 표현에서는 전체 휘도 범위에 걸쳐 대표 휘도가 고르게 분포한다.
오더드 디더의 계산 과정: 패턴을 더한 뒤 제한 계조 변환을 수행한다.
오더드 디더를 적용한 실제 화상과 히스토그램. 원 화상은 휘도가 좁은 범위에 몰려 있지만, 제한 계조 표현에서는 전체 휘도 범위에 걸쳐 대표 휘도가 고르게 분포한다.
오차 확산의 계산 과정: 각 화소를 제한 계조로 변환할 때 발생하는 양자화 오차를 주변 화소에 분배(확산)한다.
오차 확산을 적용한 실제 화상과 히스토그램. 원 화상은 휘도가 좁은 범위에 몰려 있지만, 제한 계조 표현에서는 전체 휘도 범위에 걸쳐 대표 휘도가 고르게 분포한다.
화상의 이진화
제한 계조 표현을 극단화하면 화소를 흰색과 검은색 둘 중 하나로만 표현하도록 할 수 있다. 이 방법은 1비트 양자화와 본질적으로 같다. 이진화(2값화)를 수행하려면 흰색과 검은색을 가르는 임계값을 결정해야 하며, 이 임계값을 사전에 고정하는 방법과 화상의 특성에 따라 적응적으로 결정하는 방법으로 나뉜다.
오츠의 이진화(大津の2値化手法)
오츠의 방법(Otsu’s method, 판별분석법)은 임계값을 자동으로 결정하는 대표적인 기법이다. 이진화란 결국 화상의 화소를 두 클래스로 분리하는 문제이므로, “두 클래스가 얼마나 잘 나뉘었는가”를 정량화하는 척도를 설정하고 이를 최대화하는 임계값을 선택하는 것이 핵심이다.
임계값 $T$를 선택하면, 화상의 모든 화소는 휘도가 $T$ 이하인 클래스 1(어두운 영역)과 휘도가 $T$를 초과하는 클래스 2(밝은 영역)로 분할한다. 각 클래스의 화소 수를 $n_1, n_2$, 평균 휘도를 $\mu_1, \mu_2$, 분산을 $\sigma_1^2, \sigma_2^2$라 하고, 화상 전체의 평균 휘도를 $\mu_0$라 하면, 다음 두 가지 분산을 정의할 수 있다.
\[\begin{align*} \sigma_w^2 &= \frac{n_1\sigma_1^2 + n_2\sigma_2^2}{n_1 + n_2} \\ \sigma_b^2 &= \frac{n_1(\mu_1 - \mu_0)^2 + n_2(\mu_2 - \mu_0)^2}{n_1 + n_2} \end{align*}\]클래스 내 분산 $\sigma_w^2$는 각 클래스 내에서 화소 휘도가 얼마나 고르지 않은지를 나타내는 지표로, 가중 평균 분산으로 계산된다. 이 값이 작다는 것은 같은 클래스에 속한 화소들의 휘도가 서로 비슷하다는 의미, 즉 분류가 잘 이루어졌다는 뜻이다. 반면 클래스 간 분산 $\sigma_b^2$는 두 클래스의 평균 휘도 $\mu_1, \mu_2$가 전체 평균 $\mu_0$로부터 얼마나 멀리 떨어져 있는지를 화소 수로 가중하여 나타낸 것이다. 이 값이 클수록 두 클래스의 휘도 중심이 서로 멀리 떨어져 있어 분리가 명확하다고 해석된다.
오츠의 방법은 이 두 분산의 비를 분리도 $S$로 정의하고, 이를 최대화하는 $T$를 임계값으로 채택한다.
\[S = \frac{\sigma_b^2}{\sigma_w^2}\]$S$가 크다는 것은 클래스 내 화소들이 균일하면서($\sigma_w^2$ 작음) 동시에 클래스 사이의 간격이 넓다는($\sigma_b^2$ 큼) 것을 의미하므로, 이 임계값이 화상을 가장 잘 두 영역으로 나눈다고 볼 수 있다. 알고리즘은 $I_{\min}$부터 $I_{\max}$까지 가능한 모든 $T$에 대해 $S(T)$를 계산하고, 그 중 최댓값을 갖는 $T$를 최종 임계값으로 확정한다.
이진화는 앞서 다룬 디더나 오차 확산과 결합하면 단순한 임계값 처리보다 시각적으로 더 나은 결과를 얻을 수 있다.
컬러 화상의 제한 색 표현과 LUT
제한 계조 표현의 발상은 컬러 화상에도 그대로 적용된다. GIF와 같은 인덱스 컬러 포맷이 대표적인 사례로, 색 수를 줄이기 위한 대표색 선택 방법으로는 히스토그램 균등 할당, 사용 빈도가 높은 색을 우선하는 방식, 군집화 기법, 그리고 딥러닝을 활용한 방법 등이 있다.
원래의 휘도 또는 색을 제한된 대표 휘도·색으로 대응시키는 표를 룩업 테이블(LUT; Look-up table)이라 한다. LUT는 색 수 감소에만 쓰이는 것이 아니라, 디스플레이 표시나 프린터 출력처럼 디지털 수치와 실제 발색 결과 사이의 불일치를 보정하는 데도 중요하게 활용된다. 이러한 출력 보정은 감마 보정(gamma correction)이라는 이름으로 자주 등장한다.















