【问题标题】:Finding a grid in an image在图像中查找网格
【发布时间】:2011-11-23 19:50:37
【问题描述】:

有一个三消游戏截图(例如http://www.gameplay3.com/images/games/jewel-quest-ii-01S.jpg),找到网格(带有瓷砖的桌子)的绑定框的正确方法是什么?棋盘不必是完美的矩形(如屏幕截图所示),但每个单元格都是完全正方形的。

我尝试了几款游戏,发现可以进行一些游戏中的图像转换来增强网格内的图块(例如在这个游戏中,将 V 通道从 HSV 颜色空间中取出就足够了)。然后我可以放大图块使它们重叠,找到图像的最大轮廓并从中获取绑定框。

上述方法的问题是每个游戏(甚至同一游戏中的关卡)可能需要不同的转换来获取图块。所以问题是 - 有没有一种标准的方法来增强网格内的瓷砖或网格线(我试过用霍夫变换找到线,但是,虽然网格看起来很明显,霍夫没有找到它) ?

另外,如果屏幕截图是使用手机摄像头而不是桌面截图呢?根据我的经验,拍摄的图像颜色不太清晰(取决于光线),并且可能会有些失真,因为无法将手机完全放在屏幕前面。

【问题讨论】:

    标签: image-processing opencv pattern-recognition


    【解决方案1】:

    我会采用以下方法进行屏幕截图:

    1. 使用类似 canny 的边缘检测器来查找图像中的角点。
    2. 执行霍夫线变换。这在边缘图像上应该可以很好地工作。
    3. 如果您有一些关于图块大小的信息,您可以使用某种网格空间模型消除误报线(例如,与图像的 x/y 轴和/或距离/仅具有小角度的线)瓷砖边框的角度。
    4. 通过查找 canny 在线条下方/旁边找到的边缘来识别找到的霍夫线下方的瓷砖边框。

    您使用了哪种霍夫变换实现方式?你是如何预处理图像的?

    另一种方法是使用某种机器学习方法。当您在 OpenCV 中工作时,您可以使用类似 Haar 的特征检测器。可以在此处找到使用类似 Haar 的特征进行人脸检测的示例:

    OpenCV Haar Face Detector example

    另一种机器学习方法是结合使用支持向量机 (SVM) 的定向梯度直方图 (Hog) 方法。示例位于此处:

    HOG example

    您可以在以下位置找到有关 HoG 检测的一般信息:

    Hog detection

    【讨论】:

    • 我使用 cv::HoughLinesP 找线,要么选择的线太多(它们可以覆盖大部分图像),要么没有找到网格上的线。使用 Canny 和 HoughLinesP 的参数,我可以减少误报的数量,但这些参数显然对其他游戏没有好处。我没有关于板上瓷砖的大小或数量的信息,所以我没有简单的方法来消除这些线条。
    • 另外,我不认为我完全理解第 4 步。
    • 关于第 4 步:如果您对 canny 图像进行霍夫线变换,您最终可能会得到比您正在搜索的图块之间的实际边界更长的线。找到图块实际范围的一种方法是沿着找到的霍夫线搜索精明边缘检测器的响应。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2020-07-08
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多