首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV:广义矩阵的L1归一化

OpenCV:广义矩阵的L1归一化
EN

Stack Overflow用户
提问于 2016-07-22 02:52:46
回答 1查看 1.3K关注 0票数 1

我正试图在C++中实现文章后面的

特别是:

代码语言:javascript
复制
    # apply the Hellinger kernel by first L1-normalizing and taking the
    # square-root
    descs /= (descs.sum(axis=1, keepdims=True) + eps)
    descs = np.sqrt(descs)

我的问题是:

  1. 在C++中有内置的OpenCV函数吗?
  2. 所有的描述符值都是正的吗?否则,L1规范应该使用每个元素的abs。
  3. 第一行的意思是“对于每一行向量,计算其所有元素的和,然后添加eps (以避免除以0),最后将每个向量元素除以这个和值”。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-22 03:53:42

SIFT描述符基本上是一个直方图,所以它不应该有负值。我认为在OpenCV中没有一个函数可以实现您想要实现的功能。但想出几句台词来做这件事并不难

代码语言:javascript
复制
// For each row
for (int i = 0; i < descs.rows; ++i) {
  // Perform L1 normalization
  cv::normalize(descs.row(i), descs.row(i), 1.0, 0.0, cv::NORM_L1);
}
// Perform sqrt on the whole descriptor matrix
cv::sqrt(descs, descs);

我不知道OpenCV如何处理L1归一化中的零和。如果上面的代码生成cv::normalize,则可以用descs.rows(i) /= (cv::norm(descs.rows(i), cv::NORM_L1) + eps)替换NaN。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38517401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档