컴퓨터 그래픽스/영상처리

[OpenCV] 공간 영역에서의 영상 개선

며용 2021. 5. 23. 19:50

Negative transformation

 

Image negatives

s = T(r) = L-1-r  (where 0 ≤ r ≤ L-1)

 

이미지 반전

 

1) 

 

기존에 존재하는 API를 이용해서 구현한 코드

 

 

2) 

 

이미지 색상 반전을 위해서,  255 - 현재 픽셀값을 해주었다.

 

픽셀 값들에 255를 빼주면 0에 가까웠던 어두운 픽셀값은 밝아지고 255에 가까웠던 밝은 픽셀값은 어두워진다.

기존의 API를 이용한 코드와 같은 결과값이 나왔다.

 

 

 

 

Log, inverse-log transformation

c = 1 일 때,

 

 

c = 2 일 때,

 

 

Log transform은 어두운 부분을 스트레칭 시켜준다.

그래서 어두운 영역에 뭐가 있는지 보고 싶을 때는 이미지를 log transform을 시켜주면 된다.

 

반대로 Inverse log transform은 이미지를 어둡게 만들어준다.

 

 

 

s = c * log ( 1 + x )

 

Log Transform

c * log ( x + 1 ) * ( 255 / log(256) )

- 255 / log(256) to scale the values between 0 and 255

- log(0)이 되지않도록 +1

 

 

Inverse Log Transform

c * ( e^( x * log(256) / 255)) - 1

 

 

 

 

power-law(gamma) transformations

y = cxγ

origin  /  γ  = 2.2  /   γ  = 0.3

 

감마 보정은 감마값이 크면클수록 inverse log transform과 같은 효과가 나고 

작으면 작을수록 log transform 효과가 크다

 

 

 

각 픽셀값들을 255로 줄여서 변환을 해주고 다시 255를 곱해줘서 스케일링 시켜준다.

 

 

 

origin  /  power  /  root

 

 

 

 

Histogram equalization

 

 

히스토그램 평활화

히스토그램이 항상 1의 값을 가질 수 있도록 히스토그램을 평평하게 만들어주기.

 

 

 

먼저 기존에 있는 equalizeHist 함수를 사용해서 구현했다.

 

 

 

후에 직접 계산하는 코드로 작성한 것과 동일한 결과값이 나왔다.

 

 

히스토그램 평활화 코드

 

이미지에 적용하는 코드



 

 

구한 히스토그램  /  누적 히스토그램  /  평활화된 히스토그램

히스토그램 그리는 코드