OpenCV 비전 실무4장 · 채널 처리와 히스토그램 분석9 / 21← 이전목차다음 →MetaContents

4장. 채널 처리와 히스토그램 분석

밝기 분포 읽기

건강 검진표의 숫자 두 개, 키의 평균과 들쭉날쭉한 정도만 알아도 반 학생들이 어떤지 짐작할 수 있습니다. 사진도 흑백 히스토그램의 막대가 어디에 모였는지(평균)와 얼마나 퍼졌는지(표준편차)로 밝기를 진단합니다.

어두운 사진은 왼쪽, 밝은 사진은 오른쪽, 대비가 낮은 사진은 가운데에 좁게, 고른 사진은 넓게 퍼진 막대 모양을 견준 그림

그림의 네 상자는 히스토그램의 네 가지 모양입니다. 어두운 사진은 막대가 왼쪽(0 쪽)에, 밝은 사진은 오른쪽(255 쪽)에 모입니다. 대비가 낮은 사진은 가운데에 좁게 모이고, 고른 사진은 넓게 퍼집니다. 여기서 막대가 모인 자리가 키의 평균이고, 퍼진 너비가 들쭉날쭉한 정도입니다.

같은 거리 장면을 정상, 어두움, 밝음, 대비 낮음으로 만든 네 그림과 각각의 흑백 히스토그램

같은 장면을 노출만 바꿔 만든 가상의 그림 네 장입니다. 막대는 밝기를 8 씩 묶은 32개 구간으로 그렸습니다. 어두움은 막대가 왼쪽에 몰려 평균이 42, 밝음은 오른쪽에 몰려 평균이 204 입니다. 대비 낮음은 평균이 정상과 비슷한 126 인데 막대가 가운데에 좁게 모여 표준편차가 20 으로 작습니다. 그래서 평균 하나로는 대비 낮은 사진을 가려낼 수 없고, 표준편차를 함께 봐야 합니다.

표준편차를 손으로 계산하기

표준편차는 "값들이 평균에서 평균적으로 얼마나 떨어져 있나"입니다. 픽셀 8개의 밝기로 계산해 봅니다.

단계퍼진 픽셀 8개모인 픽셀 8개
밝기90, 110, 110, 110, 120, 120, 140, 160114, 118, 118, 118, 120, 120, 124, 128
① 평균960 ÷ 8 = 120960 ÷ 8 = 120
② 평균과의 차이-30, -10, -10, -10, 0, 0, 20, 40-6, -2, -2, -2, 0, 0, 4, 8
③ 차이를 제곱900, 100, 100, 100, 0, 0, 400, 160036, 4, 4, 4, 0, 0, 16, 64
④ 제곱의 평균3200 ÷ 8 = 400128 ÷ 8 = 16
⑤ 제곱근400 의 제곱근 = 2016 의 제곱근 = 4

②의 차이를 그냥 더하면 빼기와 더하기가 지워져 0 이 됩니다. 그래서 ③에서 제곱해 모두 양수로 만들고, ⑤에서 제곱근으로 원래 단위로 되돌립니다. 두 묶음은 평균이 120 으로 같지만, 퍼진 묶음의 표준편차는 20, 모인 묶음은 4 입니다. 대비 낮은 사진이 바로 "모인 묶음"입니다.

진단에 쓰는 숫자

숫자구하는 법알려 주는 것
평균gray.mean()사진이 전체로 어두운지 밝은지
표준편차gray.std()대비가 높은지 낮은지
아주 어두운 칸 비율(gray < 50).mean()검게 뭉개진 곳이 얼마나 되는지
아주 밝은 칸 비율(gray > 205).mean()하얗게 날아간 곳이 얼마나 되는지

짧은 예시

Python
import numpy as np

spread = np.array([90, 110, 110, 110, 120, 120, 140, 160])
narrow = np.array([114, 118, 118, 118, 120, 120, 124, 128])

# 손계산 ①~⑤를 그대로 코드로 옮긴다
diff = spread - spread.mean()                    # ② 평균과의 차이
print(float(np.sqrt((diff ** 2).mean())))        # ③④⑤ → 결과: 20.0

# NumPy 의 std(standard deviation) 는 같은 계산을 한 번에 한다
print(float(spread.std()), float(narrow.std()))  # 결과: 20.0 4.0

np.sqrt 는 square root(제곱근)를 줄인 이름입니다.

주의할 점

  • 밝기 분포는 흑백으로 바꿔서 봅니다. 컬러 그림을 그대로 mean() 하면 B, G, R 세 채널을 섞은 평균이 나옵니다.
  • 원래 어두운 장면(밤하늘)이나 원래 흰 장면(눈밭)도 있습니다. 숫자는 "확인해 볼 사진"을 골라 줄 뿐, 잘못 찍었다는 판정은 사람이 내립니다.
← 이전 절4장 · cv2.calcHist 의 인자다음 절 →4장 · 컬러 히스토그램