🗊Презентация ITK Lecture 4. Images in ITK

Нажмите для полного просмотра!
ITK Lecture 4. Images in ITK, слайд №1ITK Lecture 4. Images in ITK, слайд №2ITK Lecture 4. Images in ITK, слайд №3ITK Lecture 4. Images in ITK, слайд №4ITK Lecture 4. Images in ITK, слайд №5ITK Lecture 4. Images in ITK, слайд №6ITK Lecture 4. Images in ITK, слайд №7ITK Lecture 4. Images in ITK, слайд №8ITK Lecture 4. Images in ITK, слайд №9ITK Lecture 4. Images in ITK, слайд №10ITK Lecture 4. Images in ITK, слайд №11ITK Lecture 4. Images in ITK, слайд №12ITK Lecture 4. Images in ITK, слайд №13ITK Lecture 4. Images in ITK, слайд №14ITK Lecture 4. Images in ITK, слайд №15ITK Lecture 4. Images in ITK, слайд №16ITK Lecture 4. Images in ITK, слайд №17ITK Lecture 4. Images in ITK, слайд №18ITK Lecture 4. Images in ITK, слайд №19ITK Lecture 4. Images in ITK, слайд №20ITK Lecture 4. Images in ITK, слайд №21ITK Lecture 4. Images in ITK, слайд №22ITK Lecture 4. Images in ITK, слайд №23ITK Lecture 4. Images in ITK, слайд №24ITK Lecture 4. Images in ITK, слайд №25ITK Lecture 4. Images in ITK, слайд №26ITK Lecture 4. Images in ITK, слайд №27ITK Lecture 4. Images in ITK, слайд №28ITK Lecture 4. Images in ITK, слайд №29ITK Lecture 4. Images in ITK, слайд №30ITK Lecture 4. Images in ITK, слайд №31ITK Lecture 4. Images in ITK, слайд №32ITK Lecture 4. Images in ITK, слайд №33ITK Lecture 4. Images in ITK, слайд №34ITK Lecture 4. Images in ITK, слайд №35ITK Lecture 4. Images in ITK, слайд №36ITK Lecture 4. Images in ITK, слайд №37ITK Lecture 4. Images in ITK, слайд №38ITK Lecture 4. Images in ITK, слайд №39ITK Lecture 4. Images in ITK, слайд №40ITK Lecture 4. Images in ITK, слайд №41ITK Lecture 4. Images in ITK, слайд №42ITK Lecture 4. Images in ITK, слайд №43ITK Lecture 4. Images in ITK, слайд №44ITK Lecture 4. Images in ITK, слайд №45ITK Lecture 4. Images in ITK, слайд №46ITK Lecture 4. Images in ITK, слайд №47ITK Lecture 4. Images in ITK, слайд №48ITK Lecture 4. Images in ITK, слайд №49

Содержание

Вы можете ознакомиться и скачать презентацию на тему ITK Lecture 4. Images in ITK. Доклад-сообщение содержит 49 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





ITK Lecture 4
Images in ITK
Methods in Image Analysis
CMU Robotics Institute 16-725
U. Pitt Bioengineering 2630
Spring Term, 2006
Описание слайда:
ITK Lecture 4 Images in ITK Methods in Image Analysis CMU Robotics Institute 16-725 U. Pitt Bioengineering 2630 Spring Term, 2006

Слайд 2





Data storage in ITK
ITK separates storage of data from the actions you can perform on data
The DataObject class is the base class for the major “containers” into which you can place data
Описание слайда:
Data storage in ITK ITK separates storage of data from the actions you can perform on data The DataObject class is the base class for the major “containers” into which you can place data

Слайд 3





Data containers in ITK
Images: N-d rectilinear grids of regularly sampled data
Meshes: N-d collections of points linked together into cells (e.g. triangles)
Meshes are outside the scope of this course, but please see section 4.3 of the ITK Software Guide for more information
Описание слайда:
Data containers in ITK Images: N-d rectilinear grids of regularly sampled data Meshes: N-d collections of points linked together into cells (e.g. triangles) Meshes are outside the scope of this course, but please see section 4.3 of the ITK Software Guide for more information

Слайд 4





