WPF - 2D изображение в 3D - PullRequest
       38

WPF - 2D изображение в 3D

0 голосов
/ 08 января 2019

Здравствуйте, я пытаюсь создать 3D-карту из 2D растрового изображения. У меня есть изображение вроде 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 я добавляю куб для каждого пикселя. И результат как это.

Но в этом методе я создаю более 400 различных кубов. Так что это было очень медленно. Трудно увеличить и повернуть эту карту из-за проблем с производительностью.

Если я использую более крупный объект для 3D-преобразования, производительность улучшается, но для этого метода я должен использовать алгоритм сегментации изображения для обнаружения кругов, многоугольников.

Не могли бы вы помочь мне с этой проблемой? Заранее спасибо.

P.S. : Я использую Helix-3d-Toolkit в WPF для 3D-просмотра.

1 Ответ

0 голосов
/ 09 января 2019

Я думаю, что вы все еще можете использовать 2D-карту в качестве карты высот, создать сетку сетки в соответствии с вашим разрешением сетки на плоскости XZ, изменить положение вершины Y в соответствии с данными вашей карты. Тогда это будет одна сетка вместо множества блоков.

...