픽셀 데이터 접근
- 이 부분에 대한 소스 코드는 다음 파일에서 찾을 수 있다
- Examples/DataRepresentation/Image/Image3.cxx
- 이 예제는 SetPixel()과 GetPixel() 메서드의 사용 예제를 보여준다
- 이 두 개의 메서드는 이미지 안에 포함된 픽셀 데이터의 직접 접근을 제공한다
- 이 두 개의 메서드는 상대적으로 느리고 높은 성능 접근을 필요로 하는 상황에서는 사용하지 말아야 하는 것에 주목하라
- 이미지 반복자는 효휼적으로 이미지 픽셀 데이터에 접근하기 위한 적절한 메커니즘이다
- 이미지 내부의 픽셀의 개별적인 위치는 유일한 인덱스에 의해 지정된다
- 인덱스는 이미지의 각 좌표 차원을 따라 픽셀의 위치를 정의하는 정수들의 배열이다
- IndexType은 자동적으로 이미지에 의해 정의되고 itk::Index와 같은 영역 연산자를 사용하여 접근될 수 있다
- 배열의 길이는 연관된 이미지의 차원을 연결할 것이다
- 다음 코드는 인덱스 변수의 선언과 그것의 컴포넌트의 각각에 값을 할달하는 예제를 보여준다
- Index는 그것을 접근하기 위해 SmartPointer를 사용하지 않는 것에 주목하라
- 이것은 Index가 객체들 사이에 공유되어지는 것을 의도하지 않는 가벼운 무게의 객체이기 때문이다
- 그것은 SmartPointer 메커니즘을 사용하여 그것들을 공유하는 것보다 이 작은 객체들의 여러 개의 복사를 생산하는 것이 훨씬 더 효율적이다
- 다음 줄은 인덱스 타입의 인스턴스를 선언하고 이미지 내에서 픽셀 위치를 가지고 그것에 접근하기 위해 그것의 내용을 초기화한다
ImageType::IndexType pixelIndex;
pixelIndex[0] = 27; // x position
pixelIndex[1] = 29; // y position
pixelIndex[2] = 37; // z position
- 인덱스를 가지고 픽셀 위치를 정의하기 때문에, 이미지에서 픽셀의 내용에 접근하는 것은 가능하다
- GetPixel() 메서드는 우리에게 픽셀의 값을 얻는 것을 허락한다
ImageType::PixelType pixelValue = image->GetPixel(pixelIndex);
- SetPixel() 메서드는 우리에게 픽셀의 값을 설정하는 것을 허락한다
image->SetPixel( pixelIndex, pixelValue + 1);
- GetPIxel() 은 복사를 사용하고 참조를 사용하지 않는 문맥을 사용하여 픽셀 값을 돌려준다
- 따라서 그 메서드는 이미지 데이터 값을 변경하는데 사용할 수 없다
- SetPixel() 과 GetPixel() 둘 다 비효율적이라는 것과 마우스를 가지고 클릭하므로써 픽셀 값을 요청하는 것과 같은 상호작용을 지지하는 것이나 디버깅을 위해 오직 사용되어져야 함을 기억하라