[vtkusers] VTK Medical example

Jon Haitz Legarreta jhlegarreta at vicomtech.org
Thu May 3 04:04:56 EDT 2018


Hello Salaheddine,
your question is unclear. Which is your specific problem? Can you
provide details about what you expect as an output and which the
current output is? Also, providing your code as a .cxx file and the
corresponding CMakeLists.txt, as well as the dataset you used, is
likely to attract a broader audience to try to reproduce your issue.

Right now, nobody will be able to run your program without additional
work (e.g. CMakeLists.txt), but especially because you hard-coded the
location of your input image (first, people may not use the same OS
you are using, and they are not likely to have/be willing to create
the same folder tree), and if not in a public repository, people will
not have access to it.

Also, read David Gobbi's answer to the very similar thread ([vtkusers]
Medical examples) from 2013 that you just used.

Adding a more descriptive subject increases your chances of getting a
useful answer, especially if it has not been asked/answered
previously.

BTW, the last return sentence will never be hit.

HTH,
JON HAITZ

--

On 2 May 2018 at 17:21, SalaheddineSTA <saleh.sta at live.fr> wrote:
> Hello, i have tried to use medical example with another dataset(DICOM images
> not .Raw), but what i see is a  strange module ? please can anyone help me ?
>
> the mhd file i use :
> --------------------------
> ObjectType = Image
> NDims = 3
> BinaryData = True
> BinaryDataByteOrderMSB = False
> ElementSpacing = 1 1 3
> ITK_InputFilterName = MetaImageIO
> DimSize = 256 256 94
> ElementType = MET_USHORT
> ElementDataFile = MR0000%02d 0 31 1
> ------------------------------
>
> the vtk c++ code  :
> ------------------------------------
> // testMedicalVTK.cpp : Defines the entry point for the console application.
> //
>
> #include "stdafx.h"
> #include "vtkAutoInit.h"
> VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with
> vtkRenderingOpenGL2
> VTK_MODULE_INIT(vtkInteractionStyle);
> #define vtkRenderingCore_AUTOINIT 2(vtkRenderingOpenGL2,
> vtkInteractionStyle)
>
> #include <vtkActor.h>
> #include <vtkCamera.h>
> #include <vtkMarchingCubes.h>
> #include <vtkMetaImageReader.h>
> #include <vtkNamedColors.h>
> #include <vtkOutlineFilter.h>
> #include <vtkPolyDataMapper.h>
> #include <vtkPolyDataMapper.h>
> #include <vtkProperty.h>
> #include <vtkRenderer.h>
> #include <vtkRenderWindow.h>
> #include <vtkRenderWindowInteractor.h>
> #include <vtkSmartPointer.h>
> #include <vtkStripper.h>
>
> int main()
> {
>         /*if (argc < 2)
>         {
>                 cout << "Usage: " << argv[0] << " file.mhd" << endl;
>                 return EXIT_FAILURE;
>         }*/
>
>
>         vtkSmartPointer<vtkNamedColors> colors =
>                 vtkSmartPointer<vtkNamedColors>::New();
>
>         // Set the colors.
>         unsigned char skinColor[4]= { 255, 125, 64,255  };
>         colors->SetColor("SkinColor", skinColor);
>         unsigned char bkg[4]={ 51, 77, 102, 255  };
>         colors->SetColor("BkgColor", bkg);
>
>         // Create the renderer, the render window, and the interactor. The
> renderer
>         // draws into the render window, the interactor enables mouse- and
>         // keyboard-based interaction with the data within the render
> window.
>         //
>         vtkSmartPointer<vtkRenderer> aRenderer =
>                 vtkSmartPointer<vtkRenderer>::New();
>         vtkSmartPointer<vtkRenderWindow> renWin =
>                 vtkSmartPointer<vtkRenderWindow>::New();
>         renWin->AddRenderer(aRenderer);
>
>         vtkSmartPointer<vtkRenderWindowInteractor> iren =
>                 vtkSmartPointer<vtkRenderWindowInteractor>::New();
>         iren->SetRenderWindow(renWin);
>
>         // The following reader is used to read a series of 2D slices
> (images)
>         // that compose the volume. The slice dimensions are set, and the
>         // pixel spacing. The data Endianness must also be specified. The
> reader
>         // uses the FilePrefix in combination with the slice number to
> construct
>         // filenames using the format FilePrefix.%d. (In this case the
> FilePrefix
>         // is the root name of the file: quarter.)
>         vtkSmartPointer<vtkMetaImageReader> reader =
>                 vtkSmartPointer<vtkMetaImageReader>::New();
>         reader->SetFileName("C:\\Users\\usr\\Desktop\\SE000002\\img.mhd");
>         // An isosurface, or contour value of 500 is known to correspond to
> the
>         // skin of the patient.
>         // The triangle stripper is used to create triangle strips from the
>         // isosurface; these render much faster on many systems.
>         vtkSmartPointer<vtkMarchingCubes> skinExtractor =
>                 vtkSmartPointer<vtkMarchingCubes>::New();
>         skinExtractor->SetInputConnection(reader->GetOutputPort());
>         skinExtractor->SetValue(0, 500);
>
>         vtkSmartPointer<vtkStripper> skinStripper =
>                 vtkSmartPointer<vtkStripper>::New();
>         skinStripper->SetInputConnection(skinExtractor->GetOutputPort());
>
>         vtkSmartPointer<vtkPolyDataMapper> skinMapper =
>                 vtkSmartPointer<vtkPolyDataMapper>::New();
>         skinMapper->SetInputConnection(skinStripper->GetOutputPort());
>         skinMapper->ScalarVisibilityOff();
>
>         vtkSmartPointer<vtkActor> skin =
>                 vtkSmartPointer<vtkActor>::New();
>         skin->SetMapper(skinMapper);
>
> skin->GetProperty()->SetDiffuseColor(colors->GetColor3d("SkinColor").GetData());
>         skin->GetProperty()->SetSpecular(.3);
>         skin->GetProperty()->SetSpecularPower(20);
>         skin->GetProperty()->SetOpacity(1);
>
>         // An isosurface, or contour value of 1150 is known to correspond to
> the
>         // bone of the patient.
>         // The triangle stripper is used to create triangle strips from the
>         // isosurface; these render much faster on may systems.
>         vtkSmartPointer<vtkMarchingCubes> boneExtractor =
>                 vtkSmartPointer<vtkMarchingCubes>::New();
>         boneExtractor->SetInputConnection(reader->GetOutputPort());
>         boneExtractor->SetValue(0, 1150);
>
>         vtkSmartPointer<vtkStripper> boneStripper =
>                 vtkSmartPointer<vtkStripper>::New();
>         boneStripper->SetInputConnection(boneExtractor->GetOutputPort());
>
>         vtkSmartPointer<vtkPolyDataMapper> boneMapper =
>                 vtkSmartPointer<vtkPolyDataMapper>::New();
>         boneMapper->SetInputConnection(boneStripper->GetOutputPort());
>         boneMapper->ScalarVisibilityOff();
>
>         vtkSmartPointer<vtkActor> bone =
>                 vtkSmartPointer<vtkActor>::New();
>         bone->SetMapper(boneMapper);
>
> bone->GetProperty()->SetDiffuseColor(colors->GetColor3d("Ivory").GetData());
>
>         // An outline provides context around the data.
>         //
>         vtkSmartPointer<vtkOutlineFilter> outlineData =
>                 vtkSmartPointer<vtkOutlineFilter>::New();
>         outlineData->SetInputConnection(reader->GetOutputPort());
>
>         vtkSmartPointer<vtkPolyDataMapper> mapOutline =
>                 vtkSmartPointer<vtkPolyDataMapper>::New();
>         mapOutline->SetInputConnection(outlineData->GetOutputPort());
>
>         vtkSmartPointer<vtkActor> outline =
>                 vtkSmartPointer<vtkActor>::New();
>         outline->SetMapper(mapOutline);
>
> outline->GetProperty()->SetColor(colors->GetColor3d("Yellow").GetData());
>
>         // It is convenient to create an initial view of the data. The
> FocalPoint
>         // and Position form a vector direction. Later on (ResetCamera()
> method)
>         // this vector is used to position the camera to look at the data in
>         // this direction.
>         vtkSmartPointer<vtkCamera> aCamera =
> vtkSmartPointer<vtkCamera>::New();
>         aCamera->SetViewUp(0, 0, -1);
>         aCamera->SetPosition(0, -1, 0);
>         aCamera->SetFocalPoint(0, 0, 0);
>         aCamera->ComputeViewPlaneNormal();
>         aCamera->Azimuth(30.0);
>         aCamera->Elevation(30.0);
>
>         // Actors are added to the renderer. An initial camera view is
> created.
>         // The Dolly() method moves the camera towards the FocalPoint,
>         // thereby enlarging the image.
>         //aRenderer->AddActor(outline);
>         aRenderer->AddActor(skin);
>         aRenderer->AddActor(bone);
>         aRenderer->SetActiveCamera(aCamera);
>         aRenderer->ResetCamera();
>         aCamera->Dolly(1.5);
>
>         // Set a background color for the renderer and set the size of the
>         // render window (expressed in pixels).
>         aRenderer->SetBackground(colors->GetColor3d("BkgColor").GetData());
>         renWin->SetSize(640, 480);
>
>         // Note that when camera movement occurs (as it does in the Dolly()
>         // method), the clipping planes often need adjusting. Clipping
> planes
>         // consist of two planes: near and far along the view direction. The
>         // near plane clips out objects in front of the plane; the far plane
>         // clips out objects behind the plane. This way only what is drawn
>         // between the planes is actually rendered.
>         aRenderer->ResetCameraClippingRange();
>
>         // Initialize the event loop and then start it.
>         iren->Initialize();
>         iren->Start();
>
>         return EXIT_SUCCESS;
>     return 0;
> }
>
> ------------------------------------------------------------------------
>
>
>
> --
> Sent from: http://vtk.1045678.n5.nabble.com/VTK-Users-f1224199.html
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>
> Search the list archives at: http://markmail.org/search/?q=vtkusers
>
> Follow this link to subscribe/unsubscribe:
> https://vtk.org/mailman/listinfo/vtkusers


More information about the vtkusers mailing list