[OpenCV] Basic 11 - 이미지 히스토그램 (Histogram) 분석
반응형
이미지 히스토그램은 이미지에서 색상 분포나 밝기 정보를 시각적으로 표현한 그래프입니다. 히스토그램을 분석하면 이미지의 명도, 대비, 색상 정보를 알 수 있어 이미지 처리에서 중요한 역할을 합니다. 예를 들어, 히스토그램을 사용해 이미지의 밝기나 대비를 조정할 수 있습니다.
Import packages
import cv2 import numpy as np import matplotlib.pyplot as plt
Function to Display Images in Jupyter Notebook
Jupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.
def img_show(title='image', img=None, figsize=(8, 5)): plt.figure(figsize=figsize) if type(img) == list: titles = title if type(title) == list else [title] * len(img) for i in range(len(img)): rgbImg = cv2.cvtColor(img[i], cv2.COLOR_GRAY2RGB) if len(img[i].shape) <= 2 else cv2.cvtColor(img[i], cv2.COLOR_BGR2RGB) plt.subplot(1, len(img), i + 1) plt.imshow(rgbImg) plt.title(titles[i]) plt.xticks([]), plt.yticks([]) plt.show() else: rgbImg = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) if len(img.shape) < 3 else cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(rgbImg) plt.title(title) plt.xticks([]), plt.yticks([]) plt.show()
Load Image
이미지를 불러옵니다.
cv2_image = cv2.imread('asset/images/test_image.jpg')
1. Grayscale 히스토그램
Grayscale 이미지의 히스토그램은 이미지의 밝기 분포를 나타냅니다. 히스토그램의 x축은 밝기 값 (0~255), y축은 각 밝기 값의 픽셀 개수를 나타냅니다.
gray_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2GRAY) hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256]) plt.figure(figsize=(8, 5)) plt.plot(hist, color='black') plt.title("Grayscale Histogram") plt.xlabel("Pixel Value") plt.ylabel("Frequency") plt.show()

2. RGB 히스토그램
컬러 이미지의 경우 각 채널(BGR)에 대해 별도의 히스토그램을 그릴 수 있습니다. 이를 통해 이미지에서 각 색상의 분포를 확인할 수 있습니다.
colors = ('b', 'g', 'r') plt.figure(figsize=(8, 5)) for i, color in enumerate(colors): hist = cv2.calcHist([cv2_image], [i], None, [256], [0, 256]) plt.plot(hist, color=color) plt.xlim([0, 256]) plt.title("RGB Histogram") plt.xlabel("Pixel Value") plt.ylabel("Frequency") plt.show()

3. 히스토그램 평활화 (Histogram Equalization)
히스토그램 평활화는 이미지의 대비를 개선하여 더 뚜렷한 이미지를 얻는 데 유용합니다. 이 방법은 이미지의 픽셀 밝기 값을 재분배하여, 히스토그램이 고르게 분포되도록 합니다.
- Grayscale 이미지 평활화:
equalized_image = cv2.equalizeHist(gray_image) # 원본 및 평활화 이미지 비교 img_show(["Original Grayscale", "Equalized Image"], [gray_image, equalized_image]) # 평활화 이미지의 히스토그램 equalized_hist = cv2.calcHist([equalized_image], [0], None, [256], [0, 256]) plt.figure(figsize=(8, 5)) plt.plot(equalized_hist, color='black') plt.title("Equalized Grayscale Histogram") plt.xlabel("Pixel Value") plt.ylabel("Frequency") plt.show()

4. CLAHE (Contrast Limited Adaptive Histogram Equalization)
CLAHE는 히스토그램 평활화의 개선된 방법으로, 작은 영역마다 히스토그램을 평활화하여 지나친 밝기 왜곡을 방지합니다. 이는 특히 조명이 고르지 않은 이미지에 유용합니다.
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) clahe_image = clahe.apply(gray_image) # 원본 및 CLAHE 적용 이미지 비교 img_show(["Original Grayscale", "CLAHE Image"], [gray_image, clahe_image]) # CLAHE 이미지 히스토그램 clahe_hist = cv2.calcHist([clahe_image], [0], None, [256], [0, 256]) plt.figure(figsize=(8, 5)) plt.plot(clahe_hist, color='black') plt.title("CLAHE Histogram") plt.xlabel("Pixel Value") plt.ylabel("Frequency") plt.show()

