[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