VolumeViz - 파일로부터 로딩
* Volume 데이터를 로딩하는 가장 간단한 방법
- Volume은 디스크에 저장
- SoVolumeReader 클래스를 이용
- 응용 프로그램은 각자 자신의 Volume 리더 클래스를 생성할 수 있음
- 파일 확장자에 기초한 Volume 리더 클래스 선택
- ".ldm" 파일을 위해 SoVRLdmFileReader 클래스 사용
- SoVolumeData::filename 필드에 설정 예제
* 논의할 내용
- 파일 포맷
- 비표준 확장자를 가진 파일 로딩
- "raw" 데이터(no header) 로딩
- 이미지 스택 로딩
- RGBA 데이터
* 파일 포맷
- VolumeViz 파일 리더
- 파일 이름 확장자에 리더 클래스가 관련
File extension | Reader class | Description |
---|---|---|
.am | SoVRAmFileReader | Avizo Mesh file format |
.dc3, .dic, .dicom | SoVRDicomFileReader | DICOM file format |
.fld | SoVRAvsFileReader | AVS field file format |
.ldm | SoVRLdmFileReader | Large Data Management format |
.sgy or .segy | SoVRSegyFileReader | SEG Y revision 1 file format |
.vol | SoVRVolFileReader | Vol file format |
.vox | SoVRVoxFileReader | Vox file format |
.lst | SoVRRasterStackReader | 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은 무시한다