[vtkusers] vtkDICOMImageReader limits
Darshan Pai
darshanpai at gmail.com
Sun Sep 5 20:39:07 EDT 2010
I think you need to PlaceWidget() before the Modified call . Actually you
dont really need a Modified Call there .
Regards
Darshan
On Sun, Sep 5, 2010 at 3:15 PM, Ali Habib <ali.mahmoud.habib at gmail.com>wrote:
> I solved the proplem of memory an vtkDicomImagereader but the piple crash
> when placewidget call
>
> the code is :
> /* vtk.vtkSphereSource cone = new vtk.vtkSphereSource();
> cone.SetRadius(1.0f);*/
>
> vtk.vtkDICOMImageReader VDR = new
> vtk.vtkDICOMImageReader();
> VDR.SetDirectoryName(@"G:\Master Degree\test DataSet\My
> Disc\07291640");
> VDR.SetDataOrigin(0, 0, 0);
> VDR.Modified();
>
> // decrease the dataset data for large data preprocessing
>
> vtkImageShrink3D VIS = new vtkImageShrink3D();
> VIS.SetShrinkFactors(2, 2, 2);
> VIS.SetInputConnection(VDR.GetOutputPort());
> VIS.Modified();
>
> vtkImageThreshold VIT = new vtkImageThreshold();
> VIT.ThresholdBetween(200, 2000);
> VIT.SetInputConnection(VIS.GetOutputPort());
> VIT.Modified();
>
> ///// Start the creation of volume rendering
>
> //1. Gget the range of data
> vtk.vtkImageChangeInformation VIC = new
> vtk.vtkImageChangeInformation();
> VIC.SetInput(VIT.GetOutput());
> VIC.CenterImageOn();
> VIC.Modified();
>
> vtk.vtkImageData VoxelData = new vtk.vtkImageData();
> VoxelData = VIC.GetOutput();
>
> double[] metaScalarRange = VoxelData.GetScalarRange();
>
>
> // Render the skin - Soft tissue
> double isovalue = 0.8 * (metaScalarRange[1] +
> metaScalarRange[0]);
>
>
> vtkContourFilter skinExtractor = new vtkContourFilter();
> skinExtractor.SetInputConnection(VIT.GetOutputPort());
> skinExtractor.SetValue(0, isovalue);
> skinExtractor.ComputeGradientsOn();
> skinExtractor.Modified();
>
>
> gpd = skinExtractor.GetOutput();
>
> vtk.vtkPolyDataMapper coneMapper = new
> vtk.vtkPolyDataMapper();
> coneMapper.SetInput(gpd);
> coneMapper.ScalarVisibilityOff();
>
> maceActor = new vtkLODActor();
> maceActor.SetMapper(coneMapper);
> maceActor.GetProperty().SetColor(1, 0, 0);
> //////////////////////// Selection Part
> /////////////////////////
> planes = new vtkPlanes();
>
> clipper = new vtkClipPolyData();
> clipper.SetInput(gpd);
> clipper.SetClipFunction(planes);
> clipper.InsideOutOn();
> clipper.Modified();
> vtkPolyDataMapper selectMapper = new vtkPolyDataMapper();
> selectMapper.SetInput(clipper.GetOutput());
> selectMapper.ScalarVisibilityOff();
> selectMapper.Modified();
> selectActor = new vtkLODActor();
> selectActor.SetMapper(selectMapper);
> selectActor.GetProperty().SetColor(0, 1, 0);
> selectActor.VisibilityOff();
> selectActor.SetScale(1.01, 1.01, 1.01);
> selectActor.Modified();
> /////////////////////// End of selection
> part////////////////////
>
> //////////////////////////// Cutting part
> /////////////////////////////////
>
>
> clipper_cutting = new vtkClipPolyData();
> clipper_cutting.SetInput(gpd);
> clipper_cutting.SetClipFunction(planes);
> clipper_cutting.InsideOutOff();
> clipper_cutting.GenerateClippedOutputOff();
> clipper_cutting.Modified();
> vtkPolyDataMapper selectMapper_cutting = new
> vtkPolyDataMapper();
> selectMapper_cutting.SetInput(clipper_cutting.GetOutput());
> selectMapper_cutting.ScalarVisibilityOff();
> selectMapper_cutting.Modified();
> selectActor_cutting = new vtkLODActor();
> selectActor_cutting.SetMapper(selectMapper_cutting);
> selectActor_cutting.GetProperty().SetColor(1, 0, 0);
> selectActor_cutting.VisibilityOff();
> selectActor_cutting.SetScale(1.01, 1.01, 1.01);
> selectActor_cutting.Modified();
>
> //////////////////////////// End Cutting part
> //////////////////////////////////////
> vtk.vtkRenderer ren1 = new vtk.vtkRenderer();
> ren1.Modified();
> renWin.AddRenderer(ren1);
> //ren1.SetBackground(0.0f, 0.0f, 0.0f);
>
> vtkRenderWindowInteractor iren = new
> vtkRenderWindowInteractor();
> iren.SetRenderWindow(renWin);
>
>
>
> //The SetInteractor method is how 3D widgets are associated
> with the
> //render window interactor. Internally, SetInteractor sets
> up a bunch
> //of callbacks using the Command/Observer mechanism
> (AddObserver()).
> vtkBoxWidget boxWidget = new vtkBoxWidget();
> boxWidget.SetInteractor(iren);
> boxWidget.SetPlaceFactor(1.25);
> boxWidget.TranslationEnabledOn();
>
>
>
> ren1.AddActor(maceActor);
> ren1.AddActor(selectActor);
> ren1.AddActor(selectActor_cutting);
>
> boxWidget.SetInput(gpd);
> boxWidget.Modified(); // crash here
> boxWidget.PlaceWidget();
>
>
> boxWidget.AddObserver((uint)vtk.EventIds.StartInteractionEvent, new
> vtk.vtkDotNetCallback(StartInteractionEvent));
> boxWidget.AddObserver((uint)vtk.EventIds.InteractionEvent,
> new vtk.vtkDotNetCallback(InteractionEvent));
>
> boxWidget.AddObserver((uint)vtk.EventIds.EndInteractionEvent, new
> vtk.vtkDotNetCallback(EndInteractionEvent));
>
>
> boxWidget.On();
>
> renWin.AddRenderer(ren1); renWin.Modified();
>
> any suggestion please
>
> On Sun, Sep 5, 2010 at 12:01 AM, Darshan Pai <darshanpai at gmail.com> wrote:
>
>> I have been using DICOMReader in 64 bit OS and it has not crashed on me
>> before . Probably its a memory error . I usually convert it into Analyze
>> format and reduce the dimensions or the data type so that it can be loaded .
>> Maybe you can try that .
>>
>> Regards
>> Darshan
>>
>> On Fri, Sep 3, 2010 at 5:44 PM, Ali Habib <ali.mahmoud.habib at gmail.com>wrote:
>>
>>> it's 245 MB data , I will search for that I use c# and vista as operating
>>> system
>>>
>>>
>>> On Sat, Sep 4, 2010 at 12:32 AM, John Drescher <drescherjm at gmail.com>wrote:
>>>
>>>> On Fri, Sep 3, 2010 at 5:28 PM, John Drescher <drescherjm at gmail.com>
>>>> wrote:
>>>> >> I successfully read DICOM data using vtkDICOMImageReader for
>>>> directory
>>>> >> contains 78 files
>>>> >> But when tried to load from directory contains 418 files , my
>>>> application
>>>> >> crashed
>>>> >> vtk.vtkDICOMImageReader VDR = new
>>>> vtk.vtkDICOMImageReader();
>>>> >> VDR.SetDirectoryName(@"G:\Master Degree\test DataSet\My
>>>> >> Disc\07291640");
>>>> >> VDR.SetDataOrigin(0, 0, 0);
>>>> >> VDR.Modified();
>>>> >> any suggestion please , or is there any
>>>> limits regarding vtkDICOMImageReader
>>>> >
>>>> > I believe it is limited to around 4GB dicom files since the reader
>>>> > uses 32 bit index pointers.
>>>> >
>>>>
>>>> In 32bit windows however you will be limited by the largest
>>>> allocatable memory block which should be around 1.2GB ( even if your
>>>> PC has 4 GB of ram) unless you have your program compiled with the
>>>> LARGEADDRESSAWARE linker flag and you have your OS set to allow 3GB
>>>> applications.
>>>>
>>>> John
>>>>
>>>
>>>
>>> _______________________________________________
>>> 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
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100905/bbfd8a6f/attachment.htm>
More information about the vtkusers
mailing list