【问题标题】:Find Corner in image with low resolution (Checkerboard)在低分辨率图像中查找角落(棋盘)
【发布时间】:2019-01-11 08:46:19
【问题描述】:

我需要一些关于角点检测的帮助。 我打印了一个棋盘并使用网络摄像头创建了这个棋盘的图像。问题是网络摄像头的分辨率较低,因此无法找到所有角落。所以我增加了搜索角的数量。现在它找到了所有角落,但同一角落的不同角落。 所有点都存储在矩阵中,因此我不知道哪个元素取决于哪个点。 (我不能使用棋盘功能,因为我的 Matlab 版本中没有该功能) 我目前正在使用 matlab 函数角。 我的问题: 是否可以搜索所有点云的极值以获得每个角的 1 分?或者有人知道我能做什么? --> 请看附图 谢谢你的帮助!

【问题讨论】:

  • 我记得几年前我在做这些东西时,我需要非常准确的图像。我不仅需要进入相机并获取未压缩的原始数据,以获得良好的角落(您的照片显然是 jpg 或其他压缩类型),而且我还需要去一家专业的印刷店,以便在纸张质量很好。结论:使用蹩脚的硬件,得到蹩脚的结果(反之亦然)。您可以随意处理此图像,如果原始数据不好,它永远不会 100% 准确。

标签: matlab computer-vision


【解决方案1】:

看图像我猜是角点检测的误报是由您的网络摄像头图像采集软件使用的有损压缩算法引入的compression artifacts 引起的。您可以在棋盘区域的边缘清楚地看到ringing artifacts

你可以尝试两种不同的方法:

  1. 检查网络摄像头的采集软件是否可以禁用压缩或更改为无损压缩
  2. 使用您已有的图像,您可以尝试通过使用简单的阈值操作对图像进行二值化来减轻压缩的影响(在棋盘的情况下,这甚至不意味着丢失信息,因为图像本质上是二值的)。

如果您想选择选项 2),我建议您执行以下步骤。假设存储图像的变量名为img

  • 查看灰度值的分布,例如使用imhist 函数如下:imhist(img)
  • 理想情况下,您会看到没有重叠的干净双峰分布。在两个峰的中间选择一个强度值I
  • 然后简单地通过分配img(img<I) = 0; img(img>I) = 255 进行二值化(假设img 是uint8 类型)。
  • 然后再次运行角点算法,看看异常值是否消失了

【讨论】:

    猜你喜欢
    • 2017-08-23
    • 2014-11-20
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多