인하대학교 공학대학원(인공지능융합전공)/영상처리

Image Enhancementin the Spatial Domain

복리 엔지니어 2026. 10. 8. 20:27
LECTURE NOTE · Week 4

공간 영역에서의 영상 향상

Image Enhancement in the Spatial Domain — 포인트 프로세싱부터 공간 필터링까지
🎓 인하대 공학대학원 📘 IGZ5017 디지털 영상처리 👤 Prof. B. C. Song

디지털 영상처리 4주차 정리입니다. 이번 시간은 공간 영역(Spatial Domain)에서 영상을 개선하는 방법을 다뤘습니다. 크게 포인트 프로세싱(변환 함수, 히스토그램 평활화, 히스토그램 매칭)과 공간 필터링(컨볼루션, 스무딩)으로 나뉘며, 샤프닝 필터는 다음 시간으로 넘어갔습니다.

01처리 도메인과 두 갈래 길

영상 처리를 어디서 할 것인가에 따라 두 가지로 나뉩니다. Spatial Domain은 픽셀 값을 직접 조작하는 것이고, Frequency Domain은 푸리에 변환으로 주파수 영역에서 처리하는 것입니다. 이번 수업에서 다루는 건 전자입니다.

Processing Domain

그리고 공간 영역 안에서도 마스크(윈도우) 크기에 따라 다시 둘로 갈립니다.

Mask or Window
구분 Point Processing Filtering
마스크 크기 1×1 (자기 자신만) 3×3, 5×5, 7×7 … (이웃 포함)
출력 결정 요소 변환 함수 s = T(r) 마스크 계수(filter coefficients)
예시 임계값 이진화, 반전, 히스토그램 평활화 스무딩(블러), 샤프닝
💡 Enhancement의 정의 — "개선"은 주관적이다
영상 향상은 특정 목적에 더 적합하게 만드는 것이지, 객관적으로 좋아지는 게 아닙니다. 어떤 의사가 "나는 병변이 하얀 것보다 검게 보이는 게 더 잘 보인다"고 하면 반전 영상이 곧 개선입니다. 한 영상에 잘 듣는 기법이 다른 영상에는 역효과일 수 있다는 것이 이 장의 전제입니다.

02변환 함수 (Transformation Function)

입력 화소값 r이 들어가면 출력 화소값 s가 나오는 함수 하나로 영상 전체를 바꿉니다. 곡선의 모양이 곧 목적입니다.

Basic intensity transformation functions
Identity, Negative, Log, Inverse log, n제곱/n제곱근 — 커브 모양이 전부다

① Image Negative — s = L−1−r

가장 단순한 반전입니다. 밝은 건 어둡게, 어두운 건 밝게. 어두운 영역에 묻혀 있는 흰색·회색 디테일을 살릴 때 유용합니다.

Image Negatives
Negative mammogram example
유방 촬영 영상 — 반전하면 병변 분석이 더 쉬워진다

② Log / Inverse Log — s = c·log(1+r)

Log Transformations

교수님이 칠판으로 직관을 설명해 주신 부분이 핵심입니다. 로그 커브는 어두운 쪽 두 화소의 간격을 벌리고, 밝은 쪽 두 화소의 간격을 좁힙니다. 그러면 결과가 이렇게 됩니다.

어두운 쪽 → 밝기 레벨 격차가 커짐 → Contrast 증가
밝은 쪽 → 격차가 좁아짐 → Contrast 감소
따라서 전반적으로 어두운 영상에 로그 변환이 효과적. 반대로 밝은 영상에는 Inverse Log
📌 밝기(Brightness) vs 대비(Contrast) — 수업 중 질문
수강생이 "결국 밝기 값을 바꾸는 것 아니냐"고 물었고, 교수님 답은 이랬습니다.

밝기는 영상 전체가 어둡냐 밝냐입니다. 모든 픽셀에서 128을 빼면 영상이 통째로 어두워지죠. 반면 대비는 같은 장면 안에서 A 지점과 B 지점의 밝기 레벨 차이입니다. A가 100, B가 111이면 구분이 안 되지만, A가 80, B가 130이면 선명하게 보입니다. 절대적인 밝기 레벨과는 다른 개념입니다.

③ Power-Law (감마 보정) — s = c·rγ

