저번 강의에서도 InRange 함수를 사용하여 원하는 색상값을 추출할 수 있었는데
히스토그램 역투영은 어떤 색상의 히스토그램 분포를 사용하여 해당 히스토그램 분포에 부합하는 픽셀을
선별하는 방법이다.
이는 원색이 아닌 임의의 색상을 추출 ( 선별 ) 하고자 할때 좀 더 효과적으로 사용할 수 있다.
예를들면 영상에 살색 또는 살구색등의 색상들을 HSV 에서 추출하면 H의 애매한 영역에서 추출해야하는데히스토그램 역투영 방법을 사용하면 해당 영상에 분포해있는 살색 부분 또는 살구색 부분을 추출할 수 있다.
위 영상에서 파란색 박스에 해당하는 색만 추출해내고싶다고 한다면
아래와같이 해당 ROI 내부색상과 가장 부합하는 색상만 추출되는 것을 볼 수 있다.
cv2.selectROI 함수를 사용하여 위와같은 파란색 사각박스를 마우스로 그리게되면 x ,y ,w, h 의 값이 반환되게 된다.
그리고 위와같이 히스토그램을 먼저 계산해줘야한다.
BGR영상을 ycrcb의 영상으로 변환해 준 뒤
channel을 나눠주는데 y 성분의 0번채널은 사용하지 않는다. y 성분은 컬러성분이라기보다는
GrayScale의 밝기 정보이기 때문에 색상 추출을 위해서는 사용되지 않는 성분이다.
cr_bins , cb_bins 는 256의 값을 128로 단순화 시켜주는 작업을 해준 뒤 ( 256을 그대로 사용해도 무방하다 )그리고 cr,cb_range 를 0 ~255로 잡아주는 작업을 해준다. ( 256으로 사용해야지만 255까지의 값을 사용할 수 있다. )
이후 clacHist 함수를 사용하여 historgram을 계산한 뒤
normalize 함수를 사용하여 hist 영상을 0 에서 255의 값을 갖는 GrayScale의 영상으로 변환시켜준 뒤
calcBackProject 함수를 사용하여 실제로 역투영 하는 방식을 취했다.
해당 함수들을 저번 강의에서 작성한 블로그글을 캡쳐했다.
* 히스토그램 구하기 ( cv2.calcHist (images, channels, mask, histSieze, ranges, hist, accumulate )
// images -> 영상 한장 또는 여러장의 히스토그램을 구할 수 있다.
// chnnels -> 히스토그램을 구할 채널을 나타내는 리스트
// mask -> mask 영역에서만 히스토그램을 구하고 싶을때 ( 255 값 ) , 없으면 None
// histSize -> 히스토그램 각 차원의 크기 ( bin의 개수 ) 를 나타내는 리스트
// ranges -> 히스토그램 각 차원의 최솟값과 최대값으로 구성된 리스트
// 이의 출력값은 numpy.ndarray 로 출력 된다.
* 히스토그램 역투영 함수 ( cv2.calcBackProject ( images, channles, hist, ranges, scale, dst )
// images : 입력 영상 리스트
// channels : 역투영 계산에 사용할 채널 번호 리스트
// hist : 입력 히스토그램
// ranges : 히스토그램 각 차원의 최솟값과 최댓값으로 구성된 리스트
// scale : 출력 역투영 행렬에 추가적으로 곱할 값
// dst : 출력 역투영 영상. 입력영상과 동일 크기
그래서 정리해보자면
1. 기준 영상으로부터 구하고자하는 색상에 대한 컬러 히스토그램을 미리 계산
( 영상에서 살구색 부분만을 포토샵같은 툴을 사용하여 Mask 영상을 만듦 )
2. 입력 영상에서 미리 구한 컬러 히스토그램에 부합하는 픽셀을 선별
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 필터링 _ 필터링 이해하기 (0) | 2022.05.15 |
---|---|
[Open CV] 기본적인 영상처리 기법 _ 실전코딩 ( 크로마키 합성 ) (0) | 2022.05.14 |
[Open CV] 기본적인 영상처리 기법 _ 특정 색상 영역 추출 (0) | 2022.05.12 |
[Open CV] 기본적인 영상처리 기법 _ 히스토그램 평활화 (0) | 2022.05.11 |
[Open CV] 기본적인 영상처리 기법 _ 영상의 명암비 조절 (0) | 2022.05.10 |