【问题标题】:"Simple" edge - line - detection“简单”的边线检测
【发布时间】:2013-09-12 06:25:44
【问题描述】:

在图像中我需要找到“表格” - 简单的矩形。 问题在于边缘识别,因为潜在的照片会很“暗”。
我尝试了边缘 - sobel,canny,log,.... - 识别,然后是霍夫变换和寻线。但这种算法不足以完成这项任务。
有什么可以帮助我的:
- 它是矩形!,仅在透视图中(类似于适合透视矩形的东西?)
- 该对象必须覆盖至少 90% 的照片(我知道我需要查看照片边缘附近)
- 该矩形具有快速相同的颜色(例如木餐桌)
- 我需要找到至少“仅”4 个角..(但是是的,最好找到那张桌子的边缘)

我知道例如 sobel、canny 或 log 算法的工作原理,我也知道 Hough。当然,这些算法在黑暗或非对比度图像上会失败。但是是否还有其他方法,例如基于“拟合”的方法?

图片显示我可以得到的照片(你看它会很暗)和我需要的东西找到:



这真的是“漂亮”的图片(没有噪音)。我在更多噪点图片上对其进行了测试,结果……简直太可怕了……
这张图片的结果与实际算法日志(与另一张看起来相同):

我知道图像和边缘识别不是简单的挑战,但是我可以尝试使用一些新的更好的方法或类似的方法吗?
在这里的一篇文章中,我发现了 LSD 算法。它的描述看起来非常好,而且它似乎也能识别出非常好的直线。您认为将它用于 canny 或 sobel 检测会更好吗?
另一种解决方案是角点检测,在我的示例图像上效果更好,但它识别的点太多并且时间会出现问题..我需要连接所有点并“找到”表格..

另一种解决方案:
我想到了点对点映射。我将有一些“虚拟”表并尝试将上面的表与那个“虚拟”表映射(绘画中的简单二维正方形:])..但我认为点对点映射会给我带来很大的错误,或者它不会工作.

有人对算法使用什么有任何建议吗?
我尝试在 FIJI 中识别边缘,然后将边缘检测到的图像放入 matlab 中,但是它也不好用..:/..

你认为最好用什么?简而言之,我需要找到一些处理非对比度、暗图像的算法。

【问题讨论】:

  • 这不是一张“非常漂亮”的照片。如果图片很少(
  • 对这个解决方案也感兴趣,canny 等不会很好地工作.. :( 但是你在“可以帮助我的东西:”下有一些好主意......我'我会尽量记住这些想法,因为它们是好的方法:-) 支持它
  • 几个月前我和我的大学教授讨论过这个问题(他是图像识别等方面的专家)。他建议我使用graphcut算法。然后我有一些关于医学图像识别的程序,我们正在使用graphcut(有2个版本,我现在不记得了,大约5个月前)但是一个版本的graphcut正在使用像素强度和自己的像素和第二个是处理纹理。我认为 graphcut 是一种相对快速的方法,具有非常好的识别结果。然后他们建议我分水岭方法。它也可以很好。

标签: matlab image-processing image-recognition edge-detection hough-transform


【解决方案1】:

我会尝试一些修改后的snakes 算法:

你用 4 个点参数化你的矩形,并在图像角落的某个地方初始化它们。然后使用一些优化算法(例如梯度下降、模拟退火等)将这些点移向图像特征。

图像特征可以是要在这四个点之间的线上评估的边缘特征(例如直接索贝尔或某些高斯滤波图像的索贝尔)和要在这四个点上评估的角特征的组合。

此外,您可以惩罚不太可能的矩形(可能取决于点之间的角度或到图像边界的距离)。

【讨论】:

  • 感谢您的建议,我会尝试的。但我想知道时间复杂度。这可能不会“实时”工作:]..但如果没有其他选择。这可能是结果..
  • 实际上并没有那么糟糕。在计算点连接处的特征时利用并行化,您应该能够在一秒钟内完成此操作。霍夫变换中的穷举搜索当然具有更高的复杂性。
  • 嗯,我在斐济尝试了那条蛇(我尝试了更多水平集),但它似乎不准确(如果我做一些“优化”并将该图像转换为黑白蒙版),它花费太多时间:/(FIJI 很慢,但这真的很慢)
  • 我的经验是,活动轮廓不适用于具有嘈杂环境和/或对比度差的高分辨率图片。我从 OP 的图片中看到的问题是有多个边缘,因此能量很高。所以这会扭曲蛇。
猜你喜欢
  • 2016-02-22
  • 2013-09-17
  • 2015-08-24
  • 1970-01-01
  • 2014-05-01
  • 2014-06-16
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多