【问题标题】:Align 2 overlapping photos of a page of text对齐一页文本的 2 张重叠照片
【发布时间】:2015-01-14 04:43:36
【问题描述】:

我有 2 个文本图像,其中第一个图像的右侧与第二个图像的左侧重叠(从左到右拍摄的同一页文本的 2 张部分照片)。 我想拼接图像,我正在尝试一种特征匹配的方法。 我已经尝试过使用来自 OpenCV 站点 http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html#matcher 的 ORB 特征搜索 + 蛮力特征匹配的示例

在我的情况下,至少使用特征搜索的默认参数,它完全关闭(没有找到任何正确的匹配,所有误报)。如果使用角点,文本将很难处理,这看起来合乎逻辑。

如何通过特征匹配更可靠地将此类图像与文本匹配?我应该为 ORB 搜索算法指定一些不同的非默认参数吗?使用具有不同参数的不同算法?

如果特征不匹配,我可以使用 Open CV 的其他方法进行对齐吗?

Mat p1 = new Mat("part1.jpg", LoadMode.GrayScale);
Mat p2 = new Mat("part2.jpg", LoadMode.GrayScale);

var orb = new ORB();

Mat ds1;
var kp1 = DetectAndCompute(orb, p1, out ds1);

Mat ds2;
var kp2 = DetectAndCompute(orb, p2, out ds2);

var bfMatcher = new BFMatcher(NormType.Hamming, crossCheck: true);
var matches = bfMatcher.Match(ds1, ds1);

var tenBestMatches = matches.OrderBy(x => x.Distance).Take(10);

var res = new Mat();
Cv2.DrawMatches(p1, kp1, p2, kp2, tenBestMatches, res, flags: DrawMatchesFlags.DrawRichKeypoints);


using (new Window("result", WindowMode.ExpandedGui, res))
{
    Cv2.WaitKey();
}

private static KeyPoint[] DetectAndCompute(ORB orb, Mat p1, out Mat ds1)
{
    var kp1 = orb.Detect(p1);
    ds1 = new Mat();
    orb.Compute(p1, ref kp1, ds1);
    return kp1;
}

【问题讨论】:

    标签: opencv text feature-extraction


    【解决方案1】:

    有趣的问题。关于 ORB 方法,我想到的可能会导致许多误报,因为我们正在尝试处理的主题(纸上的印刷字母)。首先,我们要检测的可能特征很复杂——各种字符组合在一起,与特征大小相比相对较小。增加特征的大小会迅速增加它们的可能数量。其次,您可以在属于不同单词的某个单词的开头检测到相同的字母,因此您不能仅单独依赖每个检测到的匹配项,而不是将信息组合在一起。一般来说,我会尝试调整一个球体探测器补丁大小(C++ case),试图平衡它的大小。并尝试 SIFT 或 SURF,也许它们会在您的情况下获得更好的结果。

    另一种方法,绝对是蛮力。根据您提供的示例,应该可以检测到单独的单词(阈值-> blob 检测)。因此,假设我们已经检测到带有单词的 blob。假设我们有一些集合 A 和 B,分别从左右图像中检测到单词。然后我们应该在 A x B 中的每对单词上找到函数overlap()的最大值:

    pos = arg_max{(a,b) in A x B: 重叠(a,b)}

    重叠函数可以是任何需要两张图像并计算其相似度的函数。你可以在那里使用,例如直方图比较、绝对差之和 (wiki) 或任何可以平衡准确性和性能的模板匹配算法。在比较两个单词图像时,它应该对平移、缩放和旋转保持不变,这也会增加复杂度。

    一般来说,这个问题并不容易,因此研究很有趣。

    【讨论】:

    • 感谢您的回答。尝试改变补丁大小,它不起作用。现在尝试图像相似性方法。尝试了phaseCorellate,但它给出了很多误报。将寻找并尝试其他方法。
    猜你喜欢
    • 2021-12-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多