\brief CTracker::CalcEmbeddins \param regionEmbeddings \param regions \param currFrame
| 620 | /// \param currFrame |
| 621 | /// |
| 622 | void CTracker::CalcEmbeddins(std::vector<RegionEmbedding>& regionEmbeddings, const regions_t& regions, cv::UMat currFrame) const |
| 623 | { |
| 624 | if (!regions.empty()) |
| 625 | { |
| 626 | regionEmbeddings.resize(regions.size()); |
| 627 | // Bhatacharia distance between histograms |
| 628 | if (m_settings.m_distType[tracking::DistHist] > 0.0f) |
| 629 | { |
| 630 | for (size_t j = 0; j < regions.size(); ++j) |
| 631 | { |
| 632 | int bins = 64; |
| 633 | std::vector<int> histSize; |
| 634 | std::vector<float> ranges; |
| 635 | std::vector<int> channels; |
| 636 | |
| 637 | for (int i = 0, stop = currFrame.channels(); i < stop; ++i) |
| 638 | { |
| 639 | histSize.push_back(bins); |
| 640 | ranges.push_back(0); |
| 641 | ranges.push_back(255); |
| 642 | channels.push_back(i); |
| 643 | } |
| 644 | |
| 645 | std::vector<cv::UMat> regROI = { currFrame(regions[j].m_brect) }; |
| 646 | cv::calcHist(regROI, channels, cv::Mat(), regionEmbeddings[j].m_hist, histSize, ranges, false); |
| 647 | cv::normalize(regionEmbeddings[j].m_hist, regionEmbeddings[j].m_hist, 0, 1, cv::NORM_MINMAX, -1, cv::Mat()); |
| 648 | } |
| 649 | } |
| 650 | |
| 651 | // Cosine distance between embeddings |
| 652 | if (m_settings.m_distType[tracking::DistFeatureCos] > 0.0f) |
| 653 | { |
| 654 | for (size_t j = 0; j < regions.size(); ++j) |
| 655 | { |
| 656 | if (regionEmbeddings[j].m_embedding.empty()) |
| 657 | { |
| 658 | // std::cout << "Search embCalc for " << TypeConverter::Type2Str(regions[j].m_type) << ": "; |
| 659 | auto embCalc = m_embCalculators.find(regions[j].m_type); |
| 660 | if (embCalc != std::end(m_embCalculators)) |
| 661 | { |
| 662 | embCalc->second->Calc(currFrame, regions[j].m_brect, regionEmbeddings[j].m_embedding); |
| 663 | |
| 664 | //std::cout << "Founded! m_embedding = " << regionEmbeddings[j].m_embedding.size() << std::endl; |
| 665 | } |
| 666 | else |
| 667 | { |
| 668 | //std::cout << "Not found" << std::endl; |
| 669 | } |
| 670 | } |
| 671 | } |
| 672 | } |
| 673 | } |
| 674 | } |
| 675 | |
| 676 | /// |
| 677 | /// \brief CTracker::GetEllipseDist |