C# 二元图
我有一个int数组,如下所示C# 二元图,c#,c#-4.0,C#,C# 4.0,我有一个int数组,如下所示 [1 0 0 0 1] [1 1 0 0 1] [1 1 0 0 1] 它不是更立体的。我写这篇文章不止一行,只是为了更好地格式化。 我现在要找到一种方法,如何将这个数组转换成一个图 我找到了算法的这些步骤 将图像展开为αx α像素大小 将图像细化到单位 使用任何 细化算法 走过每一条线 绘制以确定关键点 交点、直线/曲线 连接这些点 在步行过程中,如果 边缘被发现,视其为 端点作为单独的 点 注意起点和终点 点,最大距离的点 开始和形状(直线/曲线)
[1 0 0 0 1]
[1 1 0 0 1]
[1 1 0 0 1]
它不是更立体的。我写这篇文章不止一行,只是为了更好地格式化。我现在要找到一种方法,如何将这个数组转换成一个图 我找到了算法的这些步骤
第二步我已经做了 以下是该算法的更多信息: 图中表示顶点和边。这个 边是连接任意两点的直线或曲线。 边结束/开始的每个点都被视为 顶点。我们也有兴趣知道这一点 每一条直线/曲线,距离 起点。当图形可能包含 闭合曲线(如O)将被视为从a开始的曲线 在同一顶点结束的顶点 因此,每条边必须表示起点顶点、终点 顶点、形状(直线/曲线)和最大点 从起始顶点分离。图像扩展完成 通过计算扩展因子(最终图像大小/初始 图像大小),用于x和y坐标。起点和终点 然后计算新图像中每个像素的端点坐标 通过乘以膨胀系数来测量。这个 直线和曲线与最大值和最大值不同 直线/曲线起点所对的最小角度,a 距离起点和所有点更远的点 2个γ单位(参考图3)。一句话 最大和最小角度之间的差异 资料来源: 这个方向对吗
// Create the graph
Graph<short> graph = new Graph<short>();
// Step to the array ([1 0 0 1 0] [1 1 0 0 1] ...)
for (int i = 0; i < marked.Length; i ++)
{
if (marked[i] == true) //if the value is 1
{
// Create a new Node (with 1 as value)
GraphNode<short> node = new GraphNode<short>(1);
// And for all sorounding pixels with the value 1
for (int count = 0; count < getSurroundedPixel; count++)
{
// Create a new Node
GraphNode<short> surrondNode = new GraphNode<short>(1);
// And add the edge between the two nodes to the graph (costs = 1)
graph.AddDirectedEdge(node, surrondNode, 1);
}
}
}
//创建图形
图形=新图形();
//到数组的步骤([1 0 0 1 0][1 1 0 1]…)
for(int i=0;i
我仍然觉得很难说出作者认为什么是顶点。只有极值点和交点?路上的每一点?无论如何,我会从使用路上的每个点开始,然后清理东西(基于连续边的角度)。请记住,错误会随着时间的推移而累积。@NicoSchertler我认为每个点都有一个顶点。你如何“从使用路上的每个点开始,然后清理东西”?然后你只需要为每个填充的像素设置一个顶点,并为填充的邻域添加边。@NicoSchertler我是这样理解的:哦,代码太长了,不适合注释。@NicoSchertler我已经用我的代码编辑了我的startpost。