What is an image?
For our purposes, an image is an N-d rectilinear grid of data
Images can contain any type of data, although scalars (e.g. grayscale) or vectors (e.g. RGB color) are most common
We will deal mostly with scalars, but keep in mind that unusual images (e.g. linked-lists as pixels) are perfectly legal in ITK
Описание слайда:
What is an image? For our purposes, an image is an N-d rectilinear grid of data Images can contain any type of data, although scalars (e.g. grayscale) or vectors (e.g. RGB color) are most common We will deal mostly with scalars, but keep in mind that unusual images (e.g. linked-lists as pixels) are perfectly legal in ITK

Слайд 5





Images are templated
itk::Image< TPixel, VImageDimension > 
Examples:
itk::Image<double, 4>
itk::Image<unsigned char, 2>
Описание слайда:
Images are templated itk::Image< TPixel, VImageDimension > Examples: itk::Image<double, 4> itk::Image<unsigned char, 2>

Слайд 6





An aside: smart pointers
In C++ you typically allocate memory with new and deallocate it with delete
Say I have a class called Cat:
Cat* pCat = new Cat;
pCat->Meow();
delete pCat;
Описание слайда:
An aside: smart pointers In C++ you typically allocate memory with new and deallocate it with delete Say I have a class called Cat: Cat* pCat = new Cat; pCat->Meow(); delete pCat;

Слайд 7





Danger Will Robinson!
Suppose you allocate memory in a function and forget to call delete prior to returning… the memory is still allocated, but you can’t get to it
This is a memory leak
Leaking doubles or chars can slowly consume memory, leaking 200 MB images will bring your computer to its knees
Описание слайда:
Danger Will Robinson! Suppose you allocate memory in a function and forget to call delete prior to returning… the memory is still allocated, but you can’t get to it This is a memory leak Leaking doubles or chars can slowly consume memory, leaking 200 MB images will bring your computer to its knees

Слайд 8





Smart pointers to the rescue
Smart pointers get around this problem by allocating and deallocating memory for you
You do not explicitly delete objects in ITK, this occurs automatically when they go out of scope
Since you can’t forget to delete objects, you can’t leak memory
Описание слайда:
Smart pointers to the rescue Smart pointers get around this problem by allocating and deallocating memory for you You do not explicitly delete objects in ITK, this occurs automatically when they go out of scope Since you can’t forget to delete objects, you can’t leak memory

Слайд 9





Smart pointers, cont.
This is often referred to as garbage collection - languages like Java have had it for a while, but it’s fairly new to C++
Keep in mind that this only applies to ITK objects - you can still leak arrays of floats/chars/widgets to your heart’s content
Описание слайда:
Smart pointers, cont. This is often referred to as garbage collection - languages like Java have had it for a while, but it’s fairly new to C++ Keep in mind that this only applies to ITK objects - you can still leak arrays of floats/chars/widgets to your heart’s content

Слайд 10





Why are smart pointers smart?
Smart pointers maintain a “reference count” of how many copies of the pointer exist
If Nref drops to 0, nobody is interested in the memory location and it’s safe to delete
If Nref > 0 the memory is not deleted, because someone still needs it
Описание слайда:
Why are smart pointers smart? Smart pointers maintain a “reference count” of how many copies of the pointer exist If Nref drops to 0, nobody is interested in the memory location and it’s safe to delete If Nref > 0 the memory is not deleted, because someone still needs it

Слайд 11





Scope
It’s not just a mouthwash
Refers to whether or not a variable still exists within a certain segment of the code
Local vs. global
Example: variables created within member functions typically have local scope, and “go away” when the function returns
Описание слайда:
Scope It’s not just a mouthwash Refers to whether or not a variable still exists within a certain segment of the code Local vs. global Example: variables created within member functions typically have local scope, and “go away” when the function returns

Слайд 12





Scope, cont.
Observation: smart pointers are only deleted when they go out of scope (makes sense, right?)
Problem: what if we want to “delete” a SP that has not gone out of scope; there are good reasons to do this, e.g. loops
Описание слайда:
Scope, cont. Observation: smart pointers are only deleted when they go out of scope (makes sense, right?) Problem: what if we want to “delete” a SP that has not gone out of scope; there are good reasons to do this, e.g. loops

Слайд 13





