c++ - 在没有清晰边界/边缘的图像中找到矩形空间

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

我试图找到一个没有任何边界/边缘的具有相似像素值的区域。

我已经上传了一个相册,其中在一个矩形框中绘制了所需的区域 http://imgur.com/a/rk3AO#0

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

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

编辑:

我能够去除噪声并得到具有重要边缘的二值图像,但我不清楚如何在这些图像中拟合长宽比约为 4:3 的矩形 http://imgur.com/a/zPyFW#0

最佳答案

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

您的任务包含两部分:第一部分是提取颜色均匀的区域,第二部分是尝试在该区域中放置尽可能大的矩形。

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

您也可以尝试Hough 变换 - 它用于识别图像上的直线,对于第三张图像(上面写有一些文本的白板)可能特别有用,即当边界没有那么明确地定义时。

一般来说,尝试使用谷歌搜索“边缘检测”、“边缘提取”等 - 许多论文、图像处理库等都详细介绍了这个主题。我将为您节省很多时间,如果您要进行一些严肃的图像处理,则无论如何都必须学习它。

如果您想测试这些算法中的大部分,您不必自己实现它们,因为它们已经在 openCV 中实现。


提取边缘后,您可以执行以下操作:对于检测区域中包含的每个像素(即您想要适合矩形的区域):

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

  2. 将这个矩形的尺寸与您目前能够容纳的最大矩形进行比较。

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

在遍历选定区域的所有像素后,您将获得可以适合的最大矩形及其绘制位置。

关于c++ - 在没有清晰边界/边缘的图像中找到矩形空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684438/

相关文章:

c++ - 线程多次调用析构函数

c++ - 如何使用生成 .cpp 和 .h 文件的自定义生成器?

opencv - OpenCV数据类型

matlab - 亨斯菲尔德单位可以转移吗?

image-processing - 指纹图像比较

python - 去除圆形蒙版周围的空白

c++ - 在复合模式中搜索特定元素

c++ - Visual Studio 2010 C++ 不包括 #include 中的文件

python - 两个相似形状之间的 OpenCV 形状匹配

python - 有什么方法可以将 numpy 数组指定为 'Image Widget' 吗?