요약
이미지 히스토그램은 이미지의 밝기와 색상 분포를 시각화하여 이미지의 특성을 분석하는 데 유용합니다. 히스토그램 평활화와 CLAHE는 이미지 대비를 개선하여 더 나은 시각적 품질을 제공합니다. 히스토그램을 활용해 이미지 분석 및 전처리를 효과적으로 수행할 수 있습니다.
반응형
이 글은
(새창열림)
본 저작자 표시 규칙 하에 배포할 수 있습니다. 자세한 내용은 Creative Commons 라이선스를 확인하세요.
Creative Commons
본 저작자 표시
'Tech & Development > Image Processing' 카테고리의 다른 글
[OpenCV] Basic 13 - 윤곽선 검출 (Contour Detection) (0) | 2024.11.21 |
---|---|
[OpenCV] Basic 12 - 이미지 필터 (Filters) 적용 (0) | 2024.11.20 |
[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion) (1) | 2024.11.16 |
[OpenCV] Basic 9 - 이미지 경계선 검출 (Edge Detection) (0) | 2024.11.15 |
[OpenCV] Basic 8 - 이미지 블러 처리 (Blur) (0) | 2024.11.14 |
댓글
이 글 공유하기
다른 글
-
[OpenCV] Basic 13 - 윤곽선 검출 (Contour Detection)
[OpenCV] Basic 13 - 윤곽선 검출 (Contour Detection)
2024.11.21윤곽선 검출은 이미지 내 객체의 경계를 찾아내는 방법으로, 주로 이미지에서 객체를 분리하거나 추적할 때 사용됩니다. OpenCV에서 findContours 함수를 이용해 윤곽선을 검출할 수 있습니다. 윤곽선은 연속된 경계의 좌표 목록으로 반환되며, 이를 활용해 윤곽선을 그리거나 특정 모양을 검출할 수 있습니다.Import packagesimport cv2import numpy as npimport matplotlib.pyplot as pltFunction to Display Images in Jupyter NotebookJupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.def img_show(title='image', img=None, … -
[OpenCV] Basic 12 - 이미지 필터 (Filters) 적용
[OpenCV] Basic 12 - 이미지 필터 (Filters) 적용
2024.11.20이미지 필터는 이미지에 다양한 효과를 적용하거나, 특정 특징을 강조하고 노이즈를 제거하는 데 사용됩니다. OpenCV는 여러 가지 필터를 제공하며, 상황에 따라 적절한 필터를 선택해 이미지를 처리할 수 있습니다. 기본적으로 많이 사용하는 필터에는 블러링 필터와 샤프닝 필터, 엠보싱 필터가 있습니다.Import packagesimport cv2import numpy as npimport matplotlib.pyplot as pltFunction to Display Images in Jupyter NotebookJupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.def img_show(title='image', img=None, figsize… -
[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion)
[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion)
2024.11.16이미지 색상 변환은 이미지를 다양한 색상 공간으로 변환하여 처리할 수 있도록 하는 작업입니다. OpenCV에서는 여러 색상 공간(BGR, RGB, Grayscale, HSV, Lab 등)을 지원하며, 상황에 따라 적절한 색상 공간을 선택해 이미지 분석이나 필터링 작업을 수행할 수 있습니다. 특히 색상 공간 변환은 색상 추출, 객체 탐지, 이미지 분할 등에 유용합니다.Import packagesimport cv2import matplotlib.pyplot as pltFunction to Display Images in Jupyter NotebookJupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.def img_show(title='imag… -
[OpenCV] Basic 9 - 이미지 경계선 검출 (Edge Detection)
[OpenCV] Basic 9 - 이미지 경계선 검출 (Edge Detection)
2024.11.15경계선 검출(Edge Detection)은 이미지에서 물체의 윤곽선을 찾아내는 방법입니다. 이미지 내에서 밝기가 급격히 변하는 부분을 탐지하여 객체의 형태를 추출할 수 있습니다. OpenCV에서는 여러 가지 경계선 검출 기법을 제공합니다. 대표적으로 Canny Edge Detection과 Sobel Filter가 많이 사용됩니다.Import packagesimport cv2import numpy as npimport matplotlib.pyplot as pltFunction to Display Images in Jupyter NotebookJupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.def img_show(title='image',…
댓글을 사용할 수 없습니다.