/KCF_detail

🚀Way to learn KCF's principle and implement it in TI's C6678 DSP. 😃

Primary LanguageC

KCF_detail(Kenelized Correlation Filter设计**及TI DSP C6678实现)

idea(理念)

  • 1.原理
    • 论文
    • 知乎上的相关blog
  • 2.c++实现版
  • 3.python实现版
  • 4.matlab实现版
  • 5.嵌入式移植
    • TI C6678
    • Xilinx Virtex 7
    • GPU TX2 ( support later..)

技术栈

  • c++ & c
  • matlab
  • python
  • FFT
  • HOG
  • verilog

研究方向(在此处贴链接)

文件路径

  • paper_blog

  • c++__implementation

  • matlab_implementation

  • python_implementation

  • dsp_implementation

移植工作

C++ implementation 解析

文件架构

kcf_c++

kcf c++代码汇总表

文件名称 行数 描述 函数
.cpp main.cpp 115 主程序 int main(int argc, char * argv[]) 函数入口,主程序,54行代码
std::vector<cv::Rect_<float>> getgroundtruth(std::string txt_file) 获取目标位置真值,24行
cv::Rect_<float> getAxisAlignedBB(std::vector<cv::Point2f> polygon) 获取一个坐标轴对齐后的矩形框,15行
kcf_tracker.cpp 351 kcf跟踪器 KCFTracker::KCFTracker(bool hog, bool fixed_window, bool multiscale, bool lab) 跟踪器构造函数39行
void KCFTracker::init(const cv::Rect &roi, cv::Mat image) 跟踪器初始化54行
cv::Rect KCFTracker::update(cv::Mat image) 跟踪器更新位置44行
cv::Point2f KCFTracker::detect(cv::Mat z, cv::Mat x, float &peak_value) 检测21行
void KCFTracker::train(cv::Mat x, float train_interp_factor) 训练15行
cv::Mat KCFTracker::gaussianCorrelation(cv::Mat x1, cv::Mat x2) 高斯相关29行
cv::Mat KCFTracker::createGaussianPeak(int sizey, int sizex) 高斯峰值获取16行
cv::Mat KCFTracker::getFeatures(const cv::Mat & image, bool inithann, float scale_adjust) 特征获取120行
void KCFTracker::createHanningMats() 初始化汉明窗22行
float KCFTracker::subPixelPeak(float left, float center, float right) 一维子峰值计算10行
fhog.cpp 326 HOG特征提取 int getFeatureMaps(const IplImage* image, const int k, CvLSVMFeatureMapCaskade **map) 获取特征图126行
int normalizeAndTruncate(CvLSVMFeatureMapCaskade *map, const float alfa) 归一化及截断,85行
int PCAFeatureMaps(CvLSVMFeatureMapCaskade *map) 特征降维,52行
int allocFeatureMapObject(CvLSVMFeatureMapCaskade **obj, const int sizeX,const int sizeY, const int numFeatures) 分配特征表14行
int freeFeatureMapObject (CvLSVMFeatureMapCaskade **obj) 释放特征表空间8行
.hpp kcftracker.hpp 60 kcf跟踪器头文件 KCFTracker类,无子函数
ffttools.hpp 179 fft头文件 cv::Mat fftd(cv::Mat img, bool backwards) 快速FFT,52行代码
cv::Mat real(cv::Mat img) 获取复数实部,6行代码
cv::Mat imag(cv::Mat img) 获取复数虚部,6行代码
cv::Mat magnitude(cv::Mat img) 获取复数模值,10行代码
cv::Mat complexMultiplication(cv::Mat a, cv::Mat b) 复数乘法,15行代码
cv::Mat complexDivision(cv::Mat a, cv::Mat b) 复数除法,18行代码
void rearrange(cv::Mat &) 图像重排,19行代码
void normalizedLogTransform(cv::Mat &img) 归一化log变换,7行代码
rectools.hpp 91 rect头文件 inline cv::Vec<t, 2 > center(const cv::Rect_<t> &rect) 获取中心 4行
inline t x2(const cv::Rect_<t> &rect) 4行
inline t y2(const cv::Rect_<t> &rect) 4行
inline void resize(cv::Rect_<t> &rect, float scalex, float scaley = 0) 调整尺寸10行
inline void limit(cv::Rect_<t> &rect, cv::Rect_<t> limit) 边界处理17行
inline void limit(cv::Rect_<t> &rect, t width, t height, t x = 0, t y = 0) 3行
inline cv::Rect getBorder(const cv::Rect_<t > &original, cv::Rect_<t > & limited) 获取边界10行
inline cv::Mat subwindow(const cv::Mat &in, const cv::Rect & window, int borderType = cv::BORDER_CONSTANT) 子窗口14行
inline cv::Mat getGrayImage(cv::Mat img) 获取灰度图6行
lambda.hpp 18 一些预定义参数 无子函数
.h tracker.h 16 tracker class 定义 无子函数
dirent.h 1225 linux 底层在windows上的实现 过长,不展开