Scope, cont.
You can create local scope by using {}
Instances of variables created within the {} will go out of scope when execution moves out of the {}
Therefore… “temporary” smart pointers created within the {} will be deleted
Keep this trick in mind, you may need it
Описание слайда:
Scope, cont. You can create local scope by using {} Instances of variables created within the {} will go out of scope when execution moves out of the {} Therefore… “temporary” smart pointers created within the {} will be deleted Keep this trick in mind, you may need it

Слайд 14





A final caveat about scope
Don’t obsess about it
99% of the time, smart pointers are smarter than you!
1% of the time you may need to haul out the previous trick
Описание слайда:
A final caveat about scope Don’t obsess about it 99% of the time, smart pointers are smarter than you! 1% of the time you may need to haul out the previous trick

Слайд 15





Images and regions
ITK was designed to allow analysis of very large images, even images that far exceed the available RAM of a computer
For this reason, ITK distinguishes between an entire image and the part which is actually resident in memory or requested by an algorithm
Описание слайда:
Images and regions ITK was designed to allow analysis of very large images, even images that far exceed the available RAM of a computer For this reason, ITK distinguishes between an entire image and the part which is actually resident in memory or requested by an algorithm

Слайд 16





Image regions
Algorithms only process a region of an image that sits inside the current buffer
The BufferedRegion is the portion of image in physical memory
The RequestedRegion is the portion of image to be processed
The LargestPossibleRegion describes the entire dataset
Описание слайда:
Image regions Algorithms only process a region of an image that sits inside the current buffer The BufferedRegion is the portion of image in physical memory The RequestedRegion is the portion of image to be processed The LargestPossibleRegion describes the entire dataset

Слайд 17





Image regions, cont.
It may be helpful for you to think of the LargestPossibleRegion as the “size” of the image
When creating an image from scratch, you must specify sizes for all three regions - they do not have to be the same size
Don’t get too concerned with regions just yet, we’ll look at them again with filters
Описание слайда:
Image regions, cont. It may be helpful for you to think of the LargestPossibleRegion as the “size” of the image When creating an image from scratch, you must specify sizes for all three regions - they do not have to be the same size Don’t get too concerned with regions just yet, we’ll look at them again with filters

Слайд 18





Data space vs. “physical” space
Data space is an N-d array with integer indices, indexed from 0 to (Li - 1)
e.g. pixel (3,0,5) in 3D space
Physical space relates to data space by defining the origin and spacing of the image
Описание слайда:
Data space vs. “physical” space Data space is an N-d array with integer indices, indexed from 0 to (Li - 1) e.g. pixel (3,0,5) in 3D space Physical space relates to data space by defining the origin and spacing of the image

Слайд 19


ITK Lecture 4. Images in ITK, слайд №19
Описание слайда:

Слайд 20





Creating an image: step-by-step
Note: this example follows 4.1.1 from the ITK Software Guide, but differs in content - please be sure to read the guide as well
This example is provided more as a demonstration than as a practical example - in the real world images are often/usually provided to you from an external source rather than being explicitly created
Описание слайда:
Creating an image: step-by-step Note: this example follows 4.1.1 from the ITK Software Guide, but differs in content - please be sure to read the guide as well This example is provided more as a demonstration than as a practical example - in the real world images are often/usually provided to you from an external source rather than being explicitly created

Слайд 21





Declaring an image type
Recall the typename keyword… we first define an image type to save time later on:
typedef itk::Image< unsigned short, 3 > ImageType;
We can now use ImageType in place of the full class name, a nice convenience
Описание слайда:
Declaring an image type Recall the typename keyword… we first define an image type to save time later on: typedef itk::Image< unsigned short, 3 > ImageType; We can now use ImageType in place of the full class name, a nice convenience

Слайд 22





A syntax note
It may surprise you to see something like the following:
ImageType::SizeType
Classes can have typedefs as members. In this case, SizeType is a public member of itk::Image. Remember that ImageType is itself a typedef, so we could express the above more verbosely as
itk::Image< unsigned short, 3 >::SizeType
Описание слайда:
A syntax note It may surprise you to see something like the following: ImageType::SizeType Classes can have typedefs as members. In this case, SizeType is a public member of itk::Image. Remember that ImageType is itself a typedef, so we could express the above more verbosely as itk::Image< unsigned short, 3 >::SizeType

Слайд 23





