반응형
작은 픽셀이 모여 하나의 이미지를 이루고 있다.
각 픽셀은 R, G, B 값을 가지고 있다. 각 8바이트 0~255 숫자 중 하나의 값을 지닌다.
컬러 이미지에서 이미지 히스토그램은 상에서 각 R, G, B값의 분포를 나타낸다.
GrayScale에서는 grayscale의 분포를 나타낸다.
관찰 데이터의 빈도수
- 히스토그램을 활용하면 데이터의 확률분포를 추정할 수 있다.
- 히스토그램은 이미지 픽셀 분포에서 매우 중요한 정보를 ㅈ공
- 히스토그램을 활용하면 다음 작업이 가능하다.
1) 화질 개선 - 히스토그램 이퀄라이제이션
2) 히스토그램 비교, 역투영
hist = cv2.calcHist(images=[image], channels=[i], mask=None, histSize=[histSize], ranges=[0, 256])
- images : histogram을 계산할 이미지 배열, 배열이 input
- channels : 히스토그램을 계산할 channel의 배열, 기본적으로 BGR로 읽음. 0 = B, 1=G, 2=R
만약, 2개 이상의 이미지를 계산할 경우 3=2번째이미지의 B, 4=2번째 이미지의 G, 5 = 2번째 이미지의 R - histSize : 히스토그램에서 구간의 개수를 의미함. 최대 256개(0~256)
- ranges : 해상도 느낌. 0~256으로 설정/ 히스토그램 구간 개수 256 설정하면 아래와 같은 결과 얻을 수 있음.
흑백 사진의 histogram
histSize = 256
hist = cv2.calcHist(images=[image], channels=[0], mask=None, histSize=[histSize], ranges=[0, 256])
histFlatten = hist.flatten() # 2차원 배열을 1차원으로 바꿔줌
binX = np.arange(histSize) * (256 // histSize) # x축에 해당하는 값들을 만들어줌.
# binX와 histFlatten은 사이즈가 같아야한다.
plt.title("histogram of grayscale") #제목설정
plt.plot(binX, histFlatten, color='r') # 꺾은선 그래프
plt.bar(binX, histFlatten, width=8, color='b') # 바차트.
plt.show() #보여주기
컬러 사진의 Histogram
image = cv2.imread('./sampleData/sample.jpg', cv2.IMREAD_COLOR)
histSize=256
nbins = 256 / histSize
binX = np.arange(histSize) * nbins
histColor = ['b', 'g', 'r']
# 색깔별로 히스토그램 뽑아서 그려줌.
for i in range(3):
hist = cv2.calcHist(images=[image], channels=[i], mask=None, histSize=[histSize], ranges=[0, 256])
print(hist)
plt.plot(binX, hist, color=histColor[i])
plt.show()
BGR→ RGB
OpenCV는 컬러 사진을 BGR 순서로 저장 Matplotlib에서는 RGB순서로 저장.
BGR로 그대로 MatplotLib에서 출력화면 왼쪽과 같이 나온다.
image = cv2.imread('./sampleData/sample.jpg', cv2.IMREAD_COLOR)
img= cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.title("histogram of Color")
plt.imshow(img)
plt.show()
BGR2RGB로 변환하면 오른쪽 그림과 같이 정상적으로 나온다.
반응형
'OpenCV' 카테고리의 다른 글
[OpenCV] Kotlin에서 OpenCV사용하기- 설정(feat. Android Studio) (0) | 2023.01.10 |
---|---|
[OpenCV] 이진화(Binarization, thresholding) (0) | 2023.01.07 |
[Open CV] 이미지 다루기- imread, imshow, waitkey, resize (0) | 2023.01.07 |
댓글