Camera tracking integration

===========================

Expose parameters for feature detection into redo panel.
This commit is contained in:
Sergey Sharybin 2011-08-07 08:58:03 +00:00
parent 0bb5f21655
commit 8c0fb2ad64
5 changed files with 20 additions and 8 deletions

@ -468,11 +468,14 @@ void libmv_destroyReconstruction(libmv_Reconstruction *libmv_reconstruction)
/* ************ feature detector ************ */
struct libmv_Corners *libmv_detectCorners(unsigned char *data, int width, int height, int stride)
struct libmv_Corners *libmv_detectCorners(unsigned char *data, int width, int height, int stride,
int margin, int min_trackness, int min_distance)
{
std::vector<libmv::Corner> detect= libmv::Detect(data, width, height, stride);
std::vector<libmv::Corner> detect;
std::vector<libmv::Corner> *libmv_corners= new std::vector<libmv::Corner>();
detect= libmv::Detect(data, width, height, stride, margin, min_trackness, min_distance);
libmv_corners->insert(libmv_corners->begin(), detect.begin(), detect.end());
return (libmv_Corners *)libmv_corners;

@ -65,7 +65,8 @@ double libmv_reprojectionError(struct libmv_Reconstruction *libmv_reconstruction
void libmv_destroyReconstruction(struct libmv_Reconstruction *libmv_reconstruction);
/* feature detector */
struct libmv_Corners *libmv_detectCorners(unsigned char *data, int width, int height, int stride);
struct libmv_Corners *libmv_detectCorners(unsigned char *data, int width, int height, int stride,
int margin, int min_trackness, int min_distance);
int libmv_countCorners(struct libmv_Corners *libmv_corners);
void libmv_getCorner(struct libmv_Corners *libmv_corners, int number, double *x, double *y, double *score, double *size);
void libmv_destroyCorners(struct libmv_Corners *libmv_corners);

@ -84,7 +84,7 @@ void BKE_tracking_projection_matrix(struct MovieTracking *tracking, int framenr,
void BKE_tracking_apply_intrinsics(struct MovieTracking *tracking, float co[2], float nco[2]);
void BKE_tracking_invert_intrinsics(struct MovieTracking *tracking, float co[2], float nco[2]);
void BKE_tracking_detect(struct MovieTracking *tracking, struct ImBuf *imbuf, int framenr);
void BKE_tracking_detect(struct MovieTracking *tracking, struct ImBuf *imbuf, int framenr, int margin, int min_trackness, int min_distance);
struct MovieTrackingTrack *BKE_tracking_indexed_bundle(struct MovieTracking *tracking, int bundlenr);

@ -1250,14 +1250,14 @@ static unsigned char *acquire_ucharbuf(ImBuf *ibuf)
}
#endif
void BKE_tracking_detect(MovieTracking *tracking, ImBuf *ibuf, int framenr)
void BKE_tracking_detect(MovieTracking *tracking, ImBuf *ibuf, int framenr, int margin, int min_trackness, int min_distance)
{
#ifdef WITH_LIBMV
struct libmv_Corners *corners;
unsigned char *pixels= acquire_ucharbuf(ibuf);
int a;
corners= libmv_detectCorners(pixels, ibuf->x, ibuf->y, ibuf->x);
corners= libmv_detectCorners(pixels, ibuf->x, ibuf->y, ibuf->x, margin, min_trackness, min_distance);
MEM_freeN(pixels);
a= libmv_countCorners(corners);

@ -2185,12 +2185,15 @@ void CLIP_OT_hide_tracks_clear(wmOperatorType *ot)
/********************** detect features operator *********************/
static int detect_features_exec(bContext *C, wmOperator *UNUSED(op))
static int detect_features_exec(bContext *C, wmOperator *op)
{
SpaceClip *sc= CTX_wm_space_clip(C);
MovieClip *clip= ED_space_clip(sc);
ImBuf *ibuf= BKE_movieclip_acquire_ibuf(clip, &sc->user);
MovieTrackingTrack *track= clip->tracking.tracks.first;
int margin= RNA_int_get(op->ptr, "margin");
int min_trackness= RNA_int_get(op->ptr, "min_trackness");
int min_distance= RNA_int_get(op->ptr, "min_distance");
/* deselect existing tracks */
while(track) {
@ -2201,7 +2204,7 @@ static int detect_features_exec(bContext *C, wmOperator *UNUSED(op))
track= track->next;
}
BKE_tracking_detect(&clip->tracking, ibuf, sc->user.framenr);
BKE_tracking_detect(&clip->tracking, ibuf, sc->user.framenr, margin, min_trackness, min_distance);
IMB_freeImBuf(ibuf);
@ -2224,6 +2227,11 @@ void CLIP_OT_detect_features(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
RNA_def_int(ot->srna, "margin", 16, 0, INT_MAX, "Margin", "Only corners further than margin pixels from the image edges are considered", 0, 300);
RNA_def_int(ot->srna, "min_trackness", 16, 0, INT_MAX, "Trackness", "Minimum score to add a corner", 0, 300);
RNA_def_int(ot->srna, "min_distance", 120, 0, INT_MAX, "Distance", "Minimal distance accepted between two corners", 0, 300);
}
/********************** frame jump operator *********************/