void BOW::calc(cv::Mat & img, Feature & feat){ Mat rimg; img.copyTo(rimg); // if (img.rows > 100 && img.cols > 100) // rimg = Mat(img, Range(img.rows/5, img.rows*4/5), Range(img.cols/5, img.cols*4/5)); // else // rimg = img; if (rimg.cols > 300 || rimg.rows > 300) { double fr = min(300.0/rimg.rows, 300.0/rimg.cols); resize(rimg, rimg, Size(), fr, fr, INTER_AREA); } ImgBGReplace(rimg, rimg); //GaussianBlur(img, img, Size(5, 5), 1.5, 1.5, BORDER_REPLICATE); vector<KeyPoint> kps; m_fd->detect(rimg, kps); Mat res; m_ext->compute(rimg, kps, res); if (kps.size()) { feat.clear(); for (int i = 0; i < m_ext->descriptorSize(); ++i) feat.push_back((double) res.at<uchar>(0, i) / max(kps.size(), 1U)); } else { feat.clear(); for (int i = 0; i < m_ext->descriptorSize(); ++i) feat.push_back(0); } }
Multiscale centerSurround(Multiscale pyrm1, Multiscale pyrm2){ Mat aux1,aux2,aux3, aux4,aux5,aux6; Feature cenSurr; resize(pyrm2.at(4),pyrm2.at(4), pyrm1.at(1).size(), 0, 0,INTER_LINEAR); resize(pyrm2.at(5),pyrm2.at(5), pyrm1.at(2).size(), 0, 0,INTER_LINEAR); resize(pyrm2.at(6),pyrm2.at(6), pyrm1.at(3).size(), 0, 0,INTER_LINEAR); aux1 = pyrm1.at(1)-pyrm2.at(4); aux2 = pyrm1.at(2)-pyrm2.at(5); aux3 = pyrm1.at(3)-pyrm2.at(6); resize(pyrm2.at(5),pyrm2.at(5), pyrm1.at(1).size(), 0, 0,INTER_LINEAR); resize(pyrm2.at(6),pyrm2.at(6), pyrm1.at(2).size(), 0, 0,INTER_LINEAR); resize(pyrm2.at(7),pyrm2.at(7), pyrm1.at(3).size(), 0, 0,INTER_LINEAR); aux4 = pyrm1.at(1)-pyrm2.at(5); aux5 = pyrm1.at(2)-pyrm2.at(6); aux6 = pyrm1.at(3)-pyrm2.at(7); cenSurr.push_back(aux1); cenSurr.push_back(aux4); cenSurr.push_back(aux2); cenSurr.push_back(aux5); cenSurr.push_back(aux3); cenSurr.push_back(aux6); return cenSurr; }
void ColorMean::calc(Mat& im, Feature& res) { Mat ras; resize(im, ras, Size(3, 3), 0, 0, INTER_AREA); res.clear(); for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) { Vec3b r = ras.at<Vec3b>(i, j); for (int k = 0; k < 3; ++k) { double t = r[k]; t /= 256; res.push_back(t); } } }