BoTSORT-cpp icon indicating copy to clipboard operation
BoTSORT-cpp copied to clipboard

Possible issue in GlobalMotionCompensation.cpp

Open arnaud-nt2i opened this issue 1 year ago • 2 comments

@viplix3 Hi! Thanks again for your work.

I have been playing with GMC algos and there seeme to be a pb in HomographyMatrix OpenCV_VideoStab_GMC::apply(const cv::Mat &frame_raw, const std::vector<Detection> &detections) {} https://github.com/viplix3/BoTSORT-cpp/blob/4185b005e34d49c6c9e5cdf2dbde70ed11f70a0f/botsort/src/GlobalMotionCompensation.cpp#L571C21-L571C21

according to the PR that added Masking to opencv/videostab/src/global_motion.cpp : https://github.com/opencv/opencv_contrib/pull/2052 : The mask video must contain black (0 values) for parts, which are ignored during stabilization.

Or, the code is doing the opposite :

cv::Mat mask = cv::Mat::zeros(frame.size(), CV_8U); mask(rect) = 255; and then _keypoint_motion_estimator->setFrameMask(mask);

So I am wondering if Keypoints for BasedMotionEstimator are only taken on detection and not on background ... By the way, there should be a clamp before mask(rect) = 255; : clampRectInplace(rect, width, height); with a function added in utils.h :

inline void clampRectInplace(cv::Rect &roi, int maxW, int maxH) { roi.x = std::max(0, std::min(roi.x, maxW)); roi.y = std::max(0, std::min(roi.y, maxH)); roi.width = std::max(0, std::min(roi.width, maxW - roi.x)); roi.height = std::max(0, std::min(roi.height, maxH - roi.y)); }

arnaud-nt2i avatar Jan 05 '24 17:01 arnaud-nt2i