2014-02-11 4 views
1

Я читал doxygen и vtk wiki в течение нескольких дней, и я все еще не уверен на 100%, что я прошу, даже возможно.vtk convert 2d image to 3d (C++)

Я хочу выполнить входное 2d-изображение в общем формате (например, PNG) и вывести 3d-модель (PNG -> Model/Mesh или 2d -> 3d). Хорошим примером этого было бы то, что если я нарисую куб в маске MS и сохраню рисунок как PNG, тогда прочитайте изображение и создайте 3d-модель этого куба. Итак, мой первый вопрос - это возможно? Кажется, что есть какой-то способ взять данные об изображении и преобразовать их в полидату и сделать вывод из этого здания модели. Это то, что я имею в виду (в C++):

int main(int argc, char *argv[]) 
{ 
//Verify correct number of input arguements 
if(argc < 2) 
{ 
    fprintf(stderr, "Usage: %s Filename(.png)\n"); 
    return EXIT_FAILURE; 
} 
std::string fileName = argv[1]; 
//Read file 
vtkSmartPointer<vtkImageReader2Factory> readerFactory =   vtkSmartPointer<vtkImageReader2Factory>::New(); 
vtkImageReader2 *imageReader = readerFactory->CreateImageReader2(inputFilename.c_str()); 
imageReader->Update(); 

//Get the image Data 
    vtkSmartPointer<vtkImageDataGeometryFilter> imageDataGeometryFilter = 
vtkSmartPointer<vtkImageDataGeometryFilter>::New(); 

imageDataGeometryFilter-> SetInputConnection (imageReader-> GetOutputPort()); imageDataGeometryFilter-> Update();

Итак, если ответ на первый вопрос - да, действительно ли это кажется удаленным на правильном пути?

ответ

0

Я сомневаюсь, что VTK предоставляет готовый алгоритм, адресующий общую 2d-форму в 3d-модель. Это в основном обратная проблема, то есть решения могут быть многочисленными; без применения каких-либо ограничений или предположений о форме объекта, было бы трудно.

VTK, вероятно, поможет вам выразить шаги при обработке изображений (например, извлечение важных функций, таких как углы и линии), а также предоставление большего выбора в структуре данных. Идеи, показанные в вашем коде, мне показывают только общий конвейер обработки от 2d до 3d, но деталь (например, фильтр геометрии), возможно, потребуется реализовать самостоятельно.

Фактическая задача, которую вы хотели бы выполнить, - это алгоритмическая проблема, представляющая интерес для исследования в области САПР (хорошо определенный 2d инженерный чертеж в 3d-модель), например, это work.

0

Проецирование 3D-объекта на двумерную плоскость и растрирование его не является обратимым процессом, так как при этом теряется много информации (глубина, скрытые поверхности, топология и т. Д.). Все, что вы можете сделать, это попытаться восстановить эту утраченную информацию с помощью умных догадок.

Даже высокоспециализированные системы со стереоскопическим зрением, значительной параллельной вычислительной мощностью и огромной базой данных контекстной информации - люди - могут быть легко обмануты при этом (optical illusion, trompe l'oeil).

Решение, что с компьютером ужасно сложно, и результат, скорее всего, разочаровывает.