Syntax note, cont.
This illustrates one criticism of templates and typedefs - it’s easy to invent something that looks like a new programming language!
Remember that names ending in “Type” are  types, not variables or class names
Doxygen is your friend - you can find user-defined types under “Public Types”
Описание слайда:
Syntax note, cont. This illustrates one criticism of templates and typedefs - it’s easy to invent something that looks like a new programming language! Remember that names ending in “Type” are types, not variables or class names Doxygen is your friend - you can find user-defined types under “Public Types”

Слайд 24





Creating an image pointer
An image is created by invoking the New() operator from the corresponding image type and assigning the result to a SmartPointer.
ImageType::Pointer image = ImageType::New();
Описание слайда:
Creating an image pointer An image is created by invoking the New() operator from the corresponding image type and assigning the result to a SmartPointer. ImageType::Pointer image = ImageType::New();

Слайд 25





A note about “big New”
Many/most classes within ITK (indeed, all which derive from itk::Object) are created with the ::New() operator, rather than new
MyType::Pointer p = MyType::New();
Remember that you should not try to call delete on objects created this way
Описание слайда:
A note about “big New” Many/most classes within ITK (indeed, all which derive from itk::Object) are created with the ::New() operator, rather than new MyType::Pointer p = MyType::New(); Remember that you should not try to call delete on objects created this way

Слайд 26





When not to use ::New()
“Small” classes, particularly ones that are intended to be accessed many (e.g. millions of) times will suffer a performance hit from smart pointers
These objects can be created directly (on the stack) or using new (on the free store)
Описание слайда:
When not to use ::New() “Small” classes, particularly ones that are intended to be accessed many (e.g. millions of) times will suffer a performance hit from smart pointers These objects can be created directly (on the stack) or using new (on the free store)

Слайд 27





Setting up data space
The ITK Size class holds information about the size of image regions
ImageType::SizeType size;
size[0] = 200; // size along X
size[1] = 200; // size along Y
size[2] = 200; // size along Z
Описание слайда:
Setting up data space The ITK Size class holds information about the size of image regions ImageType::SizeType size; size[0] = 200; // size along X size[1] = 200; // size along Y size[2] = 200; // size along Z

Слайд 28





Setting up data space, cont.
Our image has to start somewhere - how about the origin?
ImageType::IndexType start;
start[0] = 0; // first index on X
start[1] = 0; // first index on Y
start[2] = 0; // first index on Z
Описание слайда:
Setting up data space, cont. Our image has to start somewhere - how about the origin? ImageType::IndexType start; start[0] = 0; // first index on X start[1] = 0; // first index on Y start[2] = 0; // first index on Z

Слайд 29





Setting up data space, cont.
Now that we’ve defined a size and a starting location, we can build a region.
ImageType::RegionType region;
region.SetSize( size );
region.SetIndex( start );
Описание слайда:
Setting up data space, cont. Now that we’ve defined a size and a starting location, we can build a region. ImageType::RegionType region; region.SetSize( size ); region.SetIndex( start );

Слайд 30





Allocating the image
Finally, we’re ready to actually create the image. The SetRegions function sets all 3 regions to the same region and Allocate sets aside memory for the image.
image->SetRegions( region );
image->Allocate();
Описание слайда:
Allocating the image Finally, we’re ready to actually create the image. The SetRegions function sets all 3 regions to the same region and Allocate sets aside memory for the image. image->SetRegions( region ); image->Allocate();

Слайд 31





Dealing with physical space
At this point we have an image of “pure” data; there is no relation to the real world
Nearly all useful medical images are associated with physical coordinates of some form or another
As mentioned before, ITK uses the concepts of origin and spacing to translate between physical and data space
Описание слайда:
Dealing with physical space At this point we have an image of “pure” data; there is no relation to the real world Nearly all useful medical images are associated with physical coordinates of some form or another As mentioned before, ITK uses the concepts of origin and spacing to translate between physical and data space

Слайд 32





Image spacing
We can specify spacing by calling the SetSpacing function in Image.
double spacing[ ImageType::ImageDimension ];
spacing[0] = 0.33; // spacing in mm along X
spacing[1] = 0.33; // spacing in mm along Y
spacing[2] = 1.20; // spacing in mm along Z
image->SetSpacing( spacing );
Описание слайда:
Image spacing We can specify spacing by calling the SetSpacing function in Image. double spacing[ ImageType::ImageDimension ]; spacing[0] = 0.33; // spacing in mm along X spacing[1] = 0.33; // spacing in mm along Y spacing[2] = 1.20; // spacing in mm along Z image->SetSpacing( spacing );

