void Objectness::predictBBoxSII(ValStructVec<float, Vec4i> &valBoxes, const vecI &sz) { int numI = valBoxes.size(); for (int i = 0; i < numI; i++) { const float* svmIIw = _svmReW1f.ptr<float>(sz[i]); valBoxes(i) = valBoxes(i) * svmIIw[0] + svmIIw[1]; } valBoxes.sort(); }
void Objectness::nonMaxSup(CMat &matchCost1f, ValStructVec<float, Point> &matchCost, int NSS, int maxPoint, bool fast) { const int _h = matchCost1f.rows, _w = matchCost1f.cols; Mat isMax1u = Mat::ones(_h, _w, CV_8U), costSmooth1f; ValStructVec<float, Point> valPnt; matchCost.reserve(_h * _w); valPnt.reserve(_h * _w); if (fast) { blur(matchCost1f, costSmooth1f, Size(3, 3)); for (int r = 0; r < _h; r++) { const float* d = matchCost1f.ptr<float>(r); const float* ds = costSmooth1f.ptr<float>(r); for (int c = 0; c < _w; c++) if (d[c] >= ds[c]) valPnt.pushBack(d[c], Point(c, r)); } } else { for (int r = 0; r < _h; r++) { const float* d = matchCost1f.ptr<float>(r); for (int c = 0; c < _w; c++) valPnt.pushBack(d[c], Point(c, r)); } } valPnt.sort(); for (int i = 0; i < valPnt.size(); i++) { Point &pnt = valPnt[i]; if (isMax1u.at<byte>(pnt)) { matchCost.pushBack(valPnt(i), pnt); for (int dy = -NSS; dy <= NSS; dy++) for (int dx = -NSS; dx <= NSS; dx++) { Point neighbor = pnt + Point(dx, dy); if (!CHK_IND(neighbor)) continue; isMax1u.at<byte>(neighbor) = false; } } if (matchCost.size() >= maxPoint) return; } }