[Insight-users] Question about ITK SNAP data and VTK Image File format

Marie Bonhoure mariebonhoure at hotmail.com
Wed Mar 7 06:16:08 EST 2007


Hello,

I use "ITK SNAP" and I save my segmentation data choosing a VTK Image File 
format.
Then, I read this data using vtkImageReader2  and when I process it using 
vtkMarchingCube, it indicates that the dimension of this data is different 
from 3.
I don't understand where the problem is .... any idea ??
Regards,

Marie Bonhoure







>From: Markus Mehrwald <mehrwald at ira.uka.de>
>To: Julien Jomier <julien.jomier at kitware.com>
>CC: insight-users at itk.org
>Subject: Re: [Insight-users] Problems with ImageMaskSpatialObject
>Date: Wed, 07 Mar 2007 10:43:04 +0100
>
>Dear Julien,
>
>I use the ExtractImageFilter but saving the resulting image will remove me 
>all information about the position of this ROI. So thats the reasion why I 
>tried to use the ImageMaskSpatialObject because it stores also an offset.
>I set an offset for the object to world transform, compute it and write out 
>the resulting object and there the offsets (both, object to world and index 
>to object) are still 0. That was what I ment with the cite you copied. Is 
>this just a problem of the output or is it realy ignored?
>
>Regards,
>Markus
>
>Julien Jomier schrieb:
>>Hi Markus,
>>
>>The index of the RequestedRegion cannot be used to set the initial offset 
>>of the image because the requested region can change but should not affect 
>>how the image is represented in the scene.
>>Moreover, ImageSpatialObject does not support the concept of streaming and 
>>regions. This should be handled at the Image level.
>>
>>That's in part why the ImageMaskSpatialObject is used, i.e. to define a 
>>region of interest.
>>
>>You can use the ExtractImageFilter beforehand to extract your region of 
>>interest or you can "paint" the appropriate region of your 
>>ImageMaskSpatialObject.
>>
>>What do you mean by "the offset to compute ObjectToWorldTransform is
>>completely ignored"? When requested if the value at a physical point or if 
>>a point IsInside() the image, the full ObjectToWorldTransform is used.
>>
>>Hope that helps,
>>
>>Julien
>>
>>Markus Mehrwald wrote:
>>>In addition to that the offset to compute ObjectToWorldTransform is 
>>>completely ignored. Maybe I am wrong with the origin and the offset but I 
>>>thing ignoring the offset for world transform should not happen, should 
>>>it?
>>>
>>>Markus Mehrwald schrieb:
>>>>Hi,
>>>>
>>>>I just had a look at the code of the ImageSpatialObject. In the method 
>>>>SetImage there is code to compute the offset of the spatial object. In 
>>>>my mind it should be better to use the index of the RequestedRegion 
>>>>instead of the origin because in my case this is the image I want the 
>>>>spatial object from. In case of having the whole image origin and the 
>>>>index of the RequestedRegion are the same anyway.
>>>>
>>>>Regards,
>>>>Markus Mehrwald
>>>>
>>>>Markus Mehrwald schrieb:
>>>>>Hi Julien,
>>>>>
>>>>>I do not really need ValueAt() at the moment. I used this code just for 
>>>>>debug reasons. As I wrote before I have created my binary image first 
>>>>>and than want it as spatial object to save it because if I only save 
>>>>>the image the translation information is gone. At the moment I need 
>>>>>ValueAt() I do not have the translation information anymore (after a 
>>>>>restart of the application and without calculating everything again).
>>>>>I have tried some other things with transform and offsets but the only 
>>>>>case in which I get the correct result (but without translation) is if 
>>>>>the image passed to the ImageMaskSpatialObject has its origin at 0,0.
>>>>>
>>>>>Greetings,
>>>>>Markus
>>>>>
>>>>>Julien Jomier schrieb:
>>>>>>Hi Markus,
>>>>>>
>>>>>>Can you take into account the origin of your image when you request 
>>>>>>the ValueAt()?
>>>>>>If you are using the SpatialObjectToImageFilter to create your binary 
>>>>>>image you can set the origin of the output image, if you set it to the 
>>>>>>same origin as the input image then it should work.
>>>>>>
>>>>>>One other option is to reset the IndexToObjectTransform of your 
>>>>>>ImageMaskSpatialObject with an offset of zero:
>>>>>>
>>>>>>   myImageSO->GetIndexToObjectTransform()->SetOffset( offset );
>>>>>>   myImageSO->ComputeObjectToParentTransform();
>>>>>>
>>>>>>This will not modify the origin of the image passed using the 
>>>>>>SetImage() function so you can use it later.
>>>>>>
>>>>>>Hope that helps,
>>>>>>
>>>>>>Julien
>>>>>>
>>>>>>Markus Mehrwald wrote:
>>>>>>>Hi,
>>>>>>>
>>>>>>>I found the problem. The image starts at 180, 130 and that is the 
>>>>>>>problem. If I translate the image to 0, 0 the code from my last mail 
>>>>>>>works correct. The problem now: I need the information of the 
>>>>>>>translation for further calculations.
>>>>>>>Any suggestions how to keep the translation? I tried
>>>>>>>
>>>>>>>ImageMaskSpatialObjectType::TransformType::OffsetType offset;
>>>>>>>offset[0] = 
>>>>>>>thresholder->GetOutput()->GetRequestedRegion().GetIndex()[0];
>>>>>>>offset[1] = 
>>>>>>>thresholder->GetOutput()->GetRequestedRegion().GetIndex()[1];
>>>>>>>imageMaskSpatialObject->GetObjectToParentTransform()->SetOffset(offset);
>>>>>>>
>>>>>>>imageMaskSpatialObject->ComputeObjectToParentTransform();
>>>>>>>
>>>>>>>but this leads to the same problem I had before. Also with 
>>>>>>>WorldTransform.
>>>>>>>
>>>>>>>Greetings,
>>>>>>>Markus
>>>>>>>
>>>>>>>Markus Mehrwald schrieb:
>>>>>>>>Hi,
>>>>>>>>I just implemented some code which uses a ImageMaskSpatialObject. I 
>>>>>>>>created a binary image in my filter chain and want this now to be a 
>>>>>>>>spatial object so I use the SetImage method of the spatial object 
>>>>>>>>but nothing happens. The output of the object looks good. 
>>>>>>>>Coordinates (, ...) are correct but at every point of the so created 
>>>>>>>>object ValueAt gives me 0. The code looks like the following:
>>>>>>>>
>>>>>>>>thresholder->Update();
>>>>>>>>ImageMaskSpatialObjectType::PointType point;
>>>>>>>>imageMaskSpatialObject = ImageMaskSpatialObjectType::New();
>>>>>>>>imageMaskSpatialObject->SetImage(thresholder->GetOutput());
>>>>>>>>imageMaskSpatialObject->SetRequestedRegion(thresholder->GetOutput()->GetRequestedRegion());
>>>>>>>>
>>>>>>>>imageMaskSpatialObject->Update();
>>>>>>>>imageMaskSpatialObject->UpdateOutputInformation();
>>>>>>>>imageMaskSpatialObject->ComputeObjectToWorldTransform();
>>>>>>>>double ret;
>>>>>>>>for (int i = 0; i < 640; i++)
>>>>>>>>{
>>>>>>>>    for (int j = 0; j < 512; j++)
>>>>>>>>    {
>>>>>>>>        point[0] = i;
>>>>>>>>        point[1] = j;
>>>>>>>>        imageMaskSpatialObject->ValueAt(point, ret);
>>>>>>>>        if (ret != 0)
>>>>>>>>            std::cout << "ret: " << ret << std::endl;
>>>>>>>>    }
>>>>>>>>}
>>>>>>>>
>>>>>>>>
>>>>>>>>The image coming from the thresholder has indeed a size of 300x280 
>>>>>>>>but changing the for-loops has no consequence on the outcome.
>>>>>>>>I took a look at the image coming from the thresholder and it is 
>>>>>>>>what it should be, a binary image with white areas too. The code 
>>>>>>>>above never writes anything to the standard output because it does 
>>>>>>>>not find any values differing to 0.
>>>>>>>>Did I anything wrong or is it a problem of the 
>>>>>>>>ImageMaskSpatialObject?
>>>>>>>>
>>>>>>>>Thanks in advance,
>>>>>>>>Markus
>>>>>>>>_______________________________________________
>>>>>>>>Insight-users mailing list
>>>>>>>>Insight-users at itk.org
>>>>>>>>http://www.itk.org/mailman/listinfo/insight-users
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>
>
>--
>---------------------------------------------------------
>Cand. Dipl.-Inf. Med. Markus Mehrwald
>Institut für Prozessrechentechnik, Automation und Robotik
>
>Universität Karlsruhe (TH)
>Gebäude 40.28
>Engler-Bunte-Ring 8
>76131 Karlsruhe
>
>E-Mail: mehrwald at ira.uka.de
>---------------------------------------------------------
>
>_______________________________________________
>Insight-users mailing list
>Insight-users at itk.org
>http://www.itk.org/mailman/listinfo/insight-users

_________________________________________________________________
Personnalisez votre Messenger avec Live.com 
http://www.windowslive.fr/livecom/



More information about the Insight-users mailing list