C# 如何将位图转换为WPF中的路径集合(代码中不是XAML)

C# 如何将位图转换为WPF中的路径集合(代码中不是XAML),c#,wpf,path,shapes,writeablebitmap,C#,Wpf,Path,Shapes,Writeablebitmap,我有一个占用网格,有3种状态-占用、空闲和未知。占用网格是一个简单的二维状态数组。栅格表示一个楼层平面,其中占用=墙,自由=开放楼层,未知=墙后有什么或未映射。这个网格是800x800宽,每个单元代表现实世界的5cm 我想把它做成WPF路径的形状。然后我可以在屏幕上进行操作,允许用户添加墙(通过画线),并最终导出为某种形式的CAD标准/SVG/等 我开始玩可写位图,可以创建网格的完美图片,不管位图是不是路径,我的一些线条参差不齐或没有连接 我正在寻找如何将这个网格或位图转换成干净的wpf形状的想

我有一个占用网格,有3种状态-占用、空闲和未知。占用网格是一个简单的二维状态数组。栅格表示一个楼层平面,其中占用=墙,自由=开放楼层,未知=墙后有什么或未映射。这个网格是800x800宽,每个单元代表现实世界的5cm

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

我开始玩可写位图,可以创建网格的完美图片,不管位图是不是路径,我的一些线条参差不齐或没有连接


我正在寻找如何将这个网格或位图转换成干净的wpf形状的想法。直线、多边形、多段线或路径都会让我非常高兴,因为一旦有了它们,我就可以做任何事情。有什么想法吗?

如果你的墙只有一些基本的几何形状(线,其他像圆的形状变得更复杂),你可能需要使用或其他一些变换,这取决于你的图像看起来如何。如果我理解正确,你的图像只有三种颜色,你可能不必使用一些边缘检测算法


编辑:如果“已占用”状态仅表示墙的薄表面,则这就是您所需要的。你会得到墙的线条(划定自由/未知区域)

你能上传一张示例图像吗?我正在使用的示例图像-黑色是未知空间,白色是墙空间,蓝色是自由(地板)空间。这是从我的网格渲染的位图,它的数据与我非常熟悉的图像相同:)那是什么传感器?机器人或其他东西?很好的指针-但一旦我检测到边缘并成形,你建议我如何将它们转换为直线/多段线/路径?经过Hough(或类似)变换后,你会得到表示图像中的直线的点(在变换空间中)(即使你只提供一些坐标,而不是真实图像)(这应该更快)。然后将这些线与地图数据进行比较,以确定它们的长度。这将为您提供一组覆盖墙的线。如果您获取它们的交点(点集),您应该能够创建多段线、多边形或任何您需要的其他内容。我刚刚开始真正的编程(不仅仅是画画和思考)做一些非常相似的事情-任何经验都可以。我首先尝试对位图进行矢量化,看看这是否符合我的要求。我正在使用的库中有一些边缘检测功能(Potrace-Potrace的.net端口)。我想如果我得到一个svg,我可以将其转换为路径/多边形,我是一个快乐的人。我将使用progressPotrace进行更新。Potrace给了我一些非常好的结果。如果你想要一些指针,请直接联系我。Hough Transform让我没有任何地方!