Слайд 33





Image origin
Similarly, we can set the image origin
double origin[ImageType::ImageDimension];
origin[0] = 0.0; // coordinates of the
origin[1] = 0.0; // first pixel in N-D
origin[2] = 0.0;
image->SetOrigin( origin );
Описание слайда:
Image origin Similarly, we can set the image origin double origin[ImageType::ImageDimension]; origin[0] = 0.0; // coordinates of the origin[1] = 0.0; // first pixel in N-D origin[2] = 0.0; image->SetOrigin( origin );

Слайд 34





Origin/spacing units
There are no inherent units in the physical coordinate system of an image - I.e. referring to them as mm’s is arbitrary (but very common)
Unless a specific algorithm states otherwise, ITK does not understand the difference between mm/inches/miles/etc.
Описание слайда:
Origin/spacing units There are no inherent units in the physical coordinate system of an image - I.e. referring to them as mm’s is arbitrary (but very common) Unless a specific algorithm states otherwise, ITK does not understand the difference between mm/inches/miles/etc.

Слайд 35





Direct pixel access in ITK
There are many ways to access pixels in ITK
The simplest is to directly address a pixel by knowing either its:
Index in data space
Physical position, in physical space
Описание слайда:
Direct pixel access in ITK There are many ways to access pixels in ITK The simplest is to directly address a pixel by knowing either its: Index in data space Physical position, in physical space

Слайд 36





Why not to directly access pixels
Direct pixels access is simple conceptually, but involves a lot of extra computation (converting pixel indices into a memory pointer)
There are much faster ways of performing sequential pixel access, through iterators
Описание слайда:
Why not to directly access pixels Direct pixels access is simple conceptually, but involves a lot of extra computation (converting pixel indices into a memory pointer) There are much faster ways of performing sequential pixel access, through iterators

Слайд 37





Accessing pixels in data space
The Index object is used to access pixels in an image, in data space
ImageType::IndexType pixelIndex;
pixelIndex[0] = 27; // x position
pixelIndex[1] = 29; // y position
pixelIndex[2] = 37; // z position
Описание слайда:
Accessing pixels in data space The Index object is used to access pixels in an image, in data space ImageType::IndexType pixelIndex; pixelIndex[0] = 27; // x position pixelIndex[1] = 29; // y position pixelIndex[2] = 37; // z position

Слайд 38





Pixel access in data space
To set a pixel:
ImageType::PixelType pixelValue = 149;
image->SetPixel(pixelIndex, pixelValue);
And to get a pixel:
ImageType::PixelType value = image
	->GetPixel( pixelIndex );
Описание слайда:
Pixel access in data space To set a pixel: ImageType::PixelType pixelValue = 149; image->SetPixel(pixelIndex, pixelValue); And to get a pixel: ImageType::PixelType value = image ->GetPixel( pixelIndex );

Слайд 39





Why the runaround with PixelType?
It might not be obvious why we refer to ImageType::PixelType rather than (in this example) just say unsigned short
In other words, what’s wrong with…?
unsigned short value = image->GetPixel( pixelIndex );
Описание слайда:
Why the runaround with PixelType? It might not be obvious why we refer to ImageType::PixelType rather than (in this example) just say unsigned short In other words, what’s wrong with…? unsigned short value = image->GetPixel( pixelIndex );

Слайд 40





PixelType, cont.
Well… nothing’s wrong in this example
But, in the general case we don’t always know or control the type of pixel stored in an image
Referring to ImageType will allow the code to compile for any type that defines the = operator (float, int, char, etc.)
Описание слайда:
PixelType, cont. Well… nothing’s wrong in this example But, in the general case we don’t always know or control the type of pixel stored in an image Referring to ImageType will allow the code to compile for any type that defines the = operator (float, int, char, etc.)

Слайд 41





PixelType, cont.
That is, if you have a 3D image of doubles,
ImageType::PixelType value = image
	->GetPixel( pixelIndex );
