OpenCV 비전 실무16장 · AI 데이터 정제와 데이터 증강11 / 21← 이전목차다음 →MetaContents

16장. AI 데이터 정제와 데이터 증강

밝기·색·노이즈 증강

같은 과일 가게라도 아침 햇살 아래, 흐린 오후, 형광등 켠 저녁에 찍은 사진은 밝기와 색이 조금씩 다릅니다. 손이 떨리면 흐리고, 어두운 곳에서는 지글지글한 점이 낍니다. 이런 차이를 미리 보여 주면 모델이 실제 상황에서 덜 헷갈립니다. 칸의 자리는 그대로 두고 값만 조금 바꾸는 증강입니다.

밝기와 대비, 색 흔들기, 블러, 노이즈의 네 가지 증강을 견준 비교 그림

그림의 네 상자는 모두 앞 장에서 배운 것입니다. 밝기와 대비는 5장의 곱하고 더하기(alpha·beta), 색 흔들기는 3장의 HSV 에서 H(색상)를 조금 옮기기, 블러는 6장의 GaussianBlur, 노이즈는 6장, 7장에서 씨앗을 고정해 만든 가우시안 노이즈입니다. 여기서 시간대마다 다른 햇빛이 밝기·색 증강이고, 손 떨림이 블러, 어두운 곳의 점이 노이즈입니다.

사과 사진의 원본과 밝기 +40, 대비 0.7배, 색상 +3, 블러 5×5, 노이즈 15 결과를 나란히 놓은 그림

여섯 장 모두 과일의 자리와 모양은 그대로입니다. 색상은 +3 만 옮겨도 빨간 사과가 조금 주황빛을 띱니다. 앞 절의 귤처럼 +30 을 옮기면 다른 과일 색이 되므로, 이 장은 색상을 −3 ~ +3 안에서만 흔듭니다.

이 장의 값 증강 설정

증강계산이 장의 세기배운 곳
밝기·대비np.clip(img × alpha + beta, 0, 255)alpha 0.8~1.2, beta −30~+305장
색 흔들기HSV 의 H 에 더하고 180 으로 나눈 나머지−3 ~ +33장
블러cv2.GaussianBlur(img, (3, 3), 0)3×3 한 가지6장
노이즈img + rng.normal(0, sigma, img.shape)sigma 5~126장, 7장

색상 H 는 0~179 를 도는 원이라, 178 에 3 을 더하면 181 이 아니라 1 이 되어야 합니다. 180 으로 나눈 나머지(% 180)를 쓰는 까닭입니다.

짧은 예시

Python
import cv2
import numpy as np

img = cv2.imread("ch16_raw/apple_04.png")
gray_mean = lambda x: round(float(cv2.cvtColor(x, cv2.COLOR_BGR2GRAY).mean()), 1)

# 밝기·대비: 소수로 계산하고 0~255 로 자른 뒤 uint8 로(5차시)
bright = np.clip(img.astype(np.float32) * 1.0 + 40, 0, 255).astype(np.uint8)
print(gray_mean(img), gray_mean(bright))         # 결과: 140.7 180.4

# 색 흔들기: H 에 3 을 더하고 180 으로 나눈 나머지
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hsv[:, :, 0] = (hsv[:, :, 0].astype(np.int32) + 3) % 180
hue = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
print(int(hsv[75, 100, 0]))                      # 사과 한가운데의 새 H. 결과: 3 (원래 0)

# 노이즈: 6차시와 같은 꼴, 씨앗 고정
rng = np.random.default_rng(1610)
noisy = np.clip(img.astype(np.float64) + rng.normal(0, 10, img.shape), 0, 255).astype(np.uint8)
print(noisy.dtype, noisy.shape)                  # 결과: uint8 (150, 200, 3)

astype(np.int32) 로 바꾼 뒤 더하는 까닭은, uint8 그대로 더하면 255 를 넘을 때 0 부터 다시 돌기 때문입니다(1장). H 는 179 를 넘지 않지만, 습관처럼 넓은 자료형에서 계산합니다.

주의할 점

  • 밝기 증강을 너무 세게 걸면 정제에서 "너무 밝다"고 버렸던 사진을 스스로 만들게 됩니다. 정제의 판정표 안쪽에 머물 만큼만 겁니다.
  • 노이즈를 넓게 넣은 사진을 png 로 저장하면 파일이 커집니다(6장). 학습할 때마다 그 자리에서 만들어 쓰는 방법도 있습니다. 이 장은 결과를 눈으로 보려고 저장합니다.
← 이전 절16장 · 기하 증강다음 절 →16장 · 증강 파이프라인과 주의할 점