Archive

Archive for April, 2023

Eksplorasi DICOM (3)

April 24, 2023 Leave a comment

Sebelumnya kita sudah bisa mengakses volume citra dengan perintah volread. Analisis volume citra memungkinkan kita mendapatkan informasi yang lebih banyak karena perspektif yang beragam. Ilustrasinya seperti ditunjukkan Gambar 1 yang diperoleh di sini.

Gambar 1. Bidang irisan anatomi manusia

Untuk mendapatkan informasi yang berasal dari gabungan bidang irisan tersebut, kita perlu memahami beberapa istilah berikut.

  • Shape: menunjukkan jumlah baris dan kolom piksel pada irisan tertentu. Pada contoh yang telah digunakan sebelunnya, nilai shape adalah 44, 256, 256
  • Sampling: merupakan kombinasi dua atribut, masing-masing SliceThickness dan PixelSpacing. PixelSpacing merepresentasikan jarak fisis pada pasien dan terdiri dari pasangan nilai numerik, masing-masing adalah row spacing dan column spacing. Row spacing merupakan jarak titik tengah dari 2 baris berurutan. Demikian juga dengan column spacing yang merupakan jarak titik tengah 2 kolum yang bersebelahan. Ilustrasinya ditunjukkan di Gambar 2, yang diperoleh di sini. Sederhananya, parameter PixelSpacing merupakan sampling perangkat scanning terhadap organ tubuh pasien. Semakin kecil pasangan nilai yang direpresentasikan PixelSpacing semakin detil informasi yang diperoleh. Jarak tersebut memiliki satuan mm. Untuk contoh dataset yang sebelumnya digunakan, nilai yang diperoleh adalah sebagai berikut. Dua baris pertama menunjukkan perintah untuk mendapatkan nilainya, yang ditunjukkan pada baris ke-3. WordPress makin bagus (seharusnya), faktanya saya makin kesulitan untuk memformat tulisan di dalamnya. Soal format, LaTex memang gak ada lawannya.
    • d0, d1, d2 = vol.meta['sampling']
    • print("Sampling:\n\t", "Axial=", d0, "mm\n\t", "Coronal=", d1, "mm\n\t", "Sagittal=", d2, "mm")
    • Sampling:
      • Axial= 0.0 mm
      • Coronal= 1.1719 mm
      • Sagittal= 1.1719 mm
  • Pixel Aspect Ratio: merupakan perbandingan antara nilai-nilai yang diperoleh sebelumnya, yaitu d0, d1 dan d2. 3 baris pertama adalah formula untuk mendapatkan aspect ratio, sedangkan baris ke-4 adalah hasil perhitungannya untuk kasus yang sebelumnya digunakan. Ilustrasi dari aspect ratio disajikan pada Gambar 3 yang diperoleh di sini.
    • axial_asp = d1/d2
    • sagittal_asp = d0/d1
    • coronal_asp = d0/d2
    • Pixel Aspect Ratio:
      • Axial= 1.0
      • Coronal= 0.0
      • Sagittal= 0.0
  • Fields of View: diperoleh dengan mengalikan parameter bersesuaian yang diperoleh dari sampling dan pixel aspect ratio. Baris pertama adalah perintah yang digunakan untuk menampilkan nilai Fields of View. Sedangkan baris ke-2merupakan hasil eksekusi dari perintah di baris pertama.
    • print("Field of View:\n\t", "Axial=", n0*d0, "mm\n\t", "Coronal=", n1*d1, "mm\n\t", "Sagittal=", n2*d2, "mm")
    • Pixel Aspect Ratio:
      • Axial= 1.0
      • Coronal= 0.0
      • Sagittal= 0.0
Gambar 2. Ilustrasi sampling pada DICOM
Gambar 3. Ilustrasi dari parameter pixel aspect ratio

Sementara saya cukupkan dulu hasil belajar kali ini. Perlu perenungan lebih panjang untuk bagian ini, terkait peruntukannya dalam analisis citra RT. Hal ini disebabkan karena:

  • Slice Thickness dijelaskan sebagai simply the nominal slice thickness in mm. Belum dapat dipahami apa maksud “nominal” dalam definisi tersebut.
  • Di Gambar 1 ada tiga jenis slice, masing-masing sagittal, coronal dan transverse. Sedangkan ketika membahas tentang sampling, yang muncul justru Axial, bukan Transverse. Menyamakan keduanya juga belum bisa dipastikan karena belum ditemukan pernyataan pendukung dari sumber ini.
  • Contoh nilai sampling dan saya gunakan juga berbeda, khususnya slice Axial. Apakah jika sampling bernilai 0 maka detil organ tubuh diperoleh lengkap tanpa sampling, juga belum bisa dipastikan.

Selamat beristirahat….

Pekan ke-3 April 2023

April 18, 2023 Leave a comment

17 April 2023

  • Menyiapkan bahan tayang untuk diskusi pekanan PRSDI, praktis seharian.

18 April 2023

Secara formal, aktifitas pekan ini hanya 2 hari karena akan datang masa cuti bersama. Tapi aktivitas review akan tetap dilakukan tiap harinya dan akan dicatat di laman lain. Selamat Idul Fitri….

Categories: Weekly Report

Eksplorasi DICOM (2)

April 18, 2023 Leave a comment

Kita lanjutkan lagi belajarnya, masih dari laman ini. Setelah kita bisa mengakses metadata yang terdapat pada sebuah file DICOM, seperti yang pada pembelajaran sebelumnya diwakili oleh variabel img, maka melalui varibel tersebutlah, sebuah citra direpresentasikan. Perhatikan Gambar 1 berikut.

Gambar 1. Citra yang terbentuk dari sebuah file DICOM

Gambar 1 tersebut diperoleh dari script berikut kelanjutan dari script sebelumnya di laman ini.

from matplotlib import pyplot as plt
plt.imshow(img, cmap='gray')
plt.axis('off')
plt.title('Axial Slice')
plt.show()

Sejumlah file DICOM juga dapat dikumpulkan dalam satu directory, yang masing-masingnya mewakili satu slice atau frame dari seorang pasien. Dengan script berikut, kita bisa mengakses sejumlah file DICOM tersebut sekaligus. Sekali lagi, script ini adalah kelanjutan dari script sebelumnya di lama ini.

vol=imageio.v2.volread(lokasi[0], 'DICOM')
plt.imshow(vol[10,:,:], cmap='gray')
plt.axis('off')
plt.title('Axial Slice')
plt.show()

Variabel vol[10,:,:] menunjukkan file DICOM ke-11 dari directory tersebut. Dan Gambar 2 menunjukkan file DICOM ke-11.

Ganbar 2. Penampakan file DICOM ke-11 dari lokasi pertama yang disebutkan pada metadata.csv.

Perlu diketahui bahwa nilai yang terkandung dalam matriks yang akhirnya muncul sebagai Gambar 1 dan Gambar 2 tersebut merupakan nilai Housfield Unit (HU). HU adalah nilai tak berdimensi yang umum digunakan dalam Computed Tomography (CT). Nilai HU mengacu pada koefisien atenuasi linear CT pada air dengan suhu 0 derajat Celcius dan tekanan 1 juta Pascal.

Sampai di sini dulu ekplorasinya, karena sekali lagi, waktu berbuka sudah dekat. Terlebih, beberapa hali lalu saya dibuat bingung dengan perintah volread yang harusnya menerima 2 argumen, dan argumen kedua langsung disebutkan nilainya, tidak perlu nama variabel argumennya.

Categories: DICOM, Tutorial

Eksplorasi DICOM

April 14, 2023 1 comment

Tulisan ini adalah media belajar saya terkait eksplorasi berkas DICOM (Digital Imaging and Communication in Medicine). Jika disimpan di laptop, maka pasti akan sulit mencarinya, sebab ini bukan kali pertama. Dan karena ada keperluan mendesak untuk menguasainya, jadilah sub kategori baru di buku saku ini.

Eksplorasi ini saya mulai dari sini, sebuah blog yang sejauh ini menyajikan detil informasi terkait apa itu DICOM, apa saja yang disimpan di dalamnya, dan bagaimana mengambil informasi tersebut. Selain Imaging, DICOM mengandung informasi lain yang dapat menjadi media komunikasi antar modalitis dalam infrastruktur kesehatan. Informasi tersebut dikenal sebagai metadata yang antara lain berisi:

  • Atribut terkait pasien, seperti nama, usia, gender, dll.
  • Atribut terkait modaliti (CT, MRI, PET, dll), seperti manufaktur, waktu akuisisi data, dll
  • Atribut terkait citra, seperti bentuk, sampling, aspect ratio, pixel data, dll

Atribut lainnya dari DICOM dijelaskan di sini. Dan luar biasanya, ada banyak sekali atribut DICOM di sana.

Nah, di blog acuan, penulis menyediakan contoh yang ia simpan di sini. Sementara, saya mencoba untuk membaca file DICOM yang tersedia di sini dan sudah selesai saya unduh. Tetapi, struktur filenya berbeda. Jadi saya explore metadata.csv yang disertakan ketika pengunduhan dilakukan. Pada file tersebut, minimal ada 2 atribut penting yang bisa langsung saya pahami, masing-masing adalah File Location dan Number of Images. Dengan script berikut, saya bisa membuat titik awal ekplorasi yang sama dengan contoh di sini. Sayangnya, saya kehilangan formating untuk script yang memungkinkan kita merujuk pada baris-baris perintah karena ada penanda urutannya.

import pandas as pd
import imageio
import os

data=pd.read_csv('metadata.csv')
lokasi=data['File Location']
jumlah=data['Number of Images']
images=[]
for i in os.listdir(lokasi[0]):
    images.append(i)
    
img=imageio.v2.imread(lokasi[0]+'/'+images[0])
img.meta

Penjelasannya adalah sebagai berikut:

  • 3 baris pertama digunakan untuk meng-import pustaka
  • Baris ke-4 digunakan untuk membaca file metadata.csv yang berisi keterangan tentang lokasi directroy dan file DICOM yang ada di dalamnya. Karena itu, pastikan untuk menjalankan script ini di lokasi yang sama dengan file metadata.csv berada.
  • Baris ke-5 digunakan untuk mengambil kolom yang header-nya adalah File Location dan disimpan dalam variabel lokasi. Di dalam variabel lokasi yang ber-type list, terdapat daftar lokasi directory yang bisa dirujuk dengan nomor indeks.
  • Baris ke-6, sama seperti perintah baris ke-5 tetapi digunakan untuk menyimpan informasi jumlah file yang terkandung di dalam directory yang bersesuaian pada kolom File Location. Ini hanya diperlukan untuk memastikan apakah benar jumlah file yang dijelaskan pada file metadata.csv sama seperti jumlah file yang tersimpan. Pada kasus ini sama.
  • Baris ke-7 digunakan untuk menyimpan nama-nama file pada directory yang akan dituju sehingga dapat dengan mudah dirujuk.
  • Baris ke-8 dan 9 digunakan untuk menyimpan nama file ke dalam list yang variabelnya dideklarasikan di baris ke-7
  • Baris ke-10 digunakan untuk mengakses file pertama dalam list
  • Baris ke-11 digunakan untuk menampilkan informasi metadata dari file DICOM pertama yang kita baca. Metadata ini tersusun dalam bentuk dictionary.

Sementara kita cukupkan sampai di sini, karena waktu berbuka sudah dekat….

Categories: DICOM, Python

Pekan ke-2 April 2023

April 14, 2023 Leave a comment

10 April 2023

  • Akhir pekan kemarin, 3 dataset untuk radiotherapy telah berhasil diunduh lengkap.
  • Review artikel di jurnal DMAME. Sebelumnya agak membingungkan karena laman review hanya diperuntukkan bagi 1 artikel, sementara artikel yang diajukan ada 2. Akhirnya saya memutuskan untuk me-review artikel yang tertera pada judul laman. Jurnal yang ‘aneh’ menurut saya.
  • Memperbaiki script untuk solubility, terutama untuk mengubah format angka pada grafik prediksi seperti diminta bu Ratna
  • Diskusi pekanan grup astronomi
  • Diskusi pengajuan proposal RIIM untuk riset provenance. Hari ini memasuki tahap akhir review bersama seluruh anggota tim sebelum diajukan ke ka. PR untuk review lanjutan.

11 April 2023

  • Diskusi dengan bu Ratna terkait script untuk perhitungan regresi. Kendala sepertinya berasal dari konfigurasi PATH di IDE Visual Studio.
  • Memperbaiki script regresi untuk radiotherapy Ramlah dengan melibatkan normalisasi. Sementara error untuk beberapa model yang tanpa normalisasi membaik. Tugas ini akan dilanjutkan dengan pemilihan fitur yang dikombinasikan dengan normalisasi.
  • Diskusi rutin radiotherapy yang untuk hari ini bisa dihadiri pak Dwi. Kata kunci yang sangat bermanfaat dari pak Dwi adalah penggunaan multimodal banyak dilakukan pada organ dengan soft tissue seperti organ head and neck. Dijelaskan pak Dwi, penggunaan data multimodal pada organ dengan soft tissue akan memudahkan dokter melakukan contouring. Julfa juga menginformasikan tools NVIDIA-CLARA sebagai salah satu tools yang digunakan untuk segmentasi dan terintegrasi dengan MONAI. Ini akan jadi tugas Julfa untuk melakukan eksplorasi. Sedangkan saya akan ambil tugas di plastimatch. Diskusi selanjutnya direncanakan dilakukan tanggal 2 Mei 2023.
  • Diskusi pengajuan proposal RIIM untuk riset provenance. Diskusi kemarin ternyata masih menyisakan beberapa tugas, khususnya RAB

12 April 2023

  • Webinar PRSDI edisi pertama membahas tentang peran data science pada dunia pendidikan dan riset. Presentasi yang menarik buat saya adalah presenter ke-2, mba Lia Sadita, yang menyampaikan Educational Process Mining. Sumber datanya adalah log aktivitas di LMS. Sejumlah insight yang bermanfaat terhadap PBM dapat diperoleh dari proces mining tersebut.
  • Diskusi pekanan LCA. Setelah pekan lalu absen, hari ini saya ikut lagi diskusinya. Hari ini dibahas tentang rencana publikasi. Sementara saya dan pak Zaenal mengajukan diri untuk melakukan literature review. Diskusi berikutnya membahas tentang datasets. Disampaikan pak Agam bahwa dataset yang sudah ada baru berasal dari 3 negara (berarti ada 3 data), masing-masing Ghana, Indonesia dan Pantai Gading. Tetapi, fitur data tersebut ada di kisaran 120-an. Itupun tidak semua 120-an fitur memiliki nilai.

13 April 2023

  • Saya diminta bu Ratna men-generate plot 3D hasil regresi dari 3 parameter. Ternyata saya lupa menyimpan script yang dulu pernah saya gunakan….
  • Rapat ASEAN AI, pembahasannya lebih banyak ke pembicara yang akan diundang dan menyesuaikannya dengan jadwal acara.
  • Mengikuti BRIN-NVIDIA AI Training Series #1. Saya terlambat hadir sekitar 25 menit. Itupun karena saya terlempar dari rapat ASEAN AI, jadi langsung switch aja,he3…….
  • Mengikuti webinar INAPR yang kebetulan pematerinya membahas tentang hal ini dan ini. Materi kedua sangat menarik karena terkait dengan apa yang seang kami kerjakan di radiotherapy.

14 April 2023

  • Melanjutkan tugas dari bu Ratna. Akhirnya tugas tersampaikan ke beliau sekitar jam 13:00. Kita tunggu perbaikan dari bu Ratna….
Categories: Weekly Report

Pekan ke-1 April 2023

April 6, 2023 Leave a comment

3 April 2023

  • Diskusi pekanan grup astronomi dan sistem kompleks. Saya pribadi tertarik dengan rencana riset kompresi citra satelit, hanya saja pak Sofyan menyampaikan bahwa kompresinya lossy, yang berarti ada informasi yang hilang.
  • Mereview artikel DMAME yang rasanya makin berat, padahal harus selesai akhir pekan ini.

4 April 2023

  • Diskusi pekanan radiotherapy. Untuk ke-sekian tanpak pak Dwi. Saya mentargetkan pemenuhan output RP dengan publikasi literature review. Kata kuncinya: multimodal, radiotherapy, segmentation. Metadata artikelnya sudah diperoleh dari scopus dan web of science, meski sepertinya ada yang tumpang tindih ada artikel yang diindex keduanya.
  • Dataset yang direncanakan pekan lalu belum terunduh, karena pertimbangan ukuran. Sempat mencoba dataset ini, yang ukurannya lebih kecilpun gagal, ada beberapa item yang error dan unduhan tidak dapat diulang dari kondisi terakhir.

5 April 2023

  • Rapat perdana panitia ASEAN AI. Entah siapa yang mengusulkan saya untuk terlibat dalam event se-“mewah” ini. Saya senang sekali dilibatkan dalam event bertema AI, berskala global, bahkan dimasukkan sebagai “orang dalam”. Dalam rapat itu, saya diminta menjadi anggota tim pengarah. Meski belum tahu apa tugasnya, saya terima dengan senang hati karena bisa jadi media saya belajar.
  • Diskusi pekanan riset LCA tidak bisa saya ikuti karena waktunya bersamaan dengan rapat panitia ASEAN AI. Tapi, model yang saya peroleh dengan dataset pak Agam tidak mengalami perubahan signifikan meski sudah dinormalisasi dan diseleksi fiturnya, masing-masing 10 dan 5 fitur.
  • Tidak sengaja ketemu pak Heru Prasetyo saat di Gd. Manajemen. Sayapun menyampaikan rencana literature review terkait multimodalitas. Beliau antusias dan menginfokan tool plastimatch.

6 April 2023

  • Diskusi pengajuan proposal RIIM utk riset provenance. Saya diminta menambahkan isi proposal yang “sudah baku” setalah fixed dari pak Zaenal.
  • Metadata dari artikel terkait plastimatch juga sudah terkumpul, dari scopus dan WOS.
Categories: Weekly Report