카메라 제어 및 영상 처리 시스템을 설계하다 보면, 이미지가 얼마나 선명한지를 수치화해야 하는 순간이 옵니다. 그래서 이번에 공부하며 알게된 대표적인 두 알고리즘인 라플라시안과 Square Gradient를 비교 정리해봅니다.
1. 포커스 측정(Focus Measure)의 원리
선명한 이미지에는 뚜렷한 엣지(Edge)와 고주파 성분이 풍부하게 담겨 있습니다. 포커스 측정은 이 에너지를 하나의 스칼라 값으로 정량화하는 작업입니다.
2. 라플라시안(Laplacian) 방식
이미지 각 픽셀에서 주변 픽셀과의 두 번째 차분(second-order difference)을 계산하여 변화율의 변화율을 측정합니다.
수학적 정의
$$\nabla^2 f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2}$$ $$L(x,y) = I(x+1,y) + I(x-1,y) + I(x,y+1) + I(x,y-1) - 4I(x,y)$$
라플라시안은 밝은 환경에서 매우 빠른 응답성을 보이지만, 노이즈에 민감하다는 단점이 있어 가우시안 블러와 같은 전처리가 자주 권장됩니다.
3. Square Gradient 방식
이미지의 1차 미분(기울기)을 제곱하여 합산하는 방식으로, '그래디언트 에너지'라고도 부릅니다.
수학적 정의
$$E(x,y) = G_x(x,y)^2 + G_y(x,y)^2$$ $$Score = \frac{1}{N} \sum_{x,y} E(x,y)$$
1차 미분을 사용하므로 2차 미분인 라플라시안보다 노이즈에 더 강인하며 저조도 환경에서 안정적입니다.
4. 성능 비교 테이블
| 비교 항목 | 라플라시안 | Square Gradient |
|---|---|---|
| 미분 차수 | 2차 미분 | 1차 미분 |
| 노이즈 민감도 | 높음 (취약) | 낮음 (강인) |
| 계산 복잡도 | 매우 낮음 (매우 빠름) | 낮음 (빠름) |
| 주요 활용 | 실시간 AF, 밝은 실외 | 의료 영상, 저조도, 분석 |
5. 파이썬 구현 코드 (OpenCV)
import cv2
import numpy as np
def focus_measure(img_path):
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
# 1. Laplacian
lap_score = cv2.Laplacian(img, cv2.CV_64F).var()
# 2. Square Gradient (Sobel)
gx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
gy = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sq_score = np.mean(gx**2 + gy**2)
return lap_score, sq_score
단순하고 빠른 구현이 필요하다면 라플라시안을, 노이즈가 있는 환경에서 데이터의 신뢰성이 중요하다면 Square Gradient를 선택하세요.

0 댓글