2014-02-11 2 views
1

나는 doxygen과 vtk wiki를 며칠 동안 읽었으며, 나는 여전히 내가 무엇을 요구하는지 확신 할 수 없다.vtk 3d 이미지로 변환 (C++)

입력 형식의 2D 이미지를 일반적인 형식 (예 : PNG)으로 가져 와서 3D 모델 (PNG -> 모델/메쉬 또는 2D -> 3D)을 출력합니다. 좋은 예는 MS 페인트로 입방체를 그려서 PNG로 저장 한 다음 이미지를 읽고 그 입방체의 3D 모델을 생성하는 것입니다. 그래서 내 첫 번째 질문은 이것이 가능한가? 이미지 데이터를 가져 와서 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는 아마도 이미지 처리 (예 : 모서리 및 선과 같은 주요 기능 추출) 단계를 표현하고 데이터 구조에서 더 많은 선택을 제공하는 데 도움이 될 것입니다. 코드에 표시된 아이디어는 2 차원에서 3 차원까지 일반적인 처리 파이프 라인을 보여 주지만 세부 사항 (예 : 형상 필터)은 사용자가 직접 구현해야 할 수도 있습니다.

달성하고자하는 실제 작업은 CAD 도메인 (잘 정의 된 2 차원 엔지니어링을 3D 모델로 작성)에 대한 연구 관심 분야 인 알고리즘 문제입니다 (예 : work).

0

3D 개체를 2D 평면에 투영하고 래스터 화하는 것은 되돌릴 수없는 과정입니다. 깊이, 숨겨진 표면, 토폴로지 등 많은 정보가 손실됩니다. 당신이 할 수있는 일은 똑똑한 추측을 통해 잃어버린 정보를 복구하는 것입니다.

입체 시각이있는 고도로 전문화 된 시스템이라 할지라도 상당한 병렬 처리 능력과 엄청난 문맥 정보 데이터베이스 (인간)가 쉽게 (optical illusion, trompe l'oeil) 속아 넘어 질 수 있습니다.

컴퓨터로 해결하는 것은 끔찍하게 복잡하며 그 결과는 실망 스럽습니다.