【问题标题】:Corner detection algorithm for mobile移动端角点检测算法
【发布时间】:2010-11-12 01:43:25
【问题描述】:

我正在尝试找到一种可以检测手机图像中角落的好算法。有多种算法可以做到,我不确定哪一种在内存和处理器有限的环境中表现更好。

具体来说,我试图在使用手机相机拍摄的照片中找到数独网格。我正在使用 C#,找不到任何具有基本图像处理功能的库。我实现了一个 Sobel 滤波器来进行边缘检测,这就是我的立场。

为了澄清问题,是否有人对使用特定算法或库有任何建议?

【问题讨论】:

    标签: c# image-processing computer-vision


    【解决方案1】:

    我不会说“角落检测”本身就是一个很好的方法。退后一步,想想一张数独网格的照片,您可能可以做出很多假设来简化事情。

    例如,数独网格看起来总是一模一样:

    • 白色方块
    • 9 x 9 规则网格

    treating the image in the HSV colour space 将允许您寻找高亮度区域(白色),RGB 对于大多数图像处理技术来说有点不足。

    thresholding the image 应该会降低噪音

    Adjusting the image histogram first 也可能会给您带来更好的结果,因为它可能会使网格变白(不过取决于图像)。

    那么你所要做的就是找到一个正方形。因为您知道网格在其中是规则的,所以您可以相应地划分像素并对带有数字的正方形进行 OCR。

    :D

    【讨论】:

    • 感谢您的回答。我使用了 HSV,但以不同的方式。假设网格本身将用黑色墨水打印,我会保留黑暗区域,但您的建议似乎更好。在检测正方形之前,我可能还需要进行剪切变换。我拍了一些测试图像,所有的网格都变形并且是梯形。或者我可以说所有具有一定大小的不连贯的白色区域都是网格。
    【解决方案2】:

    我发现OpenCV 在处理图像方面非常有用,我认为自己是一个相当普通的程序员。

    Here's an example(在 C++ 中,但您可能可以移植它)在 OpenCV 中进行角点检测。

    【讨论】:

    • 嗨,克里斯,我以前使用过 OpenCV,但我不知道它的任何端口可以在手机中运行。你知道这样的事吗?也许我可以快速使用它并尝试使用 windows mobile sdk 编译它。谢谢。
    【解决方案3】:

    由于您正在寻找常规的 9x9 网格,请考虑 Hough transform。一种方法是首先运行边缘检测器,使用原始霍夫变换找到所有直线,然后尝试找出它们中的哪一条形成了网格。或者,也许您可​​以想出一个巧妙的方法来参数化整个网格。

    【讨论】:

    • 我考虑过霍夫变换,但我担心它的复杂性。我正在考虑找到垂直边缘和水平边缘相交的点。但是,当有斜线时,它也会失败。也许我可以使用霍夫变换首先删除这些线条。谢谢。
    • 其实我觉得找角是个好策略。有许多角点检测算子。哈里斯算子是一种流行的算子。 en.wikipedia.org/wiki/Corner_detection
    • 霍夫变换非常快速且易于实现。然后,可以循环检测到的线,计算它们的长度并搜索与其他 6-7 条线相交的线。
    猜你喜欢
    • 2014-01-31
    • 2023-03-18
    • 2012-03-24
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多