이것저것 프로그래밍 정리(Macbook)

히스토그램(히스토그램 생성, 정규화(normalize)) 본문

machine vision

히스토그램(히스토그램 생성, 정규화(normalize))

parkaparka 2020. 8. 21. 19:17
반응형

히스토그램

머신비전에서 히스토그램이란 [0,L-1] 사이의 명암값 각각이 영상에 몇번 나타나는지 표시해 주는 막대 그래프이다.

쉽게 말해서 0,1,2,...,L-2,L-1 화소가 각각 몇개인가를 막대 그래프로 표현해 놓은 것이다.

이를 통해 전체 영상의 픽섹들의 색상이나 명암의 분포를 파악 할 수 있습니다.

히스토그램은 현재 영상이 어떤 상태인지 예측, 분석하는 용도로 활용도이다.

 

openCV에서 히스토그램을 계산 해주는 cv2.calcHist() 함수를 사용하기 전에 numpy를 통해 직접 히스토그램을 생성해 보도록 하자.

위의 영상을 읽어서 1차원 히스토그램을 출력해 보겠습니다.

 


numpy 통해 히스토그램 생성

numpy를 이용하여 다음과 같이 그레이 스케일 이미지의 히스토그램을 계산하여 그려볼수 있습니다.

위에 코드가 있지만 간단히 살펴보자면 이미지 파일을 cv2를 통해 그레이 스케일로 읽어옵니다.

그 다음 np.histogram 을 통해 명암 반환값인 배열 형태의 hist 와 x 축 요소를 알려주는 bins를 반환값으로 하는 히스토그램을 생성합니다.

이후 반환값을 토대로 히스토그램을 matplotlib.pyplot을 이용해서 시각화해주면 됩니다.


Opencv를 통해 히스토그램 생성

numpy와 마찬가지로 이미지 파일을 읽어 온 이후 cv2.calcHist() 함수를 통해 히스토그램을 생성한 이후 시각화 해주면 됩니다. 

cv2.calcHist()와 관련하여 더 자세한 설명은 위 사진 주석을 참고하시면 됩니다.

 

이번에는 그레이 스케일이 아닌 사진을 R,G,B로 나누어 컬러 히스토그램을 생성해 보도록 하겠습니다.


Opencv를 통해  컬러 히스토그램 생성

위와 비슷합니다. 다른 점을 설명하겠습니다.

이미지 파일을 읽어올때 그레이 스케일이 아닌 그냥 이미지 파일 자체로 읽어옵니다.

이후 cv2.calcHist를 통해 각채널의 값을 반환해서 b_hist, g_hist, r_hist 값을 생성합니다. 채널 0이 B 값, 채널 1이 G값, 채널 2가 R 값에 해당합니다.

이후 계산한 히스토그램을 시각화 해준 것입니다.


Opencv를 통해 히스토그램 normalize(정규화) 하기

영상 분야에서는 특정 영역에 몰려있는 픽셀 값들을 노멀라이즈를 갖고 화질을 개선할때 쓰고는 합니다.

Opencv의 함수 cv2.normalize() 를 사용해서 다음 그림을 정규화 해 보도록 하자.

원본 이미지 파일을 읽은 다음 제가 직접 정규화를 해보고, cv2.normalize() 함수를 이용하여 정규화하고 이를 히스토그램으로 시각화까지 해보았습니다. 그래프 상으로는 많이 티가 나지 않지만 자세히 보면 픽셀값 50 정도에 편중되어 있던 그래프가 조금씩 퍼져 있는 것을 확인 할 수 있습니다.

아래 사진 파일을 보면 몰렸던 픽셀들이 고르게 퍼져서 화질이 개선된 것을 확인할 수 있습니다.

다음 글에서는 히스토그램의 equalize(평활화)에 대해 알아보도록 하겠습니다.

반응형

'machine vision' 카테고리의 다른 글

히스토그램(평활화(equalize))  (0) 2020.08.23
Comments