[Insight-users] Problems with ImageMaskSpatialObject
Markus Mehrwald
mehrwald at ira.uka.de
Wed Feb 21 08:53:13 EST 2007
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
---------------------------------------------------------
More information about the Insight-users
mailing list