【问题标题】:Finding a rectangular space in an image without clear borders/edges在没有清晰边界/边缘的图像中查找矩形空间
【发布时间】:2014-07-10 19:07:57
【问题描述】:
【问题讨论】:
标签:
c++
opencv
image-processing
computer-vision
【解决方案1】:
您的方法并不是真正的方法。它效率不高且很难自动化 - 如果您按值比较像素,您最终将尝试分别为每张图片找到合适的像素值范围(因为根据图片,相似 em> 像素值将意味着不同的东西),这很麻烦并且非常耗时。
您的任务包含两部分:第一部分是提取颜色均匀的区域,第二部分是尝试在该区域内放置可能的最大矩形。
为了识别可以绘制矩形的区域,第一步是识别这些区域的边缘。熟悉高通图像滤镜和渐变滤镜 - 它们可以让您检测边缘,从而区分像素值不同的区域。
您也可以尝试 霍夫变换 - 它用于识别图像上的直线,并且在您的第三张图像(上面写有一些文字的白板)的情况下可能特别有用,即当边界没有那么清楚地定义时。
一般来说,尝试使用谷歌搜索“边缘检测”、“边缘提取”等 - 许多论文、图像处理库等都很好地涵盖了这个主题。我会节省你很多时间,如果你要做一些严肃的图像处理,无论如何你都必须学习它。
如果您想测试这些算法,您不必自己实现大部分算法,因为它们已经在 openCV 中实现。
提取边缘后,您可以执行以下操作:对于检测到的区域(即要适合矩形的区域)内包含的每个像素:
尽量绘制一个最大的矩形,其左上角锚定在该像素中(如果您从该区域的左上角开始迭代)。
将此矩形的尺寸与您目前能够适应的最大矩形进行比较。
保存矩形的尺寸和位置,如果它是当前最大的矩形。
遍历选定区域的所有像素后,您将获得可以与应该绘制的位置相匹配的最大矩形。