works fine, while
unsigned short value = image->GetPixel( pixelIndex );
will produce a compiler warning
Описание слайда:
PixelType, cont. That is, if you have a 3D image of doubles, ImageType::PixelType value = image ->GetPixel( pixelIndex ); works fine, while unsigned short value = image->GetPixel( pixelIndex ); will produce a compiler warning

Слайд 42





Walking through an image - Part 1
If you’ve done image processing before, the following pseudocode should look familiar:
loop over rows
	loop over columns
		build index (row, column)
		GetPixel(index)
	end column loop
end row loop
Описание слайда:
Walking through an image - Part 1 If you’ve done image processing before, the following pseudocode should look familiar: loop over rows loop over columns build index (row, column) GetPixel(index) end column loop end row loop

Слайд 43





Image traversal, cont.
The loop technique is easy to understand but:
Is slow
Doesn’t scale to N-d
Is unnecessarily messy from a syntax point of view
Next week we’ll learn a way around this
Описание слайда:
Image traversal, cont. The loop technique is easy to understand but: Is slow Doesn’t scale to N-d Is unnecessarily messy from a syntax point of view Next week we’ll learn a way around this

Слайд 44





Accessing pixels in physical space
ITK uses the Point class to store the position of a point in N-d space; conveniently, this is the “standard” for many ITK classes
typedef itk::Point< double, ImageType::ImageDimension > PointType;
Описание слайда:
Accessing pixels in physical space ITK uses the Point class to store the position of a point in N-d space; conveniently, this is the “standard” for many ITK classes typedef itk::Point< double, ImageType::ImageDimension > PointType;

Слайд 45





Defining a point
Hopefully this syntax is starting to look somewhat familiar…
PointType point;
point[0] = 1.45; // x coordinate
point[1] = 7.21; // y coordinate
point[2] = 9.28; // z coordinate
Описание слайда:
Defining a point Hopefully this syntax is starting to look somewhat familiar… PointType point; point[0] = 1.45; // x coordinate point[1] = 7.21; // y coordinate point[2] = 9.28; // z coordinate

Слайд 46





Why do we need a Point?
The image class contains a number of convenience methods to convert between pixel indices and physical positions (as stored in the Point class)
These methods take into account the origin and spacing of the image, and do bounds-checking as well (I.e., is the point even inside the image?)
Описание слайда:
Why do we need a Point? The image class contains a number of convenience methods to convert between pixel indices and physical positions (as stored in the Point class) These methods take into account the origin and spacing of the image, and do bounds-checking as well (I.e., is the point even inside the image?)

Слайд 47





TransformPhysicalPointToIndex
This function takes as parameters a Point (that you want) and an Index (to store the result in) and returns true if the point is inside the image and false otherwise
Assuming the conversion is successful, the Index contains the result of mapping the Point into data space
Описание слайда:
TransformPhysicalPointToIndex This function takes as parameters a Point (that you want) and an Index (to store the result in) and returns true if the point is inside the image and false otherwise Assuming the conversion is successful, the Index contains the result of mapping the Point into data space

Слайд 48





The transform in action
First, create the index:
ImageType::IndexType pixelIndex;
Next, run the transformation:
image->TransformPhysicalPointToIndex(
point,pixelIndex );
Now we can access the pixel!
ImageType::PixelType pixelValue =
image->GetPixel( pixelIndex );
Описание слайда:
The transform in action First, create the index: ImageType::IndexType pixelIndex; Next, run the transformation: image->TransformPhysicalPointToIndex( point,pixelIndex ); Now we can access the pixel! ImageType::PixelType pixelValue = image->GetPixel( pixelIndex );

Слайд 49





Point and index transforms
2 methods deal with integer indices:
TransformPhysicalPointToIndex
TransformIndexToPhysicalPoint 
And 2 deal with floating point indices (used to interpolate pixel values):
TransformPhysicalPointToContinuousIndex 
TransformContinuousIndexToPhysicalPoint
Описание слайда:
Point and index transforms 2 methods deal with integer indices: TransformPhysicalPointToIndex TransformIndexToPhysicalPoint And 2 deal with floating point indices (used to interpolate pixel values): TransformPhysicalPointToContinuousIndex TransformContinuousIndexToPhysicalPoint



Теги ITK Lecture 4. Images in ITK
Похожие презентации
Mypresentation.ru
Загрузить презентацию