我正在尝试找到一个很好的算法来检测手机图像中的角落。有多种算法可以做到,我不确定哪一种在内存和处理器受限的环境中表现更好。
具体来说,我试图在使用手机相机拍摄的照片中找到数独网格。我正在使用 C#,找不到任何具有基本图像处理功能的库。我实现了一个 Sobel 滤波器来进行边缘检测,这就是我的立场。
为了清楚起见,问题是有人对使用特定算法或库有什么建议吗?
我正在尝试找到一个很好的算法来检测手机图像中的角落。有多种算法可以做到,我不确定哪一种在内存和处理器受限的环境中表现更好。
具体来说,我试图在使用手机相机拍摄的照片中找到数独网格。我正在使用 C#,找不到任何具有基本图像处理功能的库。我实现了一个 Sobel 滤波器来进行边缘检测,这就是我的立场。
为了清楚起见,问题是有人对使用特定算法或库有什么建议吗?
我不会说“角落检测”本身就是一种很好的方法。退后一步,想想一张数独网格的照片,您可能可以做出很多假设来简化事情。
例如,数独网格总是看起来完全一样:
在 HSV 颜色空间中处理图像将允许您寻找高亮度区域(白色),RGB 对于大多数图像处理技术来说有点不足。
然后对图像进行阈值处理应该可以减少噪声
首先调整图像直方图也可能会给您带来更好的结果,因为它可能会使网格变白(尽管取决于图像)。
那么你所要做的就是找到一个正方形。因为您知道网格在其中是规则的,所以您可以相应地划分像素并对带有数字的正方形进行 OCR。
:D
由于您正在寻找常规的 9x9 网格,请考虑Hough 变换。一种方法是首先运行边缘检测器,使用原始霍夫变换找到所有直线,然后尝试找出它们中的哪一条形成了网格。或者,也许您可以想出一个巧妙的方法来参数化整个网格。
我发现OpenCV在处理图像方面非常有用,我认为自己是一个非常普通的程序员。
这是一个在 OpenCV 中进行角点检测的示例(在 C++ 中,但您可能可以移植它)。