DataScience
article thumbnail
Published 2022. 12. 13. 04:49
영상추적 영상처리/기초
728x90

영상에서 추적하고 싶은 부분을 정한다(ROI)

cvSetImageROI(grayImg,cvRect(305,210,125,100));

 

사각형 부분(피부색)에 대한 히스토그램을 얻는다. 이 히스토그램으로 backproject구한다.
cvCalcBackProject(&grayImg, backprojectImg, cvHist );
히스토그램 정규화 후 확률 값을 얻는다. 히스토그램 x축은 픽셀 값, y축은 확률이 된다.
cvNormalizeHist(cvHist,100);

BackProjection 된 이미지의 픽셀 값에 해당하는 확률을 히스토그램에서 찾아서 픽셀값x확률로 새로 갱신해준다(ex:픽셀값:100, 확률 0%이면 픽셀값을 0으로 갱신)
 p2 = (unsigned char*)backprojectImg->imageData;
 for(int i=0; i<backprojectImg->imageSize;++i){
 		*(p2++)=cvQueryHistValue_1D(cvHist,*(p2)) * *(p2); 
 }

 검은색 박스와 이미지면 확률이 높게 나오므로 갱신된 픽셀 값은 높게 나오고 관련 없는 이미지면 픽셀 값은 낮게 나온다.

 

Void cvMatchTemplate(const CvArr* image, const CvArr* templ, CvArr* result, int method);
image: 입력 영상 (싱글 채널, WxH)
templ: 템플릿 영상 (싱글 채널, wxh)
result: 결과 영상 (싱글 채널, IPL_DEPTH_32F, W-w+1xH-h+1)
method: 매칭 방법
void cvMinMaxLoc(const CvArr* arr, double* min_val, double* max_val, vPoint* min_loc = NULL, CvPoint* max_loc = NULL, const CvArr* mask = NULL);
 

CCOEFF

cvMatchTemplate(targetgray,templgray,dstImg,CV_TM_CCOEFF);

 

Meanshift

1. 임의로 선택된 하늘색원(ROI)를 잡고

2. 선택된 범위 안에 들어있는 특징점 들의 밀도가 가장 큰 곳을 찾는다.

3. 밀도가 가장 큰 곳을 중심으로 재설정한다.

4. 재설정 된 중심을 기준으로 ROI를 다시 잡는다.

1~4를 다시 반복한다.

 

CamShift

1. 초기 탐색 윈도우의 크기와 위치 선택

1-1. 탐색 윈도우의 크기를 2*영역^(1/2)의 크기로 할당하고 중심을 (x,y) 한다.

2.  초기 탐색 윈도우의 크기보다 큰 탐색 윈도를 계산 지역의 중심에 할당한다.

3. hsv이미지로 계산지역의 컬러 히스토그램의 룩업 테이블을 만든다.

4. 컬러확률 분포 계산

5. 탐색 윈도우에서 객체 중심을 찾는다.

6. 물체의 중심에 탐색 윈도를 위치시키고 영역을 찾는다.

7. 수렴하면 xyz회전 각도를 알아낸다.

8. 7번의 내용으로 1-1 다시 설정한다.

 

'영상처리 > 기초' 카테고리의 다른 글

이미지 다운 샘플링  (4) 2022.12.23
Human Hand Modeling from Surface Anatomy  (0) 2022.12.13
Corner detector  (0) 2022.12.13
Edge검출  (0) 2022.12.13
영상처리 사칙연산  (0) 2022.12.13
profile

DataScience

@Ninestar

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!