히스토그램 역투영

매일 공부(ML)·2021년 11월 18일
0

OPEN CV

목록 보기
14/45

히스토그램 역투영

  • 히스토그램 역투영(Histogram backprojection)

    	- 영상의 각 픽셀이 주어진 히스토그램 모델과 얼마나 일치하는지 검사
    • 임의의 색상 영역 검출 시 효과적이다.

  • 히스토그램 역투영을 이용한 살색 검출

    	- 기준 영상으로부터 살색에 대한 컬러 히스토그램 미리 계산
    • 입력 영상에서 미리 구한 살색 히스토그램에 부합하는 픽셀식별하기

  • 히스토그램 역투영 함수
cv2.calBackProject(images, channels, hist, ranges, scale, dst= None) -> dst
  • images: 입력 영상 리스트

  • channels: 역투영 계산에 사용할 채널 번호 리스트

  • hist: 입력 히스토그램(numpy.ndarray)

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

  • scale: 출력 역투영 행렬에 추가적으로 곱할 값

  • dst: 출력 역투영 영상, 입력영상과 동일크기이고 cv2.CV_8U.

  • CODE OF 히스토그램 역투영 (with 살색 영역검출)

# CrCb 살색 히스토그램 구하기
ref = cv2.imread('kids1.png', cv2.IMREAD_COLOR)
mask = cv2.imread('kids1_mask.bmp', cv2.IMREAD_GRAYSCALE)
ref_ycrcb = cv2.cvtColor(ref, cv2.COLOR_BGR2YCrCb)

channels = [1, 2]
ranges = [0, 256, 0, 256]
hist = cv2.calcHist([ref_ycrcb], channels, mask, [128, 128], ranges)

# 입력 영상에 히스토그램 역투영 적용
src = cv2.imread('kids2.png', cv2.IMREAD_COLOR)
src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)

backproj = cv2.calcBackProject([src_ycrcb], channels, hist, ranges, 1)
h, w = src.shape[:2]
dst = np.zeros((h, w, 3), np.uint8)
dst[backproj > 30] = src[backproj > 30]

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

0개의 댓글