| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- datascience
- 이미지스트레칭
- 이미지분석
- 데이터사이언스
- data science
- high-dimensional data analysis
- 빅데이터
- gray level resolution
- Data Analysis
- 미국온라인석사
- 고차원데이터분석
- high dimensional data analysis
- 이미지프로세싱
- simulation
- 이미지대비
- 스플라인
- 고차원데이터
- big data
- 데이터분석
- functional data analysis
- 함수형데이터분석
- 모델링
- 이미지처리
- 이미지변환
- 시뮬레이션
- 이미지향상
- OMSA
- 이미지콘볼루션
- OpenCV
- bitdepth
- Today
- Total
곤약노트
이미지 처리 (Image Processing) #개요 본문
이미지 처리 (Image Processing) #개요
곤약처럼 부드럽게, 쫀쫀하게 2025. 6. 23. 09:00오늘날 우리가 사용하는 다양한 서비스 ― 얼굴 인식, 자율 주행, 의료 영상 진단, 감시 시스템 ― 모두 이미지 분석(Image Analysis) 기술을 바탕으로 작동합니다. 이미지 분석이란 단순히 사진을 보는 것을 넘어, 사진 속 정보를 이해하고 해석하는 과정입니다.
이 글에서는 이미지 분석이 어떻게 이루어지는지 그 단계별 흐름을 소개하고, 컴퓨터가 실제 이미지를 어떻게 인식하는지를 간단하게 설명한 뒤, 오픈소스 이미지 처리 라이브러리인 OpenCV에 대해서도 다루어 보겠습니다.
1. 이미지 분석 개요 (Image Analysis Levels)
이미지 분석은 크게 4단계로 나눌 수 있습니다:
Level 0: 이미지 표현
실제 세계의 이미지를 컴퓨터가 인식할 수 있도록 처리하는 단계입니다. 이 과정에는 이미지의 획득(acquisition), 샘플링(sampling), 양자화(quantization), 압축(compression) 등이 포함됩니다.
Level 1: 이미지 간 변환
촬영된 이미지 자체를 개선하거나 특정 정보를 추출하기 위한 단계로, 이미지 향상(enhancement), 필터링(filtering), 복원(restoration), 스무딩(smoothing), 세분화(segmentation) 등을 수행합니다.
Level 2: 이미지 → 벡터
이미지에서 의미 있는 정보를 숫자 벡터 형태로 뽑아내는 단계로, 특징 추출(feature extraction)과 차원 축소(dimension reduction)가 이뤄집니다.
Level 3: 특징 → 의사결정
앞에서 얻은 벡터를 바탕으로 컴퓨터가 판단 또는 분류를 수행합니다. 예: 얼굴인지 아닌지, 질병이 있는지 여부 등.
2. 이미지란 무엇인가?
1) 아날로그 이미지 (Analog Image)
- 자연계에 존재하는 빛의 강도 함수 (light intensity function)
- Grayscale (회색조) 이미지: f(x1, x2) → 위치 (x1, x2)에서 밝기를 나타냄
- Color (RGB) 이미지: f(x1, x2, c), c ∈ {R, G, B}
2) 디지털 이미지 (Digital Image)★
- 이미지를 2D 또는 3D 이산배열로 표현한 것
- 즉, 실제 아날로그 이미지를 샘플링하고 양자화 시켜 픽셀로 나눔
디지털 이미지의 기본 요소
1. 픽셀 (Pixel): 이미지의 최소 단위
- 디지털 이미지에서 하나의 샘플 값 (즉, 배열의 원소)
- 하나의 픽셀은 하나의 색상 정보를 담고 있고, 이 수많은 픽셀들이 모여서 하나의 이미지가 됨
- 숫자가 클수록 더 밝음
2. 해상도 (Resolution): 픽셀 수
- 해상도는 이미지에 포함된 픽셀의 총 수
- 해상도가 높을수록 더 정교하고 선명한 이미지
3. 채널 (Channel): 색상의 구성 요소
- 이미지의 색상은 여러 채널의 조합으로 표현
- Grayscale: 1개의 채널 (밝기 정보만 존재)
- RGB: 3개의 채널 (빨강 Red, 초록 Green, 파랑 Blue)
- RGBA: 4개의 채널 (RGB + 투명도 Alpha)
4. 비트 깊이 (Bit Depth): 색상의 정밀도
- 비트 깊이는 한 픽셀이 가질 수 있는 색상의 정밀도를 의미
예시) 8-bit 이미지: 각 채널당 0~255의 값을 가짐
→ RGB 이미지라면 256(R) × 256(G) × 256(B) = 약 1670만 가지 색 표현 가능
5. 컬러 공간 (Color Space): 색을 수학적으로 정의하는 방식 (RGB, BRG, Grayscale, HSV, YCbCr)
3. 이미지의 shape 구조
Python의 NumPy나 OpenCV로 이미지를 다룰 때, 이미지의 구조는 일반적으로 다음과 같은 3차원 배열입니다
(height, width, channel)
예시:
image.shape = (480, 640, 3) → 세로 480픽셀, 가로 640픽셀, 그리고 3개의 채널(RGB)로 구성된 이미지라는 뜻
image.shape = (480, 640) → 채널이 없으므로 그레이스케일 이미지
4. 이미지 히스토그램 (Image Histogram)
히스토그램은 이미지의 gray level (밝기 값) 분포를 나타냅니다.
각 픽셀 x[m, n]에 대해, 특정 밝기 I를 가지는 픽셀의 개수를 카운트
x축: 픽셀 값 (0 - 255, 8 bit grayscale)
y축: 해당 픽셀 값을 가진 픽셀 개수 (frequency)
- 히스토그램은 기본적으로 확률 밀도 함수(pdf)를 근사함
- 이미지의 명암 분포를 시각적으로 보여주며, 밝기 조절 및 대비 조절 등 이미지 향상 작업의 기초가 됨.
4. OpenCV
OpenCV(Open Source Computer Vision)는 컴퓨터 비전 및 이미지 처리를 위한 강력한 오픈소스 라이브러리입니다.
- 다양한 이미지 필터링, 얼굴 인식, 모션 추적 기능을 지원
- Python, C++, Java 등 여러 언어로 사용할 수 있음
- 머신러닝 및 딥러닝과도 쉽게 연동 가능
- OpenCV도 이미지 데이터를 NumPy 배열로 저장하지만 색 채널의 순서가 R-G-B 순서가 아니라, B-G-R 순서로 뒤바뀌어 있다는 점에 주의.
# 예시 코드
import cv2
import matplotlib.pyplot as plt
# 1. 이미지 불러오기 (컬러)
image = cv2.imread('watermelon.jpg') # BGR 포맷으로 불러옴
# 2. BGR -> RGB로 변환 (matplotlib은 RGB 사용)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 3. 그레이스케일 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 4. 히스토그램 계산
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
# 5. 이미지 및 히스토그램 시각화
plt.figure(figsize=(12, 5))
# 원본 이미지
plt.subplot(1, 3, 1)
plt.imshow(image_rgb)
plt.title('Original Image')
plt.axis('off')
# 그레이스케일 이미지
plt.subplot(1, 3, 2)
plt.imshow(gray, cmap='gray')
plt.title('Grayscale Image')
plt.axis('off')
# 히스토그램
plt.subplot(1, 3, 3)
plt.hist(gray.ravel(), bins=256, range=[0, 256])
plt.title('Histogram')
plt.xlabel('Pixel Intensity (0~255)')
plt.ylabel('Frequency')
plt.tight_layout()
plt.show()

