【发布时间】:2011-08-04 05:59:02
【问题描述】:
好吧,伙计们,我想我已经做了所有我能做的事情,除了一件重要的事情:形状提取。我已经以一种相当简单的方式做到了这一点,但是在某些情况下它确实搞砸了。我这样做的方法是:
- 在大纲列表中选择一个点 生成一个边界矩形和 选择最接近的点 左上角(点 p)。
- 创建一个新的 Shape 对象并添加 p 到形状的轮廓。
- 如果主图没有更多 可供我们测试的点,我们 只需返回形状对象。
- 从 p 中获取最近的点并存储 它最接近。
- 而离最近的距离
点到p点小于或
等于十 - ----将其添加到大纲中
- ----从主点列表中移除
- ----将p设置为最近的
- ----从最近处获取另一个最近点
- ----重复
- 如果形状有十个或更少的点 在其大纲中,返回一个空对象 (忽略所有小形状)
- 否则,返回形状对象。
我重复这个过程,直到主要点列表变空。这意味着我们提取了所有形状。
现在我做了几次组合形状。如果我有 |、--- 和 |,就会如此。彼此相邻,它将组合成一个矩形。你明白我的意思吗?假设我有一个圆形,上面的提取代码有时会说一半圆形是一种形状,另一半是另一种形状。所以当我组合这些形状时,它就变成了一个圆圈。
叹息,我也不能发布图片,除了上传网站,我不能在任何地方上传。这有一些问题。看看以下内容:
左图为起始图,右图为轮廓点。现在我单击确定形状按钮。它确定图片中最主要的形状(轮廓中包含最多点的形状对象)的形状。
现在,它正确地说这是一个四边形,但原因是错误的。由于我的组合形状(为了获得矩形形状而需要完成,否则它将是一个形状的一条小线和另一个形状的另一条小线),它在测试中添加了手指的轮廓。
因此测试了整个单个形状(第二张图片右侧的黑色轮廓)。不仅是“矩形”部分,而且该图片中的所有内容都经过测试。你们能想出任何方法来清理这个东西并只提取矩形部分而不是包括手指吗?我为此考虑了 A* 的一些变体,但在像这张图片这样的情况下,它不会创建循环。那么,一旦 A* 访问了每个点(因为它无法返回起点),我该怎么办。那我该怎么办?
有人可以帮我解决这个问题吗?
【问题讨论】:
-
嗨,我认为需要更多信息。如何创建大纲列表?您到底想分离什么(照片中的黑色大矩形、前景中的对象、所有对象的所有边缘)?
-
我的代码大约有 700 行。你真的要我经历它的每一个部分吗?我的目标是获得图片中最主要物体的形状。所以我应该得到一个矩形。
-
OutlineLines 方法是我获得主要大纲的地方:phstudios.svn.beanstalkapp.com/c458/trunk/Project/…
-
对不起,我后来意识到它在标题中:)。您是否打算用它来搜索黑色矩形,或者一种颜色的各种对象,甚至是多种颜色的对象?
-
颜色无关紧要。我只是将其用于视觉表示。我基本上只有 List
大纲。它们不会被着色。除了适当的“清理/提取”算法外,我基本上已经完成了所有工作。如您所见,手指已添加到点列表中。我需要阻止这种情况发生,而且我还需要它适用于所有形状、旋转、扭曲和大小。
标签: image-processing feature-extraction shape-recognition