OpenCV (5)

Myeongsu Moon·2024년 12월 6일

제로베이스

목록 보기
32/95
post-thumbnail

Chapter6 이미지 히스토그램

이미지 히스토그램

  • 이미지의 밝기 분포를 시각적으로 나타내는 도구

  • 가로축: 밝기 레벨(0~255)

  • 세로축: 해당 밝기 레벨을 가진 픽셀의 수

  • 이미지의 전반적인 밝기 분포와 대비를 한눈에 파악 가능

  • 그레이스케일 이미지 히스토그램

import cv2
from matplotlib import pyplot as plt

image = cv2.imread('plane_day_resized.png')

# 흑백 이미지 히스토그램
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
histogram_gray = cv2.calcHist([gray_image], [0], None, [256], [0, 256])

# 흑백 이미지 히스토그램 그래프
plt.plot(histogram_gray, color='gray')
plt.xlim([0, 256])
plt.title('Grayscale Histogram')
plt.xlabel('Bins')
plt.ylabel('Number of Pixels')

# 히스토그램 출력
plt.show()

  • 컬러 이미지 히스토그램
# 컬러 이미지 히스토그램 (RGB)
color = ('b', 'g', 'r')
for i, col in enumerate(color):
    histogram_color = cv2.calcHist([image], [i], None, [256], [0, 256])
    plt.plot(histogram_color, color=col)
    plt.xlim([0, 256])

# 히스토그램 출력
plt.show()

이미지 히스토그램 평활화

  • 이미지의 밝기 히스토그램을 조절하여 전체적인 대비를 개선(선명해지는 것 처럼 보임)
  • 이미지의 대비를 향상시키는 데 사용
# 원본 이미지 히스토그램
histogram_original = cv2.calcHist([image], [0], None, [256], [0, 256])

# 히스토그램 평활화
equalized_image = cv2.equalizeHist(image)
histogram_equalized = cv2.calcHist([equalized_image], [0], None, [256], [0, 256])

  • 히스토그램 스트레칭
# 불균일한 분포를 가진 데이터 생성
data = np.concatenate([np.random.normal(3, 1, 1000), np.random.normal(7, 2, 1000)])

# 히스토그램 스트레칭
min_val, max_val = np.min(data), np.max(data)
stretched_data = (data - min_val) / (max_val - min_val) * 255

  • 이미지 스트레칭
# 테스트용 이미지 생성 (일부 밝고 일부 어두운 영역 포함)
image = np.zeros((500, 500), dtype=np.uint8)
image[0:200, :] = 30   # 상단은 어두운 영역
image[200:300, :] = 120  # 중간은 약간 어두운 영역
image[300:500, :] = 220  # 하단은 밝은 영역

# 원본 이미지의 히스토그램 계산
histogram_original = cv2.calcHist([image], [0], None, [256], [0, 256])

# 히스토그램 스트레칭
stretched_image = cv2.normalize(image, None, 0, 255, cv2.NORM_MINMAX)
histogram_stretched = cv2.calcHist([stretched_image], [0], None, [256], [0, 256])

# 히스토그램 평활화
equalized_image = cv2.equalizeHist(image)
histogram_equalized = cv2.calcHist([equalized_image], [0], None, [256], [0, 256])

이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다

0개의 댓글