전공 과목 이수2👨‍💻/디지털영상처리

화질 개선 기법(감마, 시그모이드, 히스토그램, 샤프닝, 메디언)

천숭이 2021. 10. 18. 16:14

1~5절 - 대조비 강화 혹은 약화처리

6~7절 - 선명성 향상

8~9절 - 잡음 제거

 

# 감마변환

output = input의 감마승  (이때 input은 0~1사이로 정규화)

감마r <1 : 밝게 처리, 어두운 부분은 밝게

감마r >1 : 어둡게 처리, 어두운 부분은 어둡게

 

# LUT(look up table) 함수 연산의 단순화 방법

출력값 테이블 생성하고 처리하는 방법

 

# 시그모이드 변환

명암의 대조비 강화

m:중간값,    w: 강화강도,       E: 기울기정도 (대비와 비례)

분모가 0이 될 가능성이 있기에 1이라는 엡실론을 설정.

m은 최소 0.5로 설정

w는 0위로 설정

 


# 히스토그램과 히스토그램 스트레칭 **중요**

 

# 히스토그램이란

화소 값들 개별 누적 개수

 

히스토그램 방법 1) ** 중요 많이 쓰임 **

np.historgram()함수 이용. ndarray로 선언된 2차워 데이터를 입력받아서 히스토그램 데이터 반환

 

히스토그램 방법 2)

matplotlib.pyplot.hist 이용

- 1차원 배열이 입력이므로 ravel() 혹은 flatten() 사용해서 1차원 flattened array로 변환

- 일렬로 나열해야만 하는 불편함

- 그림 안그릴 수가 없다, 높이 정규화 안된다.

 

히스토그램 방법 3)

cv.calcHist() 사용

영상 한번에 구할 수 있다.

히스토그램 세가지 방법 비교

 

# 히스토그램 스트레칭

- 영상의 대조비를 강화하기 위한 수단. 히스토그램 양쪽 잡아당기는 작업.

-- imadjust 함수를 교수님이 직접 만드시고 실습하셨음 (감마값에따라 이미지 밝아지는 현상 관찰)

 

# 히스토그램 평활화

영상의 계조 분포를 고르게 하는 작업

이상적인 히스토그램

**중요**

히스토그램 평활화를 행하면 영상의 가시성이 향상되는 효과를 기대할 수 있으나 대신 영상의 그라데이션(gradation)이 부족해지는 부작용이 생길 수 있다. (중간중간 빈 화소가 그라데이션 부족한 곳)

 

# 히스토그램 평활화의 처리 절차

1단계 : 히스토그램 (계조치 분포함수)를 구한다.

2단계 : 누적분포함수 = 단조􀀁 증가함수

3단계􀀁 :􀀁 누적􀀁 분포함수의􀀁 값을􀀁 제일􀀁 큰􀀁 값을􀀁 나누어􀀁 주어􀀁 정규화􀀁 누적분포함수를􀀁 구한다.

4단계􀀁 :􀀁 정규화􀀁 누적􀀁 분포함수에􀀁 255를􀀁 곱해􀀁 반올림한􀀁 매핑함수를􀀁 만든다.

 

# 히스토그램 평활화 함수

방법 1) cv2.equalizeHist()로 평활화된 영상 반환받기

방법2) np.histogram()로 데이터 DF반환받아서 plt.hist()로 그림그리기

 

# HE 알고리즘 = 컬러영상에 히스토그램 함수 적용하기

1)􀀁 np.histogram()를􀀁 이용해􀀁 히스토그램(DF:􀀁 Distribution􀀁 Function)을􀀁 구
한다.
2)􀀁 연산을􀀁 통해􀀁 CDF(Cumulative􀀁 DF)를􀀁 구하고,
3)􀀁 총􀀁 화소수로􀀁 나누어􀀁 NCDF(Normalized􀀁 CDF)를􀀁 구하고,
4)􀀁 여기에􀀁 255를􀀁 구하여􀀁 mapping􀀁 LUT􀀁 어레이를􀀁 구한다.

NCDF = 매핑함수 = LUT

 

<칼라영상 히스토그램 만드는방법  간략하게 >
-> 모노로 만들어 HE용 LUT를 만들어 이를 RGB 각각에 3번 적용하면된다 .
(LUT안 3채널 영상을 넣으면 된다)

 

# 잘못된 방법 

RGB각각을 평균화 시키는 방법은 절대 안됨 **
RGB가 따로 움직이므로 색깔이 튀어버린다. (잘못된 방법)

 

# 히스토그램 평활화의 단점

- 히스토그램 스파이크로 인해서 그라데이션 부족현상이 나타난다

- 간혹 영상의 품질이 저하된다.

 

# 히스토그램 스파이크의 원인

영상에 분포가 큰 화소가 존재할 경우

 

# 히스토그램 스파이크, 히스토그램 평활화의 단점 극복하기

Bi-Histogram Equalization (BBHE) :

입력 히스토그램을 평균값에 따라 나누어 각 부분에 대해 평활화 적용

 


# 히스토그램 명세화

= 내가 정해준 분포로 입력이미지의 사양을 정해주겠다.

명세화 안에 평활화. 평활화는 명세화의 특별한 경우


# 샤프닝 마스크

- 영상의 샤프니스 증폭해 영상의 선명도 개선.  sharpness = 선명도

- 경계면의 대조비를 강화시켜 영상이 선명해진다

- 샤프닝 커널을 사용한 코릴레이션 작업으로 구현할 수 있다.

 

# 샤프닝 마스크 설계

원본커널에서 2차 미분 커널을 빼서 만든다 (2차미분은 라플라시안을 이용)

 


# 언샤프 마스킹

시그마를 활용해 블러링 해서 고주파 특성 제어

언샤프 마스킹 원리

- (c)언샤프마스크 구하기 - 오리지널 마스크에서 블러링 마스크 빼기

- (d)그런 다음 마스크를 원영상에 더한다. d에서 볼 수 있듯이 대비가 강조됐다.

 

img = img/255

blur=cv.GaussianBlur(src=img, ksize=(21,21),
        sigmaX=3, borderType=cv.BORDER_REPLICATE )

UnsharpMaskImg = img - blur # 고주파 영상

좌) 언샤프마스크에 + 0.5&nbsp; &nbsp; &nbsp; 우) 언샤프마스크*3

 

 

# 메디언 필터링

- 주변 값들을 참조해서 중간값이라고 추정되면 중간값으로 변경   --> 노이즈 제거 좋음

 

# 메디언 필터가 가우시안 잡음처리에 효과적이지 못하고 s&p잡음처리에 대해 효과적인 이유는?