Power-Law Transformations
  • γ < 1 → 로그 함수와 비슷한 효과 (어두운 영상에 적합)
  • γ > 1 → Inverse log와 비슷한 효과 (밝은 영상에 적합)
  • 로그와 유사하지만 커브 형태가 미묘하게 달라서 영상에 따라 결과가 갈립니다. 어느 쪽이 좋고 나쁜 문제가 아니라 내 영상에 무엇이 맞느냐의 문제
Gamma correction example
밝고 대비가 낮은 항공 사진에 γ = 3, 4, 5를 적용 — 4~5쯤에서 확 선명해진다

03Piecewise-Linear — 함수가 정해지면 한계가 있다

로그나 감마 함수는 어두운 쪽 또는 밝은 쪽에 몰려 있는 영상에만 효과적입니다. 그런데 화소값이 128 근처 중앙에 몰려 있는 흐리멍덩한 영상이라면? 쓸 만한 함수가 없습니다.

그럴 때 쓰는 것이 Piecewise-Linear Transformation입니다. 컨트롤 포인트 두 개를 찍어 조각별 직선으로 함수를 직접 정의하면, 기울기가 1보다 큰 구간의 대비를 확 키울 수 있습니다. 이것이 Contrast Stretching입니다.

Contrast Stretching
컨트롤 포인트를 극단으로 밀면 Thresholding(이진화)이 된다
⚠️ 공통된 한계
장점은 함수 형태를 임의로 복잡하게 만들 수 있다는 것, 단점은 사용자가 직접 지정해야 한다는 것입니다. 로그든 감마든 Piecewise-Linear든, 결국 특정 함수에 의존합니다. 주어진 영상에 가장 잘 맞는 변환을 매번 사람이 찾는 건 쉽지 않습니다.
Can be adaptive to a given image?
그래서 나온 질문 — 영상에 맞춤형으로 적응할 수는 없을까?

04히스토그램 평활화 (Histogram Equalization)

그 답이 히스토그램 평활화입니다. 먼저 히스토그램부터 보면, h(rk) = nk, 즉 각 밝기 레벨이 몇 개의 화소를 갖는지의 분포입니다. 이를 전체 화소 수로 나눈 정규화 히스토그램 p(rk) = nk/n은 곧 그 영상 화소값의 확률 분포가 됩니다.

Histogram Processing
Four image types and their histograms
같은 장면, 네 가지 히스토그램 — 어두운 / 밝은 / 저대비 / 고대비

네 영상을 비교해 보면 답이 보입니다. 어두운 영상은 왼쪽에, 밝은 영상은 오른쪽에, 저대비 영상은 중앙에 몰려 있고, 가장 보기 좋은 영상은 분포가 넓게 퍼져 있습니다. 그렇다면 몰려 있는 히스토그램을 넓게 펴주면(equalize) 되겠다는 발상입니다.

💡 정답은 CDF(누적분포함수)다
그 영상의 히스토그램을 누적한 함수(CDF) 자체가 곧 우리가 찾던 변환 함수입니다. 영상마다 히스토그램이 다르니, CDF도 영상마다 다르게 나옵니다. 즉 자동으로 맞춤형이 되는 것이죠.
Define a transformation function (CDF)

교수님은 증명 대신 직관으로 설명하셨는데, 이게 훨씬 와닿았습니다. 어두운 영상의 CDF를 그려보면 초반에 급격히 올라갔다 포화되는 모양 — 바로 로그 함수 모양입니다. 밝은 영상의 CDF는 뒤에서 급격히 올라가는 Inverse log 모양, 중앙에 몰린 영상의 CDF는 가운데 기울기가 큰 Piecewise-Linear 모양이 나옵니다.

✓ 결론: 앞에서 배운 로그·감마·구간선형 함수를 손으로 찾아다닐 필요가 없다. 영상이 들어오면 히스토그램 구하고 CDF 구하면 끝.

실제 계산 — 3bit 64×64 예제

3bit 64x64 histogram equalization example

여기서 중요한 실무 포인트가 하나 나옵니다. CDF를 그대로 적용하면 출력이 1.4, 2.8, 3.5 같은 실수가 나오는데, 3bit 영상의 출력은 정수여야 합니다. 그래서 라운딩(양자화)을 거쳐야 3bit 입력이 3bit 출력으로 나옵니다.

결과 히스토그램을 보면 이론처럼 완벽하게 균일(uniform)하지는 않습니다. 이유는 두 가지입니다. (1) 샘플 개수가 적고(64×64), (2) 이산 공간이라 라운딩이 들어가기 때문입니다. 그래도 원본보다는 분명히 펴졌습니다.

