2016. 1. 6. 15:52

* Volume 데이터를 로딩하는 가장 간단한 방법

Volume은 디스크에 저장

- SoVolumeReader 클래스를 이용

- 응용 프로그램은 각자 자신의 Volume 리더 클래스를 생성할 수 있음

- 파일 확장자에 기초한 Volume 리더 클래스 선택

- ".ldm" 파일을 위해 SoVRLdmFileReader 클래스 사용

- SoVolumeData::filename 필드에 설정 예제


* 논의할 내용

- 파일 포맷

- 비표준 확장자를 가진 파일 로딩

- "raw" 데이터(no header) 로딩

- 이미지 스택 로딩

- RGBA 데이터


* 파일 포맷

- VolumeViz 파일 리더

- 파일 이름 확장자에 리더 클래스가 관련


File extensionReader classDescription
.amSoVRAmFileReaderAvizo Mesh file format
.dc3, .dic, .dicomSoVRDicomFileReaderDICOM file format
.fldSoVRAvsFileReaderAVS field file format
.ldmSoVRLdmFileReader

Large Data Management format

.sgy or .segySoVRSegyFileReaderSEG Y revision 1 file format
.volSoVRVolFileReaderVol file format
.voxSoVRVoxFileReaderVox file format
.lstSoVRRasterStackReader

Lst file format


* 비표준 확장자

- 만약 파일 이름이 확장자를 가지고 있지 않거나 적당한 확장자를 가지고 있지 않다면, 응용 프로그램은 파일을 로딩하기 위해 여전히 특별한 Volume 리더를 사용할 수 있다

- 그러나 SoVolumeData 노드의 setReader() 함수를 이용하여 구체적으로 Volume 리더를 설정해야 한다


- 예를 들어 Volume 파일이 VOL 포맷을 가진 데이터를 포함하지만 파일 이름이 정확한 확장자를 가지고 있지 않다면,

VolumeViz는 VOL 포맷으로 데이터를 읽게 하기 위해 다음 코드는 강제한다





* Raw 데이터

- 만약 파일이 VolumeViz가 직접적으로 지원하는 포맷이 아니지만,

행 x 행 으로 조직된 값들의 연속적인 블럭으로 Volume 데이터를 포함하면

일반적인 리더 SoVRGenericFileReader 를 이용할 수 있다

- 이것은 보통 "raw" 데이터파일로 불린다

Volume의 범위(extent), 데이터 타입, 차원(dimension)을 구체화할 필요

- 다음 코드는 일반 리더(generic reader)를 이용하여 데이터를 로드





*  이미지 스택

- Volume이 여러 개(multiple)의 이미지 파일로 저장되었다면,

  SoVRRasterStackReader 클래스를 사용

- 이미지 스택을 로딩하는데 유용

- Open Inventor가 지원하는 이미지 파일 : JPEG, PNG, TIFF

- 이미지들의 포맷은 다를 수 있어도 같은 사이즈여야만 함

- 이미지 크기는 X, Y dimension

- Z dimension은 슬라이스의 수


- 이미지 스택을 로딩하기 위해 이미지 파일 이름들의 리스트를 포함하는 파일이 존재해야 함

- 이미지 파일 이름은 간단한 파일 이름이 될 수도 있고, 완전한 파일 경로가 될 수도 있다

- 만약 이미지 파일 이름이 간단한 파일 이름이라면, VolumeViz는 리스트 파일을 포함하는 디렉토리에서 오픈할 수 있다

- 리스트 파일에서 파일 이름의 순서는 어떻게 슬라이스를 로딩할지를 결정

- VolumeViz는 첫 번째 이미지가 슬라이스 0이고, Volume의 "뒤"이고 연속적인 슬라이스가 Z 값이 증가하는 순서로 로딩한다고 가정


- 테디 베어 예제 데이터

- 리스트 파일은 다음과 같고, 여기에서 "Size" 파라미터는 범위를 의미

Parameters {
  Size 10.000000 10.000000 10.000000 1250.000000 1250.000000 500.000000
}
teddybear000.jpg
teddybear001.jpg
teddybear002.jpg
teddybear003.jpg
teddybear004.jpg
...

- 일단 리스트 파일을 가지면, 데이터를 로딩하는 것은 이전 예제와 같다




* RGBA 데이터

- RGBA Volume에서 Voxel은 UNSIGNED_INT32 값이다

- 각 값은 8bit Red, Green, Blue 그리고 Alpha 값을 포함

- 모든 렌더링 노드(slices, volume rendering, 등등)는 RGBA volume을 가지고 작업

- Region of Interest, Clipping 그리고 다른 특징들도 또한 RGBA volume을 가지고 작업

- Volume은 이미 렌더링에 사용될 색을 지정했기 때문에, 

Data Range와 Transfer Function은 무시한다