2014-02-11 316 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)上當。

解決了用電腦是可怕的複雜,其結果很可能令人失望。