VTK之影象資料結構
阿新 • • 發佈:2019-01-03
1.VTK影象資料結構
數字影象檔案內容由兩個部分組成:影象頭資訊和資料。影象頭資訊定義了影象的基本資訊,主要包括原點位置(Origin)、畫素間隔(Space)和維數(Dimension)。通過這三個引數即可以確定影象空間位置和大小。影象可以看作空間中的一個規則的網格,網格中的每個最小單元稱為畫素(二維)或體素(三維),網格在每個方向上的畫素或體素個數即為影象在該方向的維數。畫素索引表示每個畫素在影象網格中的位置,是影象內部的網格座標(x,y,z)。對於普通的一張影象而言,z方向維數為1。
影象資料即為影象畫素的畫素值,一般採用一維陣列來表示和儲存。VTK中影象資料結構由類vtkImageData來表示。這種資料型別是結構化的,這意味著只要用很少的引數(原點位置、畫素間隔和維數)就能準確定義每個資料點的位置。
virtual void *GetScalarPointer(int coordinates[3]);// 根據給定的畫素索引得到指定的畫素值,注意:此處返回的是第(x,y,z)個畫素值的地址
virtual void *GetScalarPointer(int x, int y, int z);//根據給定的畫素索引得到指定的畫素值,注意:此處返回的是第(x,y,z)個畫素值的地址
virtual void *GetScalarPointer();//返回影象資料陣列的頭指標,然後根據頭指標可以一次訪問並設定索引畫素,影象資料陣列採用一維陣列
vtkSmartPointer<vtkBMPReader> reader = vtkSmartPointer<vtkBMPReader>::New(); reader->SetFileName(argv[1]); reader->Update(); int dims[3]; reader->GetOutput()->GetDimensions(dims); double origin[3]; reader->GetOutput()->GetOrigin(origin); //reader->GetOutput()->SetOrigin(10,0,0); double space[3]; reader->GetOutput()->SetSpacing(20, 20, 1); reader->GetOutput()->GetSpacing(space); std::cout << dims[0] << " " << dims[1] << " " << dims[2] << endl; std::cout << origin[0] << " " << origin[1] << " " << origin[2] << endl; std::cout << space[0] << " " << space[1] << " " << space[2] << endl; int nbOfComp; nbOfComp = reader->GetOutput()->GetNumberOfScalarComponents();//獲取畫素的元組組分數,確定是灰度圖、梯度圖還是RGB圖 for(int k=0; k<dims[2]; k++) { for(int j=0; j<dims[1]; j++) { for(int i=0; i<dims[0]; i++) { if(i<100 && j<100) { unsigned char * pixel = (unsigned char *) ( reader->GetOutput()->GetScalarPointer(i, j, k) ); *pixel = i; *(pixel+1) = j; *(pixel+2) = 0; } } } }