Computer Science/Image Processing
[Image Processing] 명도변환 (Power-Law Transformations)하기 (by MATLAB)
Bull_
2024. 3. 19. 16:59
개념
Digital Image Processing (Rafael C . Gonzalez , Richard E. Woods) 책에서 제시한 바에 따르면
명도 변환을 위해 기존의 픽셀 값은 다음과 같은 공식을 적용할 수 있다.
$${s=cr^γ}$$
여기서 c와 γ는 내가 정해줄 상수이다.

$c$는 상수이고 $γ$값을 조절할 때 input-output 관계는 위 사진같은 그래프를 따른다.
$γ$ = 1을 기준으로,
$γ$ > 1은 밝아지고 $γ$ < 1은 어두워진다.
또한, $γ$값이 너무 커 범위 255를 넘어버리면 uint8()로 인해 최대 255값을 나타낸다.
어떤 $c$와 $γ$값이 최적화된 값인지는 잘 모르겠지만
보통 $c=1$ 상태에서 $γ$를 조절해주는 것이 일반적인 것으로 보인다.
사진

생성형 AI로 만들어진 듯한 사진같지만 귀여운 사진으로 골라봤다.
스크립트
pow_trans_dog.m
img = imread("dog.jpg");
grayscale_img = uint8(mean(img,3));
pow_img = uint8(double(grayscale_img).^(1.231));
imshow(pow_img);
여기서 제곱 연산자에 .^에 .연산자를 사용하는 이유는 배열의 원소 별 지수승을 해주는 문법이라고 생각하면 된다.
결과
$γ > 1$


명암이 조절된 것의 확연한 차이를 느낄 수 있다.
$γ < 1$
다음은 감마의 값을 1보다 낮춰보았다.
pow_img = uint8(double(grayscale_img).^(0.7423))


감마가 1보다 낮아지니 어두워 진 것을 알 수 있다.