[vtkusers] Blending two different slices of raw file and color one of them

Jesús Spí­nola jspinola at gmail.com
Thu Sep 8 08:14:15 EDT 2011


This example may help you:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Images/Transparency

On Mon, Feb 21, 2011 at 11:47 PM, kigras <kigras at gmail.com> wrote:

>
>  Hi,
> I would like to visualize two images at the same time in one renderer
> window
> (CT and binary images in vtkImageViewer2). In my opinnion using vtkBlend is
> a good direction to follow. However, I  encounter some problems. At
> present,
> In my software I can simple visualize CT slice with all functionality
> provided by vtkImageViewer2, i need to preserve that functionality ie.
> window level adjustment. Now I have binary image (with the same size), my
> goal is to make transparent all black pixels and color to half transparent
> yellow all object pixels. However, when I use following code the results
> are
> not as I have expected.
>
> This is my code:
>
>     //read raw file
>
>    vtkImageReader *ImageReader =  vtkImageReader::New();
>    ImageReader->SetFileName("p1tree.raw");
>    ImageReader->SetDataScalarTypeToUnsignedChar();
>    ImageReader->SetDataByteOrder(0);
>    ImageReader->SetFileDimensionality(3);
>    ImageReader->SetDataOrigin (0.0, 0.0, 0.0);
>    ImageReader->SetDataSpacing(1.0 ,1.0, 1.0);
>    ImageReader->SetDataExtent( 0,431, 0, 270, 0, 444);
>    ImageReader->SetNumberOfScalarComponents(1);
>
>    //input=ImageReader->GetOutput();
>    ImageReader->Update();
>    vtkImageReader *ImageReader1 =  vtkImageReader::New();
>    ImageReader1->SetFileName("p1.raw");
>    ImageReader1->SetDataScalarTypeToShort();
>    ImageReader1->SetDataByteOrder(1);
>    ImageReader1->SetFileDimensionality(3);
>    ImageReader1->SetDataOrigin (0.0, 0.0, 0.0);
>    ImageReader1->SetDataSpacing(1.0 ,1.0, 1.0);
>    ImageReader1->SetDataExtent( 0,431, 0, 270, 0, 444);
>    ImageReader1->SetNumberOfScalarComponents(1);
>    ImageReader1->Update();
>
>    //color
>
>    vtkSmartPointer<vtkLookupTable> FirstColorMap =
>      vtkSmartPointer<vtkLookupTable>::New();
>
> //binary
>        FirstColorMap->SetTableValue(0, 0.2000, 0.6300, 0.7900, 1);
>        FirstColorMap->Build();
>
> //CT
>   vtkSmartPointer<vtkLookupTable> ColorMap =
>     vtkSmartPointer<vtkLookupTable>::New(); // hot color map]
>
>       ColorMap->SetTableValue(0, 0.8900, 0.8100, 0.3400, 1);
>       ColorMap->Build();
>
>      vtkImageCast *cast = vtkImageCast::New();
>
>      cast->SetInput(ImageReader->GetOutputDataObject(0));
>      cast->SetOutputScalarTypeToShort();
>      cast->ClampOverflowOn();
>      cast->Print(std::cout);
>
>
>      vtkSmartPointer<vtkImageMapToColors> ColorMapper =
>          vtkSmartPointer<vtkImageMapToColors>::New();
>      ColorMapper->SetInput( cast->GetOutput() );
>      ColorMapper->SetLookupTable( FirstColorMap );
>
>      vtkSmartPointer<vtkImageMapToColors> ColorMapper1 =
>          vtkSmartPointer<vtkImageMapToColors>::New();
>      ColorMapper1->SetInput( ImageReader1->GetOutput() );
>      ColorMapper1->SetLookupTable( ColorMap );
>
>
>    // Combine the images (blend takes multiple connections on the 0th input
> port)
>    vtkSmartPointer<vtkImageBlend> blend =
>      vtkSmartPointer<vtkImageBlend>::New();
>
>    //blend->AddInputConnection(0,cast->GetOutputPort());
>    //blend->AddInputConnection(0,ImageReader1->GetOutputPort());
>
>
>    blend->AddInputConnection(0,ColorMapper->GetOutputPort());
>    blend->AddInputConnection(0,ColorMapper1->GetOutputPort());
>
>    blend->SetOpacity(0,1.0);
>    blend->SetOpacity(1,.5);
>
>    // Display the result
>    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
>      vtkSmartPointer<vtkRenderWindowInteractor>::New();
>
>    vtkSmartPointer<vtkImageViewer2> imageViewer =
>      vtkSmartPointer<vtkImageViewer2>::New();
>    imageViewer->SetColorLevel(0);
>    imageViewer->SetColorWindow(255);
>    imageViewer->SetSliceOrientation(2);
>    imageViewer->SetSlice(259);
>
>    imageViewer->SetInputConnection(blend->GetOutputPort());
>    imageViewer->SetupInteractor(renderWindowInteractor);
>    imageViewer->GetRenderer()->ResetCamera();
>    imageViewer->SetSize( 800, 800 );
>    imageViewer->GetRenderer()->SetBackground(.1,.2,.3); //dark blue
>
>    vtkRenderer *ren = vtkRenderer::New();
>    vtkImageActor * mriActor = vtkImageActor::New();
>    mriActor->SetInput(blend->GetOutput());
>    ren->AddViewProp( mriActor );
>
>    renderWindowInteractor->Initialize();
>    renderWindowInteractor->Start();
>
>
>
> I attach a few pics what I want to result:
> http://vtk.1045678.n5.nabble.com/file/n3394758/bin.png  // binary picture
> http://vtk.1045678.n5.nabble.com/file/n3394758/CT.png  // CT picture
> http://vtk.1045678.n5.nabble.com/file/n3394758/CTandBIN.png  // combined
> pictures this is my goal
>
>
>
> Thanks a lot for help.
>
> Jakub Igras
> --
> View this message in context:
> http://vtk.1045678.n5.nabble.com/Blending-two-different-slices-of-raw-file-and-color-one-of-them-tp3394758p3394758.html
> Sent from the VTK - Users mailing list archive at Nabble.com.
> _______________________________________________
> 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
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>



-- 
Jesús Spínola
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110908/84f2de79/attachment.htm>


More information about the vtkusers mailing list