2014-02-11 276 views
1

我一直在阅读doxygen的,日子vtk的wiki和我还没有100%地肯定就是我要问,甚至有可能。VTK转换2D图像到3D(C++)

我要完成什么是采取将输入的2D图像中的公共格式(即PNG)和输出的3D模型(PNG - >模型/网或2D - > 3D)。一个很好的例子就是,如果我在MS画图中绘制一个立方体并将绘图保存为PNG,那么请阅读该图像并生成该立方体的三维模型。所以我的第一个问题是这可能吗? IT似乎应该有一些方法来获取图像数据并转换为polydata并从那里完成模型构建。这就是我的想法(在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的一般处理流水线,但细节(例如几何过滤器)可能需要由您自己来实现。

您想要完成的实际任务是一个算法问题,它具有CAD领域的研究兴趣(明确定义的二维工程图到三维模型中),例如work

0

投影的3D对象的2D平面上,并且光栅化它,不可逆的过程中,由于大量的信息被丢失,而这样做(深度,隐藏表面,拓扑等)。你所能做的就是试图通过智能猜测来恢复那些丢失的信息。

即使是高度专业化的系统的立体视觉,相当大的并行处理能力和上下文信息庞大的数据库 - 人类 - 可以很容易地在那(optical illusiontrompe l'oeil)上当。

解决了用电脑是可怕的复杂,其结果很可能令人失望。