하나의 이미지 안에서 대부분의 픽셀값들이 비슷한 값을 가지고 있을 경우 시각적으로 물체를 구분해내기 어려워진다.
이를 극복할 수 있는 방법으로 픽셀값들이 더 wide range 안에 분포할 수 있도록 하는 것이 있다. 오늘은 이러한 방법 중 Log Transformation, Power-law (Gamma) Transformation, Piecewise-linear Transformation 세가지를 해보겠다.
- Log Transformation
아래와 같은 식을 이용해 픽셀값을 0~255 범위로 매핑한다.
s=c⋅log(1+r)
로그 함수의 특성상 입력값이 작은 부분에서는 기울기가 크기 때문에 어두운 영역을 크게 밝히고, 이미 밝은 영역은 상대적으로 덜 증가시킨다. 따라서 어두운 픽셀을 밝히고 강조하고 싶을 때 사용할 수 있다.
c = 255/np.log(1+np.max(image))
log_transformed = c * np.log(1 + image)
log_transformed = np.array(log_transformed, dtype = np.uint8)

- Power-law (Gamma) Transformation
마찬가지로 밝기 곡선을 조절해 특정 intensity 범위의 픽셀들을 강조할 수 있다. Log Transformation 과 다른 점은 감마 값을 조절해 강조할 픽셀의 intensity 범위를 조절할 수 있어 이미지를 밝게 만들거나 어둡게 만들 수 있다.

# gamma=1 원본, gamma<1 밝아짐, gamma>1 어두워짐
for i, gamma in enumerate([0.1, 0.5, 1.0, 1.5, 2.2]):
gamma_corrected = np.array(255*(image/255)**gamma, dtype='uint8')

γ값이 작을수록 이미지가 밝아지고, γ값이 커질수록 이미지가 어두워지면서 기존 high-intensity 영역의 대비가 뚜렷해지는 것을 확인할 수 있다.
- Piecewise-Linear Transformation
픽셀 intensity를 여러 구간으로 나누어 선형적으로 조정하는 방법이다. 특정 intensity의 픽셀값을 선택적으로 강조하거나 억제할 수 있다.

위의 예시에서 입력 intensity r값 0~1에 따라 출력 intensity s값이 어떻게 변화하는지 살펴보자.
- 0≤r<0.3: 약한 증가, 어두운 영역 억제. 어두운 영역의 픽셀들의 intensity값 분포가 좁아진다.
- 0.3≤r≤0.7: 강한 증가, 대비 크게 향상. 이 범위의 픽셀들은 대비가 커져 시각적으로 뚜렷해진다.
- 0.7<r≤1.0: 약한 증가, 밝은 영역 억제. 밝은 영역의 픽셀들의 intensity값 분포가 좁아진다.
def pixelval(pix, r1, s1, r2, s2):
if (pix>=0 and pix<=r1):
return (s1/r1)*pix
elif (pix>r1 and pix<=r2):
return ((s2-s1)/(r2-r1))*(pix-r1) + s1
else:
return ((255-s2)/(255-r2))*(pix-r2) + s2
r1 = 70
s1 = 0
r2 = 140
s2 = 255
# np.vectorize: 함수를 배열의 각 요소에 적용할 수 있도록 해줌. 벡터화된 함수
pixelval_vec = np.vectorize(pixelval)
piecewise_transformed = pixelval_vec(image, r1, s1, r2, s2)
piecewise_transformed = piecewise_transformed.astype(np.uint8)

'컴퓨터 비전 > openCV' 카테고리의 다른 글
| [openCV] Morphological Operations in Images (0) | 2025.12.13 |
|---|---|
| [openCV] Image Thresholding (0) | 2025.12.09 |
| [openCV] Image Transformation - Affine Transformation, Perspective Transformation (0) | 2025.12.03 |
| [openCV] Image Blurring - Gaussian Blur, Median Blur, Bilateral Filter (0) | 2025.11.29 |