我需要在图像中找到交叉。我知道每个红色方块的确切位置。现在我需要决定,方块内是否有交叉。这是最佳且最快的方法是什么?我使用的是OpenCv/c++!我可以尝试使用OpenCv的SVM吗?但它快吗?你有其他想法吗?
回答:
如果你确实知道每个数字框中心的坐标,并且你可以稍微调整图像采集,这应该是一个可行的任务。我看到的问题是,你的图像中存在亮度渐变,你应该通过拍摄更好的照片或使用大高斯滤波器和图像减法来消除它。否则,我不确定你能找到一个好的亮度阈值来区分有交叉和无交叉的部分。
你可以使用的另一种方法是计算像素的方差。这为你提供了一个很好的局部测量方法,以判断是否有深色笔迹扩散了你的像素分布。一个快速测试看起来很有前景
请注意,我没有得到盒子的真实位置。我只是将你的图像分成了大小相等的区域,这对于盒子/子盒子结构来说并不完全正确。因此,由于每个左上角的红色三角形和一些重叠的交叉,其中有一些误报。
所以我做了以下几件事:
- 去掉图像的红色通道,并将其转换为灰度图像。
- 用半径为100的高斯滤波器过滤该图像,并从图像中减去它。
- 我将你的图像分成了(7*6)x(7*2)个子区域。
- 计算每个子区域的方差,并为上述图像使用了大约0.017的方差阈值
- 方差较大的每个盒子都被标记为有交叉。