EMD L1 将每个输入矩阵视为 1 维数据

作者: Dugnom创建于 2025年1月30日更新于 2026年9月16日

我已经从使用 CV EMD 方法 (https://GitHub.com/opencv/opencv/blob/4.x/modules/imgproc/src/emd.cpp) 切换到使用 EMDL1 实现,因为基于该方法的论文所承诺的巨大速度优势。 起初看起来不错,因为我获得了相同日期 (比较 20x32 矩阵) 的 1000 倍速度提升。 但我不知何故意识到,输入参数的描述略有不同, EMD 的描述如下: "第一个特征,一个 \f$\texttt{size1}\times \texttt{dims}+1\f$ 浮点数矩阵。每一行存储点权重,然后是点坐标。" 而 EMDL1 则如下: "第一个特征,一个单列浮点数矩阵。每一行是每个区间的直方图值。" 因此,两个函数会以不同的方式解释相同的特征,我认为这已经是一个 bug 或非常不直观的问题。 但是,鉴于 EMDL1 的实现,很明显它具有处理 2 或 3 维数据的能力。 在 https://GitHub.com/opencv/opencv_contrib/blob/4.x/modules/shape/src/emdL1.cpp 的第 64 行中简单地更改为正确确定维度,如下所示:

内容来源: opencv/opencv_contrib