在没有清晰边框/边缘的图像中查找矩形空间

时间:2014-07-10 19:07:57

标签: c++ opencv image-processing computer-vision

我正在尝试找到一个具有相似像素值但没有任何边框/边缘的区域。

我上传了一张专辑,其中所需的区域是用矩形框绘制的 http://imgur.com/a/rk3AO#0

尽管很少有图像具有良好定义的边缘,但我正在尝试提出一种算法,该算法适用于没有清晰边缘的图像。

我正在考虑逐像素地迭代图像并尝试找到具有相似像素值的区域并在它们周围绘制一个矩形。

编辑:

我能够消除噪音,并想出一个带有重要边缘的二进制图像,我不清楚如何在这些图像中拟合长宽比约为4:3的矩形http://imgur.com/a/zPyFW#0

1 个答案:

答案 0 :(得分:1)

你的方法并不是真正的方法。自动化效率不高且非常难 - 如果按值比较像素,最终会分别为每张图片找到合适的像素值范围(因为取决于图片, 类似 像素值意味着不同的东西),这很麻烦且非常耗时。

你的任务包含两个部分:第一部分是提取均匀颜色的区域,第二部分是尝试在该区域内拟合最大的矩形。

为了识别可以绘制矩形的区域,第一步是识别这些区域的边缘。熟悉高通图像滤镜和渐变滤镜 - 它们可以让您检测边缘,从而区分像素值不同的区域。

您还可以尝试 Hough变换 - 它用于识别图像上的直线,如果您的第三张图像(白板上写有一些文字)可能会特别有用,即当边界没有明确定义时。

一般情况下,请尝试使用Google搜索“边缘检测”,“边缘提取”等。 - 许多论文,图像处理库等都涵盖了这一主题。将为您节省大量时间,如果您要进行一些严肃的图像处理,无论如何您都必须学习它。

如果您想测试它们,则不必自己实施大多数算法,因为它们已经在 openCV 中实现。


提取边缘后,您可以这样做:对于检测到的区域中包含的每个像素(即您想要适合矩形的区域):

  1. 尝试绘制一个最大的矩形,其左上角锚定在该像素中(如果您从该区域的左上角开始迭代)。

  2. 将此矩形的尺寸与您目前能够适合的最大矩形进行比较。

  3. 保存矩形的尺寸和位置(如果它是当前最大的矩形)。

  4. 在遍历所选区域的所有像素后,您将获得最大的矩形,您可以将其与应该绘制的位置放在一起。