UsTK : Ultrasound ToolKit  version 2.0.1 under development (2025-03-13)
testUsVTKconverter.cpp
1 #include <visp3/ustk_core/usConfig.h>
2 
3 #ifdef USTK_HAVE_VTK_QT
4 
5 #include <visp3/ustk_core/usImageIo.h>
6 #include <visp3/ustk_gui/usVTKConverter.h>
7 #include <vtkImageImport.h>
8 #include <vtkMetaImageWriter.h>
9 
10 int main()
11 {
12  std::string mhd_filename;
13  // Get the ustk-dataset package path or USTK_DATASET_PATH environment variable value
14  std::string env_ipath = us::getDataSetPath();
15  if (!env_ipath.empty())
16  mhd_filename = env_ipath + "/post-scan/3D_mhd/volume.mhd";
17  else {
18  std::cout << "You should set USTK_DATASET_PATH environment var to access to ustk dataset" << std::endl;
19  return 1;
20  }
21 
22  // read image
24  usImageIo::read(postScanImage, mhd_filename);
25 
26  // Import image in vtk type
27  vtkSmartPointer<vtkImageData> vtkImage = vtkSmartPointer<vtkImageData>::New();
28  vtkImageImport *importer = vtkImageImport::New();
29  importer->SetDataScalarTypeToUnsignedChar();
30  importer->SetImportVoidPointer((void *)postScanImage.getConstData());
31  importer->SetWholeExtent(0, postScanImage.getWidth() - 1, 0, postScanImage.getHeight() - 1, 0,
32  postScanImage.getNumberOfFrames() - 1);
33  importer->SetDataExtentToWholeExtent();
34  importer->SetNumberOfScalarComponents(1);
35 
36  usVTKConverter::convert(postScanImage, vtkImage, importer);
37 
38  // picking random voxels to compare their pointers to make sure the conversion was good
39 
40  // voxel 0,0,0
41  if (vtkImage->GetScalarPointer(0, 0, 0) != postScanImage.getConstData())
42  return 1;
43 
44  // voxel 10,10,10
45  if (vtkImage->GetScalarPointer(10, 10, 10) != postScanImage.getData(10, 10, 10))
46  return 1;
47 
48  // voxel of middle or image
49  int middleX = postScanImage.getWidth() / 2;
50  int middleY = postScanImage.getHeight() / 2;
51  int middleZ = postScanImage.getNumberOfFrames() / 2;
52  if (vtkImage->GetScalarPointer(middleX, middleY, middleZ) != postScanImage.getData(middleY, middleX, middleZ))
53  return 1;
54 
55  return 0;
56 }
57 #else
58 #include <iostream>
59 
60 int main() { std::cout << "Install vtk with qt4 or qt5 support to run this test." << std::endl; }
61 
62 #endif
unsigned int getNumberOfFrames() const
Definition: usImage3D.h:137
Type * getData()
Definition: usImage3D.h:110
Type * getConstData() const
Definition: usImage3D.h:104
unsigned int getHeight() const
Definition: usImage3D.h:131
unsigned int getWidth() const
Definition: usImage3D.h:125
static void read(usImageRF2D< short int > &imageRf2D, const std::string &headerFileName)
Definition: usImageIo.cpp:153
static void convert(const usImagePostScan3D< unsigned char > &postScanImage, vtkSmartPointer< vtkImageData > &vtkPostScanImage, vtkSmartPointer< vtkImageImport > importer=NULL)
VISP_EXPORT std::string getDataSetPath()
Definition: us.cpp:54