2010-08-03 34 views
1

有有3个状态的占用格 - 占用,自由,未知。占用网格是一个简单的2维状态数组。网格代表一个平面图,其中占用=墙壁,自由=开放楼层,未知=墙壁后面或未映射。这个网格是800x800宽,每个单元代表5cm的真实世界。我如何将位图转换为路径在WPF集合(代码不XAML)

我想要把它做成一个WPF路径形状。然后,我可以在屏幕上操作,允许用户添加墙(通过绘制线),并最终导出到某种形式的CAD标准/ SVG /等。

我开始写的位图打,可以创建网格,bitmp怎么过不是一个路径的一个完美的画面,我的一些线条的锯齿状或悬空。

我正在寻找如何这个网格或thebitmap,转化为清洁WPF形状转换思路。行,多边形,折线或路径都会让我非常高兴,一旦我有了我可以做的任何事情。有任何想法吗?

+0

你能上传样本图片吗? – 2010-08-03 15:45:42

+0

我正在使用的示例图像 - http://www.xehran.com/floorsample.png黑色是未知空间,白色是墙壁空间,蓝色是空闲(地板)空间。这是从我的网格呈现的具有相同数据的位图 – 2010-08-03 19:02:25

+0

该图像对我来说看起来很熟悉:)那是什么传感器?机器人还是别的? – Lukas 2010-08-03 19:34:29

回答

0

如果您的墙壁只有一些基本的几何形状(线条,其他像圆圈更复杂),您可能需要使用Hough transform或其他转换,具体取决于图像的外观。如果我正确地理解,您的图像只有三种颜色,您可能不必使用某种边缘检测算法。

编辑:如果占用状态仅代表薄壁的表面是你所需要的。你会得到你的墙壁线(划定自由/未知区域)

+0

好的指针 - 但是一旦我检测到边缘并进行了修整,你如何建议我将它们翻译成线/折线/路径? – 2010-08-03 18:43:54

+0

经过Hough(或类似的)变换之后,您可以获得表示在图像中找到的线条(即使只提供一些坐标,而不是真实图像(应该更快))的点(在变换空间中)。之后,将这些线条与地图数据进行比较以确定其长度。这给你一套覆盖你的墙壁的线条。如果你把他们的交点(点集),你应该能够创建一个折线,多边形或任何你需要的东西。我只是在开始一个真正的编程之前(不只是绘图和思考)工作的东西非常相似 - 任何经验的欢迎 – Lukas 2010-08-03 19:33:13

+0

我第一次尝试矢量化位图,看看是否得到我想要的。在我使用的库中有一些边缘检测功能(Potrace - Potrace的.net端口)。我想如果我得到一个svg,我可以把它翻译成一个路径/ poly,我是一个快乐的人。我将更新进展 – 2010-08-03 20:54:52