본문 바로가기
프로그래밍/ITK

Image 생성

by 이재만박사 2016. 7. 2.

이 부분에 대한 소스 코드는 다음 파일에서 찾을 수 있다

Examples/DataRepresentation/Image/Image1.cxx

 

- 이 예제는 itk:Image 클래스를 수동으로 구성하는 방법을 설명한다

- 다음은 이미지 클래스를 생성하고 선언하는 최소의 코드이다

 

- 첫째로, Image 클래스의 헤더 파일은 포함되어야 한다

#include "itkImage.h"

 

- 그리고 나서 우리는 픽셀을 나타내는 타입과 이미지의 차원이 무엇인지 결정해야 한다

- 이 두 개의 파라미터를 가지로 이미지 클래스를 인스턴스화 한다

- 여기에서 우리는 unsigned char 픽셀 데이터를 가진 3D 이미지를 생성한다

 

typedef itk::Image< unsigned short, 3 > ImageType;

 

- 그리고 나서 이미지는 대응되는 이미지 타입으로부터 New() 연산자를 호출하므로써 생성될 수 있고 itk::SmartPointer에 결과를 할당한다

 

ImageType::Pointer image = ImageType::New();

 

- ITK에서 이미지는 하나 또는 그 이상의 영역을 가지고 조합으로 존재한다

- 영역은 이미지의 부분집합이고 시스템에서 다른 클래스에 의해 진행될 수 있는 이미지의 일부를 지시한다

- 가장 공통적인 영역 중의 하나는 LargestPossibleRegion인데, 이것은 그것의 전체에서 이미지를 정의한다

- ITK에서 발견된 다른 중요한 영역은 BufferedRegion인데, 이것은 실제로 메모리에 유지된 이미지의 일부이고, RequestedRegion은 필터 또는 이미지에서 사용하는 다른 클래스에 의해 요구되는 영역이다

 

- ITK에서 수동적으로 이미지를 생성하는 것은 위에서 보여진 것과 같이 이미지가 인스턴스화 되어야 하고, 그리고 나서 이미지를 묘사하는 영역은 그것에 연결된다

 

 

- 영역은 두 개의 클래스에 의해 정의된다 - itk::Index 와 itk::Size 클래스

- 이미지 내에서 영역의 원점은 Index에 의해 정의된다

- 영역의 규모 또는 크기는 Size로 정의된다

- Index는 n 차원 배열에 의해 나타내지는데 여기에서 각 컴포넌트는 이미지의 첫 픽셀을 가리키는 정수이다

- 이미지가 수동으로 생성될 때, 사용자는 이미지 그리드를 시작하는 인덱스와 이미지 크기를 정의하는데 책임을 져야 한다

- 이 두 개의 파라미터는 선택된 영역을 진행하는 것을 가능하도록 만든다

 

- 이미지의 시작점은 n 차원 배열의 Index 클래스에 의해 정의되는데 각 컴포넌트는 이미지의 초기 픽셀의 그리드 좌표를 지정하는 정수이다

 

ImageType::IndexType start;

 

start[0] = 0;

start[1] = 0;

start[2] = 0;

 

- 영역 크기는 Size 클래스를 사용하여 이미지의 같은 차원의 배열로 나타낸다

- 배열의 컴포넌트는 모든 차원을 따라 이미지의 픽셀들에서 규모를 지정하는 부호없는 정수이다

 

ImageType::SizeType size;

 

size[0] = 200;

size[1] = 200;

size[2] = 200;

 

- 시작 인덱스와 이미지 크기를 정의하면서 이 두 개의 파라미터는 기본적으로 두 개 모두 개념을 요약하는 ImageRegion 객체를 생성하는데 사용된다

- 영역은 시작 인덱스와 이미지의 크기를 가지고 초기화한다

 

ImageType::RegionType region;

 

region.SetSize(size);

region.SetIndex(start);

 

- 마지막으로, 영역은 그것의 규모와 원점을 정의하기 위해 Image 객체에 통과된다

- SetRegion 메서드는 LargestPossibleRegion, BufferedRegion, 그리고 RequestedRegion을 동시에 설정한다

- 이 점을 수행하는 연산자 중 아무 것도 이미지 픽셀 데이터를 위해 할당하지 않는다

- 이것을 하기 위해  Allocate() 메서드를 호출하는 것이 필수적이다

- Allocate() 메서드는 메모리 할당에 필수적인 모든 정보가 영역에 의해 미리 제공되기 때문에 어떤 전달인자(argument)도 필요하지 않다

 

image->SetRegions( region );

image->Allocate();

 

- 실제로 이미지를 직접 할당하고 초기화 하는 것은 드물다

- 이미지들은 전형적으로 파일 또는 데이터 인식 하드웨어와 같은 원본들로부터 읽는다

- 다음의 예제는 이미지가 파일로부터 어떻게 읽어들이는지 설명한다

댓글