반응형
ㅇ Gamma correction은 이미지의 밝기를 조절하는 방법입니다.
- 일반적으로 이미지를 밝게 하려면 픽셀값 (pixel intensity)을 증가시키면 됩니다.
- 반대로 어둡게 하려면 감소시키면 됩니다.
- 가장 간단한 방법으로는 모든 픽셀값을 같은 크기 만큼 증가시키면 이미지가 밝아집니다.
- 하지만 gamma correction은 동일한 값 만큼 증가시키지는 않습니다.
- Gamma correction은 이미지의 어두운 부분에 집중합니다.
- 밝게 하거나, 어둡게 할 때,어두운 부분의 변화폭을 밝은 부분보다 크게 합니다.
- 이러한 특징에 대해서는 뒤에서 그래프와 함께 자세히 설명하겠습니다.
ㅇ Gamma correction에서 gamma 값은 양수로서, 그 크기에 따라 밝기가 조정됩니다.
- Gamma > 1이면, 이미지를 밝게 하는 것이고,
- 0 < Gamma < 1이면, 어두워집니다.
- Gamma 값은 양수 ( > 0)여야 합니다.
- 만약 Gamma = 1인 경우, 이미지 밝기는 변하지 않습니다..
ㅇ Gamma correction은 컬러와 gray 이미지에 모두 적용 가능합니다.
- Intensity를 가진 gray 이미지는 물론,
- RGB 컬러이미지에도 적용 가능합니다.
- 이 때는, 각 채널별로 gamma correction을 적용해야 합니다.
ㅇ Gamma correction 공식을 살펴보겠습니다.
- I (x,y)를 이미지(x,y)에서의 pixel intensity라고 하고
- \gamma > 0가 주어지면,
- 아래 식은 correction 후의 pixel intensity값을 나타냅니다.
ㅇ 이 때 I(x,y) 값은 [0, 1.0]에 있어야 합니다.
따라서, 0 <= pixel intensity <= 255 일 경우에는,
[0 1]로 scaling한 후에 correction을 수행하고,
다시 [0 255]로 scaling합니다.
|
ㅇ Gamma correction 적용 이미지를 살펴봅시다.
- Gamma < 1 일 때 (=0.6), 전반적으로 사진이 어두워지며
- Gamma > 1 일 때 (= 2, 3), 사진이 밝아지는 것을
- 아래 2가지 사진 예에서 correction결과를 볼 수 있습니다.
|
|
ㅇ Pixel intensity별로 correction 후에 값이 어떻게 변하는지 살펴보겠습니다.
- Gamma 값에 따라 달라지는 이미지 brightness를 그래프로 그려 보았습니다.
ㅇ gamma > 1 인 경우,
- 아래 그래프에서, I(x,y) = 0.3이
- gamma correction 이후에 0.55로 변환
- 어두웠던 것 (0.3)이 밝은 것(0.55)로 변환되었습니다.
|
ㅇ 0 < gamma < 1 인 경우,
- 밝았던 부분 (= 0.8)이 gamma correction에 의해
- 어두운 부분 (=0.31)로 되었습니다.
- 비율로 따지자면, 밝았던 부분이 어두워지는 비율이 훨씬 크다
|
ㅇ Gamma correction은 이미지의 어두운 부분을 밝은 부분보다 더 많이 변화시키는 특징을 가집니다.
- 즉, intensity가 낮은 부분, 즉 어두운 부분에 대해서
- 값의 변화정도가 더 크다.
0 < Gamma < 1 일 때,
intensity I [0, 1.0]별로,
correction이후의 값 I'과의 ratio를 비교해보겠습니다.
아래 그래프는 I' / I를 보여준 것입니다.
Intensity가 낮은 pixel들이 변환 후에 더 낮은 비율을 가지게 됨을 알 수 있습니다.
이로부터, gamma correction은,
이미지를 어둡게 할 때, 어두운 쪽의 픽셀들이 더 많이 어두워진다는 것을 알 수 있습니다.
|
Gamma > 1 일때,
낮은 intensity의 부분들이 correction 후에
값이 증가되는 비율이 높은 intensity부분들보다 더 크다는 것을 알 수 있습니다.
아래 결과를 잘 보면,
밝은 부분 (intensity가 큰 부분)은 gamma 값의 변화에 크게 영향을 받지 않음을 볼 수 있습니다.
하지만, 어두운 부분은 gamma값의 영향에 따라 값이 크게 변하는 것을 볼 수 있습니다.
|
ㅇ Gamma correction 구현
- MATLAB으로 gamma correction을 수행하는 함수를 구현해 보았습니다.
- 인수로 correction을 수행할 컬러이미지 (I)와
- gamma를 받습니다.
. 이 함수는 color이미지에 대해서만 동작합니다.
- 반환값은 gamma correction된 이미지입니다.
function [img] = myGammaCorrection(I, gamma) % % double precision으로 바꾼다. % 값들이 rescaling되어 0 <= pixel <= 1.0으로 바뀐다. % img = im2double(I); % gamma correction agamma = 1/gamma; for i=1:3 img(:,:,i) = img(:,:,i).^agamma; end % 값들이 다시 [0, 255]로 rescaling된다. img = im2uint8(img); end |
반응형
'Computer Vision by OpenCV' 카테고리의 다른 글
OpenCV in Python - part 1 (0) | 2019.09.09 |
---|---|
Histogram Matching, Color mapping, Color Transfer (2) | 2017.04.19 |
Image processing: Brightness Contrast 밝기 대비 (1) | 2017.04.15 |
CommandLineParser: 명령행 인수의 처리, Command line arguments (0) | 2017.04.13 |
Histogram Equalization의 원리 (0) | 2017.04.11 |