Example #1
0
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();
}
Example #2
0
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;
    }
}