WPF-2D图像到3D

时间:2019-01-08 07:50:44

标签: wpf 3d helix-3d-toolkit

您好,我尝试从2D位图图像创建3D地图。我有一个像this.的图像黑色像素是墙。并且此像素具有恒定的高度。它不是深度图像,高度没有差别。

现在我尝试了常规方法。

    void Map_2D_to_3D(Image<Bgr,Byte> map_image)
    {
        for (int i = 0; i < map_image.Height; i++)
        {
            for (int j = 0; j < map_image.Width; j++)
            {
                Bgr pixel_color = map_image[i, j];
                if (pixel_color.Blue == 0 && pixel_color.Red == 0 && pixel_color.Green == 0)
                {
                    View3D.Children.Add(helper_box.Create_Helper_Box(2, 2, 2, i * 2, j * 2, 2, Color.FromRgb(0, 0, 255)));
                }
            }
        }
    }

在XAML中

    <Grid x:Name="grid_3D" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2" Grid.RowSpan="1">
        <h:HelixViewport3D x:Name="View3D" >
            <h:DefaultLights/>               
        </h:HelixViewport3D>
    </Grid>

在for循环中,我为每个像素添加一个立方体。结果就像this.

但是用这种方法我创建了400多个不同的多维数据集。所以这很慢。由于性能问题,很难缩放和旋转此地图。

如果我使用更大的对象进行3D转换,性能会有所提高,但是对于这种方法,我必须使用图像分割算法来检测圆形,多边形。

您能帮我解决这个问题吗?预先谢谢你。

  

P.S。 :我正在WPF中使用Helix-3d-Toolkit进行3D视图。

1 个答案:

答案 0 :(得分:0)

我认为您仍然可以将2D地图用作“高度”地图,根据您在XZ平面上的网格分辨率创建网格,并根据地图数据更改顶点Y位置。然后它将是单个网格,而不是多个框。