Histogram equalization on a landscape image
빨간 선이 CDF — 평활화 후 CDF가 거의 직선이 된다
Histogram equalization results on four images
입력이 어둡든 밝든 저대비든, 평활화 결과는 거의 같은 영상으로 수렴한다

참고로 포토샵이나 영상 편집 툴의 자동 보정 기능 중 "Histogram Equalization" 또는 "HE"라고 적힌 메뉴가 바로 이 연산입니다.

05평활화가 망하는 경우, 그리고 히스토그램 매칭

그럼 모든 저대비 영상에 히스토그램 평활화를 쓰면 될까요? 아닙니다. 대표적인 실패 사례가 이 영상입니다.

An image and its histogram
대부분 어두운 쪽에 몰려 있지만, 밝은 쪽(192 근처)에도 작은 봉우리가 있다
Histogram equalization result - not satisfactory
⚠️ 왜 망했나
어두운 쪽에 값이 몰려 있다가 중간은 텅 비고, 밝은 쪽에 작은 덩어리가 있는 분포였습니다. 이 히스토그램의 CDF를 구하면 0이었던 화소값까지 128 근처로 확 올라가 버립니다. 원래 0~255 전 범위를 쓰던 영상이 변환 후에는 대략 150~255만 쓰게 되고, 결과적으로 영상이 전체적으로 붕 뜬 듯 허옇게 나옵니다. 전체 분포를 고르게 가진 영상에는 아예 적용하지 않는 편이 낫습니다.

해법 — Histogram Matching (Specification)

Histogram Matching (Specification)

평활화의 단점은 출력 영상의 형태가 딱 한 가지(균일 분포)로 고정된다는 점입니다. 히스토그램 매칭은 내가 원하는 히스토그램을 직접 설계해서 그 모양으로 만들어 줍니다. 균일 분포일 필요가 없다는 게 핵심입니다.

📌 원리 — 평활화를 두 번 쓴다
① 입력 영상 r을 평활화 → 균일 분포인 중간 변수 s = T(r)
② 내가 설계한 목표 히스토그램 pz(z)도 평활화하는 함수 G(z)를 구함 → 역시 균일 분포
③ G는 CDF이고 CDF는 단조 증가(monotonically increasing) 함수라서 역함수 G-1이 존재
④ 따라서 z = G-1[T(r)] = G-1(s) — 평활화한 뒤 역변환을 한 번 더 해주면 끝
Histogram specification solution
(1)이 G(z), (2)가 역변환 G⁻¹(s)
Result image and its histogram
평활화 결과보다 훨씬 자연스럽고, 어두운 영역의 디테일도 살아난다

다만 교수님도 인정하신 한계가 있습니다. 목표 히스토그램을 사람이 보고 시행착오로 설계해야 한다는 점에서 다분히 휴리스틱입니다. 그래서 이런 영상을 잘 지역화(localize)해서 처리하는 알고리즘들이 계속 개발되어 왔고, 요즘은 뉴럴 네트워크 기반 기법들이 좋은 성능을 냅니다. 다만 교수님 말씀대로 그 안에 들어가는 코어 컨셉은 결국 이것과 같습니다.

06공간 필터링 — 컨볼루션

여기서부터는 이웃 화소(neighborhood)를 함께 쓰는 필터링입니다. 3×3이든 7×7이든, 윈도우 안의 화소들에 각각 필터 가중치(filter coefficient)를 곱해서 전부 더하는 것 — 즉 가중 평균입니다. 식으로 쓰면 컨볼루션이 됩니다.

Linear Filtering: Convolution

마스크는 보통 홀수 크기(3×3, 5×5, ...)를 씁니다. 중심이 명확해야 하기 때문입니다. 그리고 마스크 계수가 무엇이냐에 따라 연산의 성격이 완전히 달라집니다 — 같은 컨볼루션인데 계수만 바꾸면 블러가 되기도, 샤프닝이 되기도 합니다.

07스무딩 필터 — Box vs Gaussian

스무딩의 목적은 두 가지입니다. 블러링(작은 디테일 제거, 객체 추출 전처리)과 노이즈 제거입니다. 밤에 휴대폰으로 찍은 사진을 확대하면 보이는 그 지글거림, 그걸 걷어내는 것이 스무딩 필터의 역할입니다.

3x3 Smoothing Linear Filters
(a) Box kernel — 전부 1/9, (b) Gaussian kernel — 중심에 큰 가중치
구분 Box Filter (산술평균) Gaussian Filter (가중평균)
가중치 모두 동일 (3×3이면 전부 1/9) 거리가 멀수록 작게
문제점 100m 떨어진 화소와 자기 자신이 같은 가중치 — 불공평 계산이 조금 더 복잡
결과 프로파일 꺾이는 지점 발생 → 계단진 라인이 보임 미분 불가능한 점이 없음 → 자연스러움
💡 "가우시안"은 엄밀한 가우시안이 아니어도 된다
교재의 예시는 가우시안 함수에서 거리별로 정확히 계산한 값이지만, 실무에서는 "자기 자신이 가장 중요하고, 멀수록 가중치를 줄인다"는 컨셉만 지키면 통칭 가우시안 필터링이라고 부릅니다.
Box filtering result
3×3 → 11×11 → 21×21 — 윈도우가 커질수록 블러가 강해진다
Gaussian filtering result
Box vs Gaussian smoothing profile
프로파일을 보면 차이가 명확하다 — Box는 둔탁하게 꺾이고, Gaussian은 매끄럽다

08로우패스 필터의 활용 2가지

① Segmentation 전처리

Lowpass filtering + thresholding for segmentation
허블 망원경 영상 → 가우시안 블러 → 임계값 처리 → 큰 객체만 남음

성운 영상에서 일정 크기 이상의 객체만 뽑고 싶을 때, 블러 → Thresholding 순서로 처리합니다. 블러를 걸면 자잘한 점들은 노이즈처럼 사라지고 큼지막한 것만 남아서, 임계값만 걸면 마스킹 영상이 나옵니다.

② Shading Correction (음영 보정)

Shading correction with lowpass filtering
(a) 음영이 낀 체크무늬 → (b) 추출한 음영 패턴 → (c) 나눠서 제거한 결과

이게 개인적으로 가장 재미있었던 예제입니다. 체크보드 패턴에 대각선 방향 음영이 낀 영상에서 음영만 걷어내는 방법인데, 원리가 주파수 관점으로 깔끔하게 설명됩니다.

체크 패턴 = 일정 간격으로 흑백이 반복 → 고주파
음영(Shading) = 천천히 변하는 밝기 → 저주파
큰 사이즈의 로우패스 필터를 걸면 고주파인 체크 패턴은 사라지고 음영만 남음 → 음영 추정치 획득
원본을 이 음영 영상으로 픽셀 단위 나눗셈(dividing) → 어두웠던 영역이 밝아지며 음영 제거
"

요즘은 뉴럴넷으로 더 좋은 알고리즘을 만들지만,
그 안에 들어가는 코어 컨셉은 결국 이것과 같습니다.

— 히스토그램 매칭을 설명하며

09정리 & 다음 시간

기법 언제 쓰나 한계
Log / Power-Law 한쪽(어두움/밝음)에 몰린 영상 함수 형태가 고정, 조절 범위 제한적
Piecewise-Linear 중앙에 몰린 영상, 특정 구간 타겟팅 사용자 입력이 많이 필요
Histogram Equalization 영상 맞춤형 자동 처리, 한쪽에 몰린 경우 출력이 한 가지, 분포가 분산된 영상엔 역효과
Histogram Matching 밝은 영역과 어두운 영역이 공존 목표 히스토그램 설계가 휴리스틱
Smoothing Filter 노이즈 제거, 세그멘테이션 전처리, 음영 보정 디테일도 함께 사라짐

가장 인상 깊었던 건 "CDF가 곧 맞춤형 변환 함수"라는 흐름이었습니다. 로그 함수, 감마 함수, 구간선형 함수를 하나씩 배우면서 "매번 이렇게 손으로 골라야 하나" 싶었는데, 히스토그램을 누적하기만 하면 그 영상에 딱 맞는 커브가 자동으로 나온다는 전개가 깔끔했습니다. 각 함수를 먼저 배운 이유도 여기에 있었던 셈입니다.

음영 보정 예제도 좋았습니다. 블러 필터 하나로 저주파 성분만 추출해 나눠버린다는 발상은, 뒤에 배울 주파수 영역 처리와 자연스럽게 연결되는 지점이라 미리 감을 잡기 좋았습니다.

📍 다음 시간: Sharpening Spatial Filters — 1차/2차 미분, Laplacian, Unsharp Masking, Gradient(Sobel) 연산자
📌 디지털 영상처리 Week 4 정리였습니다. 슬라이드 이미지는 강의 자료에서 발췌했습니다.