[vtkusers] problem with the vtkcheckerboard widget

Mark Roden mmroden at gmail.com
Wed Apr 25 21:51:58 EDT 2012


Ah, got it.  I'm intending to create a tool to allow a user to manually register two data sets from an automatically derived starting point.  Which classes should I be looking for? Slicer, reslicer, something else?  And how can I change the plane of the image that the widget displays-- through some kind of pipeline that extracts a particular plane and puts it in the checkerboard?  

Thanks,
Mark



On Apr 25, 2012, at 4:30 PM, Bill Lorensen <bill.lorensen at gmail.com> wrote:

> You'll have to resample one of the images. Checkerboard only works on
> images with the same pixel resolution and does not respect
> spacing/direction etc. The usual use-case is to compare two registered
> images. In that case, the one of the images is resampled to the same
> resolution as another.
> 
> On Tue, Apr 24, 2012 at 2:49 PM, Mark Roden <mmroden at gmail.com> wrote:
>> Hi all,
>> 
>> I'm trying to load two images and look at them in the checkerboard
>> widget.  My problem is that the images are medical images, and also
>> have different sizes.
>> 
>> They have two different origins.  Image 1 has an origin and spacing of:
>>        (0020,0032)     Image Position (Patient)        DS      3       -239\-154\1218
>>        (0028,0030)     Pixel Spacing   DS      2       9.3359375e-1\9.3359375e-1
>> 
>> and image 2 has an origin and spacing of:
>>        (0020,0032)     Image Position (Patient)        DS      3       -286.585938\-201.585938\1216.500000
>>        (0028,0030)     Pixel Spacing   DS      2       4.000000\4.000000
>> 
>> The point is to be able to check the registration of these two datasets.
>> 
>> When I try to load them using the widget example, I get the following errors:
>> ERROR: In ..\..\..\VTK\Filtering\vtkStreamingDemandDrivenPipeline.cxx, line 1009
>> vtkStreamingDemandDrivenPipeline (02B2D6A0): The update extent
>> specified in the information for output port 0 on algorithm
>> vtkTrivialProducer(02B2D0D0) is 0 511 0 511 0 0, which is outside the
>> whole extent 0 143 0 143 0 212.
>> 
>> 
>> ERROR: In ..\..\..\VTK\Filtering\vtkImageData.cxx, line 1530
>> vtkImageData (02AE75A8): GetScalarPointer: Pixel (0, 256, 0) not in memory.
>>  Current extent= (0, 143, 0, 143, 0, 212)
>> 
>> (these errors repeat for several instances, all saying essentially the
>> same thing).
>> 
>> Once the errors are done, then the images are present, but clearly not
>> respecting the pixel coordinates at all.
>> 
>> What can I do to make the checkerboard widget (or the wipe widget)
>> respect pixel spacing and the origin values of the two different
>> vtkImageData I'm using?  (the follow up question will be about using
>> vtkAffineWidget to adjust the registration, so if there is already a
>> sample project on how to do that, that would be excellent).
>> 
>> My code, run in Qt 4.8 on vc 2008 with 5.10.0-rc1:
>> 
>> 
>>    vtkFileOutputWindow* window = vtkFileOutputWindow::New();
>>    window->SetFileName("vtk_errors.txt");
>>    vtkOutputWindow::SetInstance(window);
>>    window->Delete();
>> 
>>    //for now, just show the two volumes together
>>    //code from page 282 of the VTK User's Manual
>>    vtkImageCheckerboard* checkers = vtkImageCheckerboard::New();
>>    checkers->SetInput1(theImages->getVolume(0)->getImageData());//theImages
>> holds vtkImageData objects
>>    checkers->SetInput2(theImages->getVolume(1)->getImageData());
>>    checkers->SetNumberOfDivisions(10,6,1);
>> 
>>    vtkImageActor *checkerboardActor = vtkImageActor::New();
>>    checkerboardActor->SetInput(checkers->GetOutput());
>> 
>>    vtkCheckerboardRepresentation* rep =
>>            vtkCheckerboardRepresentation::New();
>>    rep->SetCheckerboard(checkers);
>>    rep->SetImageActor(checkerboardActor);
>> 
>>    vtkCheckerboardWidget *checkerboardWidget =
>>            vtkCheckerboardWidget::New();
>>    checkerboardWidget->SetRepresentation(rep);
>> 
>> 
>>    vtkSmartPointer<vtkRenderer> ren1 =
>>      vtkSmartPointer<vtkRenderer>::New();
>>    vtkSmartPointer<vtkRenderWindow> renWin =
>>      vtkSmartPointer<vtkRenderWindow>::New();
>>    renWin->AddRenderer(ren1);
>> 
>> 
>>    vtkSmartPointer<vtkRenderWindowInteractor> iren =
>>      vtkSmartPointer<vtkRenderWindowInteractor>::New();
>>    iren->SetRenderWindow(renWin);
>> 
>>    checkerboardWidget->SetInteractor(iren);
>> 
>>    ren1->AddActor(checkerboardActor);
>>    ren1->SetBackground(0.1, 0.2, 0.4);
>>    renWin->SetSize(300, 300);
>> 
>>    // render the image
>>    //
>>    iren->Initialize();
>>    renWin->Render();
>>    checkerboardWidget->On();
>>    iren->Start();
>> 
>> Thanks!
>> Mark
>> _______________________________________________
>> 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
> 
> 
> 
> -- 
> Unpaid intern in BillsBasement at noware dot com



More information about the vtkusers mailing list