SEG NIfTI, ์ ๋ฒ๋ ธ๋
๋ณ๋ชฉ์ ํด๋ถ์ BBox ์ ํ ๋ฐฐ๊ฒฝ
BE์์ Seg NIfTI๋ฅผ ๋ฐ์ VTK๋ก ์ค๋ฒ๋ ์ดํ๋ ๋ฐฉ์์ด ์ ๋ฌธ์ ์๋์ง, ๊ทธ๋ฆฌ๊ณ BBox JSON์ด๋ผ๋ ์ ํ์ด ์ด๋ป๊ฒ ๊ทธ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํ๋ฒ์ ํด๊ฒฐํ๋์ง ์ค๋ช ํฉ๋๋ค.
๐ ์๋ฆฌ์ฆ: SEG NIfTI์์ BBox JSON์ผ๋ก
๋ฌด์์ด ๋ฌธ์ ์๋
VTK.js ๊ธฐ๋ฐ ์๋ฃ ์์ ๋ทฐ์ด์์ ์ธ๊ทธ๋ฉํ ์ด์ ์ค๋ฒ๋ ์ด๋ ์ค๋ซ๋์ "SEG NIfTI๋ฅผ ๋ฐ์์ VTK ImageSlice๋ก ๋ ๋๋ง"ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์์์ต๋๋ค. ๋์ ์์ฒด๋ ๋ฌธ์ ์์์ง๋ง, ์ฌ์ฉ์ ๊ฒฝํ ์ธก๋ฉด์์ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ณด๊ณ ๋์์ต๋๋ค.
ํ๋๋ ๋ก๋ฉ ์๊ฐ์ด์๊ณ , ๋ค๋ฅธ ํ๋๋ ์ ์ฌ์ ๊ธฐ๊ธฐ์์์ ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ด์์ต๋๋ค. ๋ ๋ฌธ์ ๋ชจ๋ ์์ธ์ ํ๊ณ ๋ค๋ฉด ๊ฐ์ ๊ณณ์ ๊ฐ๋ฆฌํค๊ณ ์์์ต๋๋ค โ SEG NIfTI ํ์ผ ์์ฒด.
๊ธฐ์กด ๋ฐฉ์์ด ๋๋ ธ๋ ์ด์
๊ธฐ์กด SEG ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ๋ค์ ๋จ๊ณ๋ฅผ ์์๋๋ก ๊ฑฐ์ณ์ผ ํ์ต๋๋ค. ๊ฐ ๋จ๊ณ๊ฐ ์๋ฃ๋์ด์ผ ๋ค์ ๋จ๊ณ๊ฐ ์์๋๋ ์์ฐจ์ ๋ธ๋กํน ๊ตฌ์กฐ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์ ๊ตฌ์กฐ
๊ฐ ๋จ๊ณ๋ฅผ ๊ฑฐ์น ์๋ก ๊ฐ์ SEG ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ํํ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์์ ๋๋ค.
* 512ร512ร300 SEG ๋ณผ๋ฅจ, Float32 โ RGBA ๋ณํ ๊ธฐ์ค ์ถ์
๊ทผ๋ณธ ์์ธ โ ํฌ๋งท ์ ํ์ ๋ถ์ผ์น
๋ฌธ์ ๋ฅผ ํ ์ค๋ก ์์ฝํ๋ฉด ์ด๋ ์ต๋๋ค.
ํ๋ฉด์ ๊ทธ๋ ค์ผ ํ๋ ๊ฒ์ ๋จ์ํฉ๋๋ค. ๊ฐ ์ฌ๋ผ์ด์ค์์ ์ด๋ ํฝ์ ์ขํ์, ์ด๋ค ์์ ๋ฐ์ค(๋๋ ์ค๊ณฝ์ )๋ฅผ ๊ทธ๋ฆด ๊ฒ์ธ๊ฐ์ ๋๋ค. ์ด ์ ๋ณด๋ฅผ ํํํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ ๊ฒจ์ฐ ์ KB์ ๋๋ค.
๊ทธ๋ฐ๋ฐ NIfTI SEG๋ ๊ทธ ์ KB์ง๋ฆฌ ์ ๋ณด๋ฅผ ํํํ๊ธฐ ์ํด ์๋ฐฑ MB์ 3D ๋ณต์ ๋ณผ๋ฅจ์ ์ ๋ฌํฉ๋๋ค. ๋๋ถ๋ถ์ ๋ณต์ ์ 0(๋ฐฐ๊ฒฝ)์ด๊ณ , ์ค์ ๋ ์ด๋ธ์ด ์๋ ๋ณต์ ์ ์ ์ฒด์ 1~5%์ ๋ถ๊ณผํฉ๋๋ค.
ํด๊ฒฐ์ฑ โ BBox JSON์ผ๋ก์ ์ ํ
๊ฒํ ๋ ๋์์ ์ธ ๊ฐ์ง์์ต๋๋ค.
| ๋์ | ์ ๊ทผ ๋ฐฉ์ | ๋ฉ๋ชจ๋ฆฌ | ๊ตฌํ ๋ณต์ก๋ | ์ฑํ |
|---|---|---|---|---|
| Sparse Zarr SEG | SEG NIfTI โ Zarr ๋ณํ, ์ฒญํฌ ๋จ์ fetch | ๊ฐ์ ๋จ | ๋์ (์ปค์คํ ๋ก๋) | ๋ฏธ์ฑํ |
| ์๋ฒ์ฌ์ด๋ ์ฌ๋ผ์ด์ค ๋ ๋๋ง | BE์์ PNG๋ก ๋ ๋๋ง, ์ฌ๋ผ์ด์ค๋ง๋ค ์์ฒญ | ์ต์ | ์ค๊ฐ | ๋ฏธ์ฑํ |
| BBox/Contour JSON | BE์์ ์ขํ ๊ณ์ฐ, FE Canvas์์ ๊ทธ๋ฆฌ๊ธฐ | ์ต์ (~0) | ๋ฎ์ | โ ์ฑํ |
BBox JSON ๋ฐฉ์์ด ์ฑํ๋ ํต์ฌ ์ด์ ๋ ์ธ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋์์ ํด๊ฒฐํ๋ฉด์ ๊ตฌํ ๋ณต์ก๋๋ ์คํ๋ ค ์ค์ด๋ค์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ํด๊ฒฐ
SEG ๊ด๋ จ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ค์ 0์ด ๋ฉ๋๋ค. JSON ์๋ต ์์ฒด๊ฐ ์ KB์ด๊ณ , Canvas 2D๋ก ๊ทธ๋ฆฌ๋ฏ๋ก GPU ํ ์ค์ฒ ์ ๋ก๋๋ ์์ต๋๋ค.
๋ก๋ฉ ์๊ฐ ํด๊ฒฐ
์์ญ MB gzip ๋ค์ด๋ก๋ โ ์ KB JSON. gzip ํด์ , Worker, VTK ImageData ์์ฑ ๋จ๊ณ๊ฐ ๋ชจ๋ ์ฌ๋ผ์ง๋๋ค. Base ๋ณผ๋ฅจ๊ณผ ๋ณ๋ ฌ๋ก ์ฆ์ ์๋ฃ๋ฉ๋๋ค.
์ฝ๋ ๋จ์ํ
fetchAxialSegVolume, Web Worker ํ์ดํ๋ผ์ธ, createSegVtkImageData, createSegPlanarSlices ๋ฑ ์๋ฐฑ ์ค์ ๋ณต์กํ ์ฝ๋๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
3๋ทฐ ์ง์ ๊ฐ๋ฅ
BBox ์ขํ์์ 3D ๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ์ฌ๊ตฌ์ฑํ๋ฉด Axial๋ฟ ์๋๋ผ Sagittal, Coronal ๋ทฐ์์๋ ํฌ์ ๋ฐ์ค๋ฅผ ๊ทธ๋ฆด ์ ์์ต๋๋ค. (3ํธ์์ ์์ธ ์ค๋ช )
๋ณ๊ฒฝ ํ ํ์ดํ๋ผ์ธ
fetchAxialSegVolume() โ NIfTI ArrayBuffer (~30MB) โ parseNifti() gzip ํด์ โ Web Worker ๋ฆฌ์ํ + RGBA โ createSegVtkImageData() โ createSegPlanarSlices() โ VTK GPU ํ ์ค์ฒ ์ ๋ก๋ โ renderWindow.render() ์ด ์๊ฐ: +10~30์ด (Base ์ดํ) ๋ฉ๋ชจ๋ฆฌ: +600MB~1.2GB
fetchAxialBBox() โ JSON (~์ KB) โ response.json() ํ์ฑ โ bboxAnnotations state ์ ์ฅ โ Canvas 2D drawBBoxOverlay() ์ด ์๊ฐ: Base์ ๋์ ์๋ฃ ๋ฉ๋ชจ๋ฆฌ: ~0 (JSON ์ธ ์ถ๊ฐ ์์)
์ ๊ฑฐ๋ ๊ฒ๋ค โ ์ฌ๋ผ์ง ๋ณต์ก์ฑ
์ด๋ฒ ์ ํ์์ ์ญ์ ๋ ์ฝ๋์ ์์กด์ฑ ๋ชฉ๋ก์ ๋๋ค. ์๋ก ์ถ๊ฐ๋ ๊ฒ๋ณด๋ค ์ ๊ฑฐ๋ ๊ฒ์ด ํจ์ฌ ๋ง์ต๋๋ค.
| ๊ตฌ๋ถ | ์ ๊ฑฐ๋ ํญ๋ชฉ | ์ด์ |
|---|---|---|
| API ํจ์ | fetchAxialSegVolume(), fetchSegVolume() | BBox JSON์ผ๋ก ๋์ฒด |
| ์ ํธ๋ฆฌํฐ | createSegVtkImageData(), createSegPlanarSlices(), createSegCrossSlices() | VTK SEG ํ์ดํ๋ผ์ธ ์ ์ฒด ์ ๊ฑฐ |
| Web Worker | SegProcessRequest, SegProcessResponse, resample ๋ก์ง | JSON์ ํ์ฑ๋ง์ผ๋ก ๋๋จ |
| import | vtkDataArray, SegProcessRequest, fetchSegVolume ๋ฑ ๋ค์ | ๋ฏธ์ฌ์ฉ |
| ์ํ | segImageData, segDims, segOriginalScalars (MapperRegistry) | ๋ ์ด์ VTK SEG ์ํ ๋ถํ์ |
| MapperRegistry | setSegMappers(), applySegColorMap(), segOriginalScalars | SEG VTK ๋ ๋๋ง ์ ๊ฑฐ |
1ํธ ์์ฝ
| ํญ๋ชฉ | Before | After |
|---|---|---|
| SEG ๋ฐ์ดํฐ ํ์ | NIfTI gzip (~30MB+) | JSON (~์ KB) |
| SEG ๋ก๋ฉ ์๊ฐ | Base ์ดํ +10~30์ด | Base์ ๋์ ์๋ฃ |
| SEG ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ | +600MB~1.2GB | ~0 MB |
| Web Worker | ๋ฆฌ์ํ + RGBA ๋ณํ | ๋ถํ์ |
| GPU ํ ์ค์ฒ | SEG RGBA ํ ์ค์ฒ ์ถ๊ฐ | ์ถ๊ฐ ์์ |
| ๋ ๋๋ง ๋ฐฉ์ | VTK ImageSlice | Canvas 2D |
| 3๋ทฐ ์ง์ | Axial๋ง (Seg overlay) | Axial + Sagittal + Coronal |
'๐ฑ๏ธ ๊ธฐ์ ๊ฒํ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [React] VTK ์ขํ๊ณ์์ 3๊ฐ ๋ทฐ ๋์์ BBox ๊ทธ๋ฆฌ๊ธฐ (0) | 2026.04.03 |
|---|---|
| [React] BBox JSON API ์ค๊ณ์ Canvas ์ค๋ฒ๋ ์ด ๊ตฌํ (0) | 2026.04.03 |
| [React] SEG ์์ญ๋ง Zarr๋ก,๋๋จธ์ง๋ ์๋ณธ ๊ทธ๋๋ก (0) | 2026.04.03 |
| [React] NIfTI ์์ถ์ ๋ ๊ฐ๋.nii.gz vs Zarr (0) | 2026.04.03 |
| [React] Cornerstone3D์์ NIfTI๋ฅผ ์ด๋ค๋ฉด? 1024ร1024 ํด์๋๊น์ง (0) | 2026.04.03 |