我正试图在C++中实现这文章后面的这。
特别是:
# 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)我的问题是:
发布于 2016-07-22 03:53:42
SIFT描述符基本上是一个直方图,所以它不应该有负值。我认为在OpenCV中没有一个函数可以实现您想要实现的功能。但想出几句台词来做这件事并不难
// 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。
https://stackoverflow.com/questions/38517401
复制相似问题