OpenCV 向量 x 矩阵互相关
OpenCV Vector x Matrix cross correlation
我能找到的所有开放CV示例似乎都与2D图像上的2D内核有关。
我有一个 1d 内核,正在寻找一个操作,该操作将返回每行的值和偏移量,从而产生最大的相关性。
直接C++我的代码看起来像:
vector<int> offset(img.rows);
vector<int> amp(img.rows);
std::vector<double> corrs(MAX_SEARCH);
for(int row = 0; row< img.rows; row++){
row_data = img.row(row)
for (int i = 0; i < MAX_SEARCH; i++) {
double correlation = 0;
for (int j = 0; j < wfm.size(); j++) {
correlation += (wfm[j] * row_data[i+j]);
}
corrs[i] = correlation;
}
amp[row] = *std::max_element(corrs.begin(), corrs.end());
offest[row] = std::max_element(corrs.begin(), corrs.end()) - corrs.begin();
}
我正在寻找的关键是能够利用一些我认为OpenCV应该能够做到的单指令多数据优化,或者如果OpenCV无法实现这一点,如何重写这段代码来做到这一点。
如果您使用的是 OpenCV 函数,则需要通过 SIMD 支持为您的机器构建 OpenCV。或者您可以在 OpenCV 论坛上遵循此解决方案。
对于您的代码,我可以推荐OpenMP。很容易添加。您只需在最后一个 for 循环之前添加#pragma omp simd
。然后使用 -fopenmp 编译。这是一个了解OpenMP的简单教程。以及他们关于 simd 选项的文档。
相关文章:
- 如何在C++或OpenCV子矩阵中的2D子向量上使用OpenACC?
- OpenCV 向量 x 矩阵互相关
- 如何使用opencv从矩阵向量中构建图像
- OPENCV:将不同的向量附加为一行
- 调整OpenCV Mat向量向量的大小时出乎意料的结果
- 如何通过MEX将OpenCV C 垫的向量返回到MATLAB
- OPENCV图像处理,向量下标超出范围
- 在OpenCV中将向量转换为垫子
- 从矩阵复制列向量到OpenCV中另一个矩阵的每个col
- 如何初始化包含OpenCV的2D向量:矩阵
- 将垫子的向量转换为垫子文件,以便使用OpenCV SVM
- 如何使用OpenCV将向量向量的结构复制到另一个向量C++
- 从向量中擦除 opencv 矩形对象
- 如何将来自不同图像的多个描述符存储在C++和OpenCV中的向量向量中
- 在 OpenCV 中将向量转换为行或将空垫转换为行的有效方法
- OpenCV 角检测返回零角向量
- 在 opencv 中从每行矩阵中减去一个向量
- 如何在 OpenCV 中声明向量
- OpenCV查找轮廓的示例代码:向量释放问题
- Opencv C++读取分配给特征向量的Opencv Mat