在低分辨率的图像中找到角落(棋盘格)

时间:2019-01-11 08:46:19

标签: matlab computer-vision

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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