[Insight-developers] ImageAdaptor and DataAccessor
Luis Ibanez
ibanez@cs.unc.edu
Sat, 11 Nov 2000 22:45:23 -0500 (EST)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
--0-2054697836-974000721=:2133
Content-Type: TEXT/PLAIN; charset=US-ASCII
Hi,
I just checked in the code for ImageAdaptors,
it seems to be working fine.
The new class
itk::ImageAdaptor<>
is responsible for exposing the pixels of
an image as if they were of other type.
For example, an RGB image can be presented as
a float image, just by exposing only its blue
component, or a gray level image can be
presented as having RGB colors in it.
The choice of what to expose is done by defining
an DataAccessor type. It contains basically two
typedefs that indicate the internal and external
types, and two methods to specify how the to convert
between the internal and external types.
The ImageAdaptor is templated over the type of
the image it encapsulates and over the DataAccessor.
ImageAdaptors can be used in any place where an
Image is expected.
An ImageAdaptor demo is now in the repository
under Testing/Code/Common/itkImageAdaptor.cxx
-----
The only limitation is that for it to work,
the declaration of ScalarTraits and VectorTraits
should be commented out...
But in some way, it seems to be possible to use
the DataAccessor for the purpouse we are using
the Scalar and Vector traits now.
(something to double check...)
-----
ImageAdaptors solve the casting problem too,
because the DataAccessor can be use to define
how to convert from double to char in a particular
case.
This without having to duplicate image data, nor
having to pass the image through a 'casting' filter.
----
The Iterators classes should now be parametrized
over the image type instead of being parametrized
over the pixel type and the image dimension. This
change have been done in
ImageRegionSimpleIterator
ImageLinearIterator
ImageSliceIterator
ImageIteratorWithIndex
That will broke code that currently use this iterators,
Sorry about that, it should be enough to change the
typedefs where you declare the iterators.
Thanks,
Luis
--0-2054697836-974000721=:2133
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="itkImageAdaptorTest.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.21.0011112245210.2133@delfos.rdu.bellsouth.net>
Content-Description: Example of who to use ImageAdaptors and DataAccessors
Content-Disposition: attachment; filename="itkImageAdaptorTest.cxx"
LyoqDQogKiAgDQogKiAgVGhpcyBwcm9ncmFtIGlsbHVzdHJhdGVzIHRoZSB1
c2Ugb2YgQWRhcHRvcnMgYW5kDQogKiAgQWNjZXNzb3JzDQogKg0KICogIFRo
ZSBleGFtcGxlIHNob3dzIGhvdyBhbiBBZGFwdG9yIGNhbiBiZSB1c2VkIHRv
IA0KICogIGdldCBhY2NlcyBvbmx5IHRvIHRoZXJlZCBjb21wb25lbnQgb2Yg
YW4gUkdCIGltYWdlDQogKiAgZ2l2aW5nIHRoZSBhcHBlYXJhbmNlIG9mIGJl
aW5nIGp1c3QgYSAnZmxvYXQnIGltYWdlDQogKg0KICogIFRoYXQgd2lsbCBh
bGxvdyB0byBwYXNzIHRoZSByZWQgY29tcG9uZW50IG9mIHRoaXMNCiAqICBp
bWFnZSBhcyBpbnB1dCBvciBvdXRwdXQgdG8gYW55IGZpbHRlciB0aGF0IGV4
cGVjdHMNCiAqICBhIGZsb2F0IGltYWdlDQogKg0KICovDQoNCg0KI2luY2x1
ZGUgPGl0a0ltYWdlQWRhcHRvci5oPg0KI2luY2x1ZGUgPGl0a1NjYWxhci5o
Pg0KI2luY2x1ZGUgPGl0a0ltYWdlUmVnaW9uU2ltcGxlSXRlcmF0b3IuaD4N
Cg0KDQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N
Ci8vIENsYXNzIFJHQiB0byBiZSB1c2VkIGFzIHBpeGVsIHR5cGUNCi8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KY2xhc3MgUkdC
IHsNCiAgcHVibGljOg0KICAgIGZsb2F0IHI7DQogICAgZmxvYXQgZzsNCiAg
ICBmbG9hdCBiOw0KICBwdWJsaWM6DQogICAgUkdCKCkgew0KICAgICAgciA9
IGcgPSBiID0gMC4wOw0KICAgIH0NCiAgICBSR0IoIGZsb2F0IGlyLCBmbG9h
dCBpZywgZmxvYXQgaWIgKSB7DQogICAgICByID0gaXI7DQogICAgICBnID0g
aWc7DQogICAgICBiID0gaWI7DQogICAgfQ0KICAgIGNvbnN0IFJHQiAmIG9w
ZXJhdG9yPSggY29uc3QgUkdCICYgYyApIHsNCiAgICAgIHIgPSBjLnI7DQog
ICAgICBnID0gYy5nOw0KICAgICAgYiA9IGMuYjsNCiAgICAgIHJldHVybiAq
dGhpczsNCiAgICB9DQp9Ow0KDQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBY2Nlc3NvciB0eXBlIHRo
YXQgZGVmaW5lcyB3aGF0IHBhcnQgb2YgdGhlDQovLyBwaXhlbCB0eXBlIHdp
bGwgYmUgcHJlc2VudGVkIGV4dGVybmFsbHkNCi8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpjbGFzcyBteVJlZEFj
Y2Vzc29yVHlwZSANCnsNCiAgcHVibGljOg0KICAgIHR5cGVkZWYgUkdCICAg
ICBJbnRlcm5hbFR5cGU7DQogICAgdHlwZWRlZiBmbG9hdCAgIEV4dGVybmFs
VHlwZTsNCiAgICBzdGF0aWMgaW5saW5lIHZvaWQgU2V0KCBJbnRlcm5hbFR5
cGUgJiBwaXhlbCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRXh0ZXJuYWxUeXBlICYgdmFsdWUgKSANCiAgICB7DQogICAgICBwaXhl
bC5yID0gdmFsdWU7DQogICAgfQ0KDQogICAgc3RhdGljIGlubGluZSBFeHRl
cm5hbFR5cGUgR2V0KCBjb25zdCBJbnRlcm5hbFR5cGUgJiB2YWx1ZSApDQog
ICAgew0KICAgICAgcmV0dXJuIChFeHRlcm5hbFR5cGUpKHZhbHVlLnIpOw0K
ICAgIH0NCiAgDQp9Ow0KDQoNCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tDQovLyAgICAgVHlwZWRlZnMgZm9yIGNvbnZpbmll
bmNlDQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N
CnR5cGVkZWYgaXRrOjpJbWFnZTwgUkdCLCAgIDIgPiBteUltYWdlVHlwZTsN
Cg0KdHlwZWRlZiBpdGs6OkltYWdlQWRhcHRvcjwgDQogICAgICAgICAgICAg
ICAgICBteUltYWdlVHlwZSwgDQogICAgICAgICAgICAgICAgICBteVJlZEFj
Y2Vzc29yVHlwZSA+IG15UmVkQWRhcHRvclR5cGU7DQoNCnR5cGVkZWYgaXRr
OjpJbWFnZVJlZ2lvblNpbXBsZUl0ZXJhdG9yPCANCiAgICAgICAgICAgICAg
ICAgICAgICAgICBteUltYWdlVHlwZSA+IG15SXRlcmF0b3JUeXBlOw0KDQp0
eXBlZGVmIGl0azo6SW1hZ2VSZWdpb25TaW1wbGVJdGVyYXRvcjwgDQogICAg
ICAgICAgICAgICAgICAgICAgICAgbXlSZWRBZGFwdG9yVHlwZSA+IG15UmVk
SXRlcmF0b3JUeXBlOw0KDQoNCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tDQovLw0KLy8gICBNYWluIGNvZGUNCi8vDQovLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0NCmludCBtYWluKCkgew0KDQogIG15SW1hZ2VUeXBlOjpT
aXplIHNpemU7DQogIHNpemVbMF0gPSAyOw0KICBzaXplWzFdID0gMjsNCg0K
ICBteUltYWdlVHlwZTo6SW5kZXggaW5kZXg7DQogIGluZGV4WzBdID0gMDsN
CiAgaW5kZXhbMV0gPSAwOw0KDQogIG15SW1hZ2VUeXBlOjpSZWdpb24gcmVn
aW9uOw0KICByZWdpb24uU2V0SW5kZXgoIGluZGV4ICk7DQogIHJlZ2lvbi5T
ZXRTaXplKCAgc2l6ZSAgKTsNCg0KICBteUltYWdlVHlwZTo6UG9pbnRlciBt
eUltYWdlID0gbXlJbWFnZVR5cGU6Ok5ldygpOw0KDQogIG15SW1hZ2UtPlNl
dExhcmdlc3RQb3NzaWJsZVJlZ2lvbiggcmVnaW9uICk7DQogIG15SW1hZ2Ut
PlNldEJ1ZmZlcmVkUmVnaW9uKCByZWdpb24gKTsNCiAgbXlJbWFnZS0+U2V0
UmVxdWVzdGVkUmVnaW9uKCByZWdpb24gKTsNCiAgbXlJbWFnZS0+QWxsb2Nh
dGUoKTsNCiAgDQogIG15SXRlcmF0b3JUeXBlICBpdDEoIG15SW1hZ2UsIG15
SW1hZ2UtPkdldFJlcXVlc3RlZFJlZ2lvbigpICk7DQogIA0KICAvLyBWYWx1
ZSB0byBpbml0aWFsaXplIHRoZSBwaXhlbHMNCiAgUkdCIGNvbG9yKCAxLjAs
IDAuNSwgMC41ICk7DQogIA0KICAvLyBJbml0aWFsaXppbmcgYWxsIHRoZSBw
aXhlbCBpbiB0aGUgaW1hZ2UNCiAgaXQxLkJlZ2luKCk7DQogIHdoaWxlKCAh
aXQxLklzQXRFbmQoKSApDQogIHsNCiAgICBpdDEuU2V0KGNvbG9yKTsNCiAg
ICArK2l0MTsNCiAgfQ0KDQogIC8vIFJlYWRpbmcgdGhlIHZhbHVlcyB0byB2
ZXJpZnkgdGhlIGltYWdlIGNvbnRlbnQNCiAgaXQxLkJlZ2luKCk7DQogIHdo
aWxlKCAhaXQxLklzQXRFbmQoKSApDQogIHsNCiAgICBjb25zdCBSR0IgYyA9
IGl0MS5HZXQoKTsNCiAgICBzdGQ6OmNvdXQgPDwgYy5yIDw8ICIgICIgPDwg
Yy5nOw0KICAgIHN0ZDo6Y291dCA8PCAiICAiIDw8IGMuYiA8PCBzdGQ6OmVu
ZGw7DQogICAgKytpdDE7DQogIH0NCg0KDQogIG15UmVkQWRhcHRvclR5cGU6
OlBvaW50ZXIgbXlBZGFwdG9yID0gbXlSZWRBZGFwdG9yVHlwZTo6TmV3KCk7
DQogIG15QWRhcHRvci0+U2V0SW1hZ2UoIG15SW1hZ2UgKTsNCg0KIA0KICBt
eVJlZEl0ZXJhdG9yVHlwZSAgaXQyKCBteUFkYXB0b3IsIG15QWRhcHRvci0+
R2V0UmVxdWVzdGVkUmVnaW9uKCkgKTsNCg0KICAvLyBTZXQgdGhlIHZhbHVl
cyBvZiB0aGUgUmVkIGNvbXBvbmVudCBvZiBteUltYWdlLCB1c2luZyBteUFk
YXB0b3INCiAgaXQyLkJlZ2luKCk7DQogIHdoaWxlKCAhaXQyLklzQXRFbmQo
KSApDQogIHsNCiAgICBpdDIuU2V0KDAuNCk7DQogICAgKytpdDI7DQogIH0N
Cg0KICBzdGQ6OmNvdXQgPDwgIi0tLSBBZnRlciAtLS0gIiA8PCBzdGQ6OmVu
ZGw7DQoNCiAgaXQxLkJlZ2luKCk7DQogIHdoaWxlKCAhaXQxLklzQXRFbmQo
KSApDQogIHsNCiAgICBjb25zdCBSR0IgYyA9IGl0MS5HZXQoKTsNCiAgICBz
dGQ6OmNvdXQgPDwgYy5yIDw8ICIgICIgPDwgYy5nOw0KICAgIHN0ZDo6Y291
dCA8PCAiICAiIDw8IGMuYiA8PCBzdGQ6OmVuZGw7DQogICAgKytpdDE7DQog
IH0NCg0KDQogIHJldHVybiAwOw0KfQ0KDQoNCg0K
--0-2054697836-974000721=:2133--