Protocol tham chiếu

Từ DICOM đến EAT — và cách làm nhãn Gold

EAT là mỡ nằm bên trong túi màng ngoài tim. "Định vùng" thực chất chỉ là vẽ đúng ranh giới màng ngoài tim; phần "tính" — đếm voxel có HU trong cửa sổ mỡ — là deterministic, giống hệt nhau cho mọi phương pháp. Nhãn gold khác nhãn tự động ở đúng một bước: ai vẽ cái túi.

EAT = mỡ trong túi màng ngoài tim Không tính mỡ ngoài túi (paracardial) Cửa sổ mỡ −190…−30 HU
Ba lát CT axial: ảnh gốc, túi màng ngoài tim viền xanh, EAT màu hổ phách trong túi
Hình thật từ một ca (lát axial). A — lát CT (cửa sổ soft-tissue), thấy lá màng ngoài tim. B — túi màng ngoài tim (viền xanh, Bước 3). CEAT (hổ phách) = voxel có HU ∈ [−190, −30] bên trong túi (Bước 4). Các đám amber là mỡ ngoại tâm mạc thật quanh tim.
Nội dung
  1. Gold vs Silver — khác đúng một chỗ
  2. Luồng đầy đủ (6 bước)
  3. Chi tiết từng bước & tham số
  4. Làm trong 3D Slicer — Segment Editor
  5. Nối vào plugin VC-EAT Flow
  6. Cải thiện — clip sac theo tim
  7. Tài liệu & Video học

AGold vs Silver — khác đúng một chỗ

GOLD · chuẩn tham chiếu

Chuyên gia vẽ tay túi

Radiologist vẽ viền màng ngoài tim thật trên từng lát → túi đúng giải phẫu. Tốn công, nhưng là chuẩn để đối chiếu.

Bước khác biệt: 3 · vẽ tay. Phần còn lại y hệt silver.

SILVER · proxy tự động

Máy dựng túi rồi nong

nnU-Net / TotalSegmentator ra tim → nong margin thành túi gần đúng. Nhanh (~½ phút/ca) nhưng over-inclusive ~1.6× tim, lẫn ít mỡ ngoài túi.

Đang dùng trong pipeline · chưa dùng lâm sàng tới khi validate.

Bước 1, 2, 4, 5, 6 giống hệt nhau cho cả gold và silver. Chỉ Bước 3 (túi màng ngoài tim) là khác: vẽ tay vs tự động.

BLuồng đầy đủ

1
Chuẩn hoá ảnh
2
Phạm vi giải phẫu
3 · quyết định
Túi màng ngoài tim
4
Lấy EAT trong túi
5
Định lượng
6
QC 2 người đọc

Ở Bước 3: gold = chuyên gia vẽ tay viền màng ngoài tim; silver = máy dựng túi tự động. Đó là điểm rẽ duy nhất.

CChi tiết từng bước & tham số cố định

1 · Chuẩn hoá ảnh (DICOM → volume)

CT tim không cản quang (calcium-score) là chuẩn kinh điển cho EAT; CCTA cản quang dùng được nhưng HU mỡ dịch nhẹ. Đảm bảo ảnh ở Hounsfield thật (nước ≈ 0, khí ≈ −1000), không windowing phá HU.

2 · Phạm vi giải phẫu (giới hạn trên–dưới)

Chỉ vẽ & tính trong đoạn có màng ngoài tim. Cố định mốc để tái lập giữa các ca & người đọc.

3 · GOLD — vẽ tay túi màng ngoài tim

Phần làm nên "gold". Trên từng lát axial trong phạm vi Bước 2, chuyên gia vẽ đường viền màng ngoài tim (đường mờ, mảnh, cong bao quanh tim). Đường khép kín này = túi màng ngoài tim. Chi tiết thao tác ở mục 3D Slicer bên dưới.

4 · Lấy EAT bên trong túi (deterministic)

Trong túi, EAT = voxel có HU nằm trong cửa sổ mỡ. Trong Slicer: dùng Threshold ra mask "fat" rồi giao (intersect) với mask túi.

EAT_voxel = (voxel ∈ túi màng ngoài tim) AND (−190 ≤ HU ≤ −30)

5 · Định lượng

Từ mask EAT: số voxel N, thể tích 1 voxel V = sx·sy·sz mm³.

EAT = N × V ÷ 1000 mL (cm³) — chỉ số chính
mean/STD HU độ suy giảm mỡ — marker chất lượng/viêm
fat-fraction = N_EAT ÷ N_túi × 100 %
khối lượng ≈ EAT_mL × 0.92 g/mL (tuỳ chọn)

6 · QC & vì sao mới gọi là "gold"

Nhãn chỉ là gold khi tái lập được:

Chính sự đồng thuận giữa người đọc (không phải máy) biến nhãn thành "gold". Ghi lại phiên bản SOP (pha, mốc giải phẫu, cửa sổ HU) cho mỗi bộ nhãn.

DLàm trong 3D Slicer — Segment Editor

Vẽ túi màng ngoài tim (Bước 3) hiệu quả — quy trình 6 thao tác:

  1. Tạo segment cho túi. Mở Segment Editor, chọn volume CT làm Master. Tạo Segmentation mới, thêm segment "Pericardium sac".
  2. Bật cửa sổ nhìn rõ màng. Đặt window/level ~ W 350 / L 40 (soft-tissue), phóng to để thấy rõ lá màng ngoài tim.
  3. Vẽ viền cách quãng. Dùng Draw vẽ đường màng ngoài tim khép kín, chỉ trên mỗi ~5–10 mm (ví dụ vẽ 1 lát, bỏ 4 lát).
  4. Nội suy giữa các lát. Dùng Fill between slices để điền các lát ở giữa từ những viền vừa vẽ.
  5. Duyệt lại & chỉnh tay — bắt buộc. Cuộn qua từng lát nội suy, sửa chỗ sai bằng Paint / Erase. Đừng tin nội suy mù — đây là điểm quyết định chất lượng gold.
  6. Khép kín & cắt phần thừa. Dùng Scissors cắt phần lồi ra ngoài; đảm bảo viền khép kín để "trong túi" xác định được. Lưu túi hoàn chỉnh.
💡 Nối vào phép tính: không cần tự giao threshold bằng tay. Về module VC-EAT Flow, Bước 3 chọn Sac source = Manual → chọn segmentation túi vừa vẽ → Run. Plugin tự chạy Bước 4–5 (đếm HU −190…−30, thể tích, mean HU) trên đúng túi gold của bạn.
Segment Editor Segmentation: EAT-gold Master volume: CT Pericardium sac EFFECTS Threshold Paint Draw ★ Erase Scissors ★ Islands Logical Margin Fill between slices ★ ★ = 3 công cụ dùng để vẽ túi màng ngoài tim Draw → Fill between slices → duyệt lại → Scissors Axial · vẽ viền màng ngoài tim viền xanh = túi · đám vàng = mỡ EAT
Sơ đồ giao diện Segment Editor. Ba công cụ viền vàng là những thứ dùng ở Bước 3: Draw vẽ viền cách quãng → Fill between slices nội suy → duyệt lại từng lát → Scissors cắt phần thừa. Khung phải minh hoạ viền màng ngoài tim (xanh) bao mỡ EAT (vàng).
Tái tạo 3D khối mỡ EAT màu hổ phách ở hai góc nhìn
Kết quả 3D (hình thật). Khối mỡ EAT tái tạo 3D ở hai góc — phân bố mỡ ngoại tâm mạc bao quanh tim; các "lỗ" là chỗ buồng tim / mạch máu (không phải mỡ).

📸 Ảnh thật từ Segment Editor (chạy bằng script)

Bộ ảnh dưới đây chụp trực tiếp trong 3D Slicer bằng script scripts/slicer_eat_demo.py — nó tự dựng scene, mở Segment Editor và chụp từng bước.

3D Slicer 4-up hiển thị CT tim với cửa sổ soft-tissue
Bước 1 — CT trong Slicer. Layout 4-up (axial · sagittal · coronal · 3D), cửa sổ soft-tissue W350/L40.
Segment Editor với segment Pericardium sac phủ xanh trên tim
Bước 3 — túi màng ngoài tim trong Segment Editor. Segmentation "EAT-gold", segment "Pericardium sac" (xanh). Cột trái là bảng công cụ (Draw, Scissors, Threshold…).
Công cụ Threshold trong Segment Editor đặt khoảng -190 đến -30 HU
Bước 4 — công cụ Threshold −190…−30 HU. Chọn ngưỡng cửa sổ mỡ để giữ voxel mỡ bên trong túi.
Kết quả EAT màu hổ phách bao quanh tim trong 4-up và 3D
Bước 4 (kết quả) — EAT (hổ phách). Các đám mỡ EAT trong túi, hiện ở cả 2D lẫn 3D. Sau đó Segment Statistics ra thể tích & mean HU.

ENối vào plugin — cùng một phép đếm

Plugin tự động hoá Bước 4–5 cho bất kỳ túi nào. Nên nó làm được cả gold lẫn silver — chỉ khác nguồn túi. Vì phép đếm HU giống hệt, EAT_gold và EAT_silver so sánh trực tiếp → đó là cách validate model.

🔌 Dùng plugin — quy trình 4 bước (ảnh thật)

Chụp trực tiếp trong 3D Slicer: module VC-EAT Flow: EAT in 4 steps. Mỗi bước để lại một segment xem/sửa được; bước cuối in báo cáo.

Bước 1: chọn Input CT trong panel VC-EAT Flow
Bước 1 — Input CT. Cardiac → VC-EAT Flow, chọn volume CT cần phân tích.
Bước 2: sau khi Auto-crop
Bước 2 — ② Auto-crop. Cắt FOV rỗng (lossless); tick Use cropped volume as Input. Dòng dưới nút báo số voxel trước → sau.
Bước 3: tách riêng vùng tim, 541.4 mL
Bước 3 — ③ Extract HEART (GPU). TotalSegmentator full-resolution tách chỉ vùng tim (đỏ) — không xương/phổi/cơ quan khác — rồi dọn hậu kỳ (lấp lỗ, bỏ mảnh rác). Kết quả: 541.4 mL, xem & QC ngay.
Bước 3: CT chỉ còn vùng tim sau khi crop 20mm
Bước 3 — ✂ Crop CT to heart only. Cắt volume theo tim + lề 20 mm và xoá mô ngoài lề thành khí: 72.1M → 63.9M voxel (−11%), xoá 28.7M voxel xương sườn/phổi/cột sống. Lề 20 mm giữ nguyên 100% mỡ EAT.
Bước 4: sac + EAT, kết quả 76.0 mL
Bước 4 — ④ Run: Sac + Quantify EAT. Dựng túi màng ngoài tim (xanh) bằng VC-EAT model rồi clip theo chính tim của Bước 3 (lề 8 mm), đếm mỡ HU ∈ [−190, −30]. Kết quả: EAT = 76.0 mL · mean −82 HU.
Overlay EAT 2D và 3D
Show EAT (2D + 3D). Mỡ EAT (hổ phách) trong túi, hiện ở cả lát cắt và 3D. Bấm 💾 Save segments để lưu tái dùng.

📦 Output — plugin tạo ra những gì

Trong scene SlicerFile khi bấm 💾 Save segments
🖼 CT gốc + CT đã crop<case>_CT_heart_only.nii.gz
Tim (chỉ vùng tim) — mL<case>_heart.seg.nrrd
CT chỉ vùng tim (đã xoá mô ngoài)
Túi màng ngoài tim — mL<case>_sac.seg.nrrd
EAT (+ mesh 3D) — mL<case>_EAT.seg.nrrd
📊 Bảng chỉ số<case>_EAT_metrics.csv

Báo cáo (panel Output) gồm: thể tích tim / túi / EAT (mL), mean ± sd HU, fat-fraction (%), mức clip đã áp, cửa sổ mỡ, số voxel — kèm cảnh báo proxy (silver).

🎬 Video demo — quy trình 4 bước

Demo thật: chạy VC-EAT Flow 4 bước trong 3D Slicer — Input CT → Crop → tách tim + CT heart-only → Sac + EAT. (Không phát được? Tải: vceat_4step_demo.webm)
Mục tiêuNguồn túi (Bước 3)Ghi chú
GOLDVẽ tay ở Segment Editor → Sac source = ManualTúi do chuyên gia vẽ; plugin chỉ đếm HU deterministic.
SILVERSac source = VC-EAT model (GPU ~½ phút)Túi tự động; dùng để chạy hàng loạt.
ValidateVẽ gold N ca → chạy Manual → so với model trên cùng caBáo cáo sai số EAT + Dice một cách trung thực.
Bước "segment buồng tim" (TotalSegmentator) KHÔNG bắt buộc để tính EAT — nó chỉ để QC nhìn giải phẫu. Quy trình tối thiểu: CT → (Crop) → túi (gold/silver) → EAT.
🔎 Trung thực về proxy: EAT sinh từ túi silver là proxy (túi over-inclusive ~1.6× tim), chưa dùng lâm sàng tới khi validate với nhãn gold. Bản thân phép đếm HU luôn deterministic và giải trình được — thứ cần validate là ranh giới túi, đúng chỗ gold vs silver khác nhau.

FCải thiện — clip sac theo tim (đã tích hợp plugin)

Sac silver over-inclusive (~1.6× tim) nên quét cả mỡ ngoài tim (trung thất / paracardial). Plugin giờ luôn tự cắt sac theo "tim + lề": chạy TotalSegmentator heart trong container rồi chỉ giữ sac trong N mm quanh tim (mặc định 8 mm) → bỏ phần vươn ra ngoài. Không cần thao tác gì thêm.

So sánh EAT trước và sau khi clip sac theo tim + lề 8mm
Trước / sau clip (ca thật, lề 8mm). Viền xanh = tim (TotalSegmentator). Clip bỏ phần mỡ vươn ra xa; EAT giảm nhẹ. Con số EAT không "thổi phồng" nhiều như trông thấy vì phần sac dư chủ yếu là máu/mô mềm (không phải mỡ, vốn không đếm).
Chiến lượcSac (mL)EAT (mL)Giảm
Sac gốc (silver)828.674.3
Clip tim +10mm793.771.3−4%
Clip tim +8mm (mặc định)780.770.4−5%
Clip tim +5mm744.863.6−14%
Chỉnh Heart-clip margin nhỏ hơn (5–8mm) nếu muốn chặt hơn — coi chừng cắt mất mỡ epicardial thật. Phần mỡ paracardial dính sát tim thì tự động không tách được; muốn tách đúng vẫn phải dùng Manual (gold).
Đã bỏ bước "Segment HEART" (QC) khỏi plugin vì thừa cho việc tính EAT — clip đã tự chạy TotalSegmentator heart bên trong. Plugin giờ chỉ còn 2 bước: Crop → Sac + EAT.

GTài liệu & Video học

Không có 1 video làm "EAT gold" trọn gói — nhưng công cụ trong các video chính là các nút ở Bước 3 (Draw, Fill between slices, Scissors, Threshold). Cách nhanh nhất: xem video để biết dùng công cụ → áp thông số EAT (−190…−30 HU, W350/L40, vẽ mỗi ~5 lát) theo trang này.

🎥 Video học công cụ (xem trước, dễ theo)

VIDEOBasic Segmentation — Threshold · Scissors · Paint/Draw/Erase
Đúng các nút dùng ở Bước 3. Xem cái này trước.
youtube.com/watch?v=_9J3i883yA4
VIDEOSmoothing + Fill Between Slices
Bước nội suy giữa các lát đã vẽ.
youtube.com/watch?v=4rNRlZy-QCA
VIDEOSegment Editor & Segmentations — tổng quan
Làm quen giao diện Segment Editor.
youtube.com/watch?v=xIts_5fctYg
VIDEOManual segmentation + Thresholding
Vẽ tay và ngưỡng HU cơ bản.
youtube.com/watch?v=ZRYMItzwg8g

❤️ Đúng chủ đề EAT (đọc để hiểu quy trình)

EATSegmentation and epicardial fat measurements with 3D Slicer
Varna Medical Forum (2025) — mô tả đúng cách bán tự động ta đang làm.
journals.mu-varna.bg/…/view/10435
EATDiễn đàn Slicer — "How to segment EAT accurately?"
Kinh nghiệm thực tế: W350/L40, vẽ mỗi 5 lát, −190…−30 HU.
discourse.slicer.org/t/…/17402
EATECR 2021 poster — Semi-Automatic Fat Segmentation in 3D Slicer
Poster hội nghị X-quang châu Âu, có hình minh hoạ.
epos.myesr.org/poster/esr/ecr2021/C-14682

📘 Tài liệu chính thức (tra cứu từng công cụ)

DOCSegment Editor — tài liệu chính thức
Mọi effect: Draw, Threshold, Scissors, Fill between slices, Masking.
slicer.readthedocs.io/…/segmenteditor.html
DOCImage Segmentation guide — nhập môn
Khái niệm segmentation trong Slicer từ đầu.
slicer.readthedocs.io/…/image_segmentation.html
DOCFill between slices — giải thích & mẹo
Khi Initialize / Apply và cách sửa lát nội suy.
discourse.slicer.org/t/fill-between-slices/6276
DOC3D Slicer Training Compendium
Có bài segment tim từ CT + nhập môn load dữ liệu.
training.slicer.org
Lộ trình gợi ý (≈2 tiếng là làm được): Video #1 (30′, nắm Draw/Threshold/Scissors) → đoạn Fill Between Slices ở video #2 → làm theo Bước 3 trang này với thông số EAT → ra số bằng plugin VC-EAT Flow → Sac source = Manual.