OpenCV“Blured Corners”探测器(C ++)

时间:2016-06-18 10:07:52

标签: opencv image-processing detection feature-detection

我正在使用OpenCV 3.1和Visual Studio C ++。

目标

我想检测角落,而不是曲线,矩形或圆圈。这意味着,我想找到模糊字符的位置。这是我感兴趣的区域:

Areas of interest

红色区域具有更高的优先级,因为它们比使用当前Shi-Tomasi角点探测器可以检测到的橙色区域更加模糊。

我尝试了什么

我已经测试过Shi-Tomasi角点检测器 - 代码放在本教程http://docs.opencv.org/2.4/doc/tutorials/features2d/trackingmotion/good_features_to_track/good_features_to_track.html中,当您有清晰的图像时,可以很好地找到带有文本的区域。我想找到使用OpenCV的算法,它具有类似(非常好)的性能并且可以检测模糊文本。文本被模糊太多的区域(无法读取它 - 检测角落)应该被忽略。此外,应忽略具有良好清晰度的区域。

以下是我尝试过的示例 - 这是Shi-Tomasi教程的结果:

这是源图片:

Source image

这就是我得到的

Results

上部图像参数minDistance = 5,qualityLevel = 0.01,下部图像minDistance = 10,qualityLevel = 0.05其余参数对于两个图像都相同:

int blockSize = 3; bool useHarrisDetector = false; double k = 0.04;

错误的结果是它没有找到blured文本 - 右上角区域或左下角的数字“195”,例如“14毫秒”和/或“19毫秒”。 相反,它找到了最好的结果,这不是我想要的。

我相信如果我可以使用某种能够模糊锐利区域和锐化区域的内核,那么Shi-Tomasi角点探测器可能会找到结果。

有关如何达成目标的任何提示?

1 个答案:

答案 0 :(得分:0)

我可以想到一个小小的想法,但它可能会耗尽性能。

按窗口迭代图像窗口(3 * 3或更大以获得更好的性能)并在每次迭代中执行:

  1. 模糊这个窗口。
  2. 在模糊之前和模糊之后计算窗口之间的cv::Norm。将此值存储在每个窗口的某个位置。
  3. 这些值具有以下属性:

    1. 模糊度很高时它们很低。
    2. 模糊度低时它们很高
    3. 现在浏览这些值并找到符合条件的值。