히스토그램 분석

매일 공부(ML)·2021년 11월 15일
1

OPEN CV

목록 보기
10/45

히스토그램 분석

  • 히스토그램(Histogram)

    	- 영상의 픽셀 값 분포를 그래프로 표현


  • 정규화된 히스토그램(Normalized histogram)

    	- 각 픽셀의 개수를 영상 전체 픽셀 개수로 나눠줌
    • 해당 그레이스케일 값을 갖는 픽셀이 나타날 확률

  • 영상과 히스토그램의 관계

  • 히스토그램 구하기
cv2.calcHist(images, channels, mask, histSize, ranges, hist=None, 
accumulate=None) -> hist
- images: 입력 영상 리스트

- channels: 히스토그램을 구할 채널 나타내는 리스트

- mask: 마스크 영상, 입력 영상 전체에서 히스토그램 구하면 None지정

- histSize: 히스토그램 각 차원의 크기를 나타내는 리스트

- ranges: 히스토그램 각 차원의 최솟값과 최댓값으로 구성된 리스트

- hist: 계산된 히스토그램(numpy.ndarray)

- accumulate: 기존의 hist 히스토그램 누적하면 True, 새로 만들면 False
  • 그레이스스케일 영상의 히스토그램 구하기
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
hist = cv2.calcHist([src], [0], None, [256], [0, 256])
plt.plot(hist)
plt.show()

  • 컬러 영상의 히스토그램 구하기
src = cv2.imread('lenna.bmp')

colors = ['b', 'g', 'r']
bgr_planes = cv2.split(src)

for (p, c) in zip(bgr_planes, colors):
	hist = cv2.calcHist([p], [0], None, [256], [0, 256])
	plt.plot(hist, color=c)

plt.show()

  • OpenCV 그리기 함수로 그레이스케일 영상의 히스토그램 나타내기
def getGrayHistImage(hist):
	imgHist = np.full((100, 256), 255, dtype=np.uint8)

	histMax = np.max(hist)

	for x in range(256):
		pt1 = (x, 100)
		pt2 = (x, 100 - int(hist[x, 0] * 100 / histMax))
		cv2.line(imgHist, pt1, pt2, 0)

	return imgHist
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)

hist = cv2.calcHist([src], [0], None, [256], [0, 256])

histImg = getGrayHistImage(hist)

profile
성장을 도울 아카이빙 블로그

0개의 댓글