Pendekatan canggih untuk mendeteksi batas menggunakan dinding kapal sebagai contoh

Informasi menarik


Gambar di bawah ini menunjukkan rekonstruksi jantung tiga dimensi, yang diperoleh sebagai hasil karya tomograf modern:


Untuk skala, ketebalan bola aorta adalah 3,2 cm, pikirkan saja! Namun, ketika orang memiliki masalah jantung karena pembuluh darah, maka, sebagai suatu peraturan, kita tidak berbicara tentang masalah besar seperti itu. Gambar tersebut menunjukkan bahwa jantung dikelilingi oleh pembuluh yang lebih kecil, dan beberapa di antaranya bercabang langsung dari arteri besar. Ini adalah apa yang disebut arteri koroner yang memberi makan jantung secara langsung dengan darah. Jika penyempitan lumen (stenosis) terjadi pada mereka, misalnya, karena pembentukan kalsium, maka aliran darah berkurang. Ketika stenosis diucapkan, nekrosis jaringan terjadi, dengan kata lain serangan jantung. Selanjutnya, saya akan berbicara tentang pendekatan kami untuk menghitung batas pembuluh darah, yang sebagai hasilnya memungkinkan Anda untuk secara otomatis menemukan penyempitan dan memberi mereka perkiraan.

Untuk memahami materi, Anda perlu memiliki pemahaman yang dangkal tentang volume, voxel dan intensitasnya. Anda bisa mengetahuinya dengan membaca awal artikel ini .

Untuk mengevaluasi penyempitan kapal, kita perlu mengetahui lumen kapal atau batas internalnya. Untuk melakukan ini, setidaknya deteksi semua kalsium. Kami juga menemukan batas luar, karena memungkinkan untuk memperkirakan ketebalan dinding, yang juga berguna. Untuk memulai, mari kita lihat skema deteksi batas penuh, dan kemudian kita akan menganalisis setiap tahap secara rinci:


Merencanakan garis tengah


Tahap yang paling sulit dalam hal implementasi (setidaknya butuh waktu paling lama). Metode ini didasarkan pada penggunaan matriks Hessian (Segmentasi Multi-Skala Kapal Menggunakan Peningkatan Matriks Hessian). Lebih detail dalam artikel yang sudah disebutkan.

Mengiris


Kami hanya memiliki jalur sentral, dan kami membutuhkan intensitas voxel yang bergantung secara spasial yang dapat dengan mudah dikerjakan. Untuk mendapatkannya, “tumpukan” irisan sedang berlangsung. Sebagai permulaan, titik-titik ditetapkan pada jarak tetap pada garis tengah. Kemudian tegak lurus dibangun dari setiap titik . Setelah adalah tegak lurus kedua . Dimana - Arah garis tengah pada suatu titik. Kedua tegak lurus dinormalisasi. Di setiap titik vektor garis tengah membentuk sistem koordinat 2d. Jadi, irisan terbentuk:


Posisi voxel didefinisikan sebagai dimana disini Apakah koordinat sebenarnya dari voxel, k adalah angka irisan. Formula terbalik untuk koordinat nyata: . Saat pindah ke sistem koordinat baru, ruang yang dibentuk oleh irisan disederhanakan:


Apa yang kita butuhkan!

Konstruksi perbatasan eksternal kapal


Mari kita lihat diagram:


Kami memotong setumpuk irisan yang diperoleh pada tahap sebelumnya menjadi delapan bidang (mirip dengan memotong kue) dan kami melakukan semua perhitungan dalam ruang pesawat:

Potong


Jika Anda menampilkan nilai normal dari intensitas voxel yang mengenai bidang pemotongan, kami mendapatkan gambar berikut:


Untuk mendeteksi batas-batas kapal, pendekatan klasik (deteksi tepi dengan gradien) digunakan bersamaan dengan pencarian jalur. Skema:


1. Terapkan pemulusan Gaussian dengan nilai kecil untuk menekan kebisingan:
Untuk titik dengan koordinat :
dimana mengembalikan nilai intensitas pada suatu titik ; r biasanya mengambil nilai ( - mengumpulkan); - koefisien perataan.

2. Pada setiap titik kami menemukan gradien dan nilainya, perhitungan dilakukan dengan nilai intensitas yang dihaluskan:
,
dimana - turunan pribadi. Mereka ditemukan dengan metode beda hingga:

,
dimana - Intensitas pada suatu titik setelah dihaluskan.
Selanjutnya kita perlu arah gradien ( Apakah normalisasi vektor) dan nilai gradien ( Apakah panjang vektor)

3. Arah gradien diterjemahkan dalam derajat atau radian:
(atan2 () adalah fungsi dari garis singgung busur dalam C ++, tidak menjadi bingung dengan atan ()), maka kita membulatkan sudut sehingga dapat memiliki 4 nilai dengan peningkatan 45 derajat, mis. atas dan bawah dianggap arah yang sama:

4. Lakukan penindasan yang tidak maksimal. Jika nilai gradien setidaknya di salah satu dari dua titik tetangga (sesuai dengan arah gradien) lebih besar dari atau sama dengan nilai gradien pada titik saat ini, maka titik tersebut tidak dapat menjadi milik batas:


5. Semua voxel yang tersisa dianggap batas. Berdasarkan nilai gradien, ambang batas kalsium (yang tidak segera tersedia) dan kedekatan dengan pusat "vertikal", setiap titik diberi biaya tertentu (semakin terang voxel, semakin tinggi prioritasnya ketika mencari jalan):

Dalam bentuk ini, batas kapal hampir secara unik didefinisikan.

6, 7. Untuk membangun batas, kami menggunakan pencarian untuk path. Poin ekstrim terdekat dengan biaya terendah diambil sebagai awal dan akhir. Untuk mencari jalur, gunakan pencarian pertama yang sederhana, yang memilih titik batas biaya terendah. Lompatan juga tersedia, tetapi harganya tinggi. Batas atas dan bawah kapal dicari secara terpisah, dan kemudian smoothing diterapkan pada mereka:

Hasil


Prosedur ini dilakukan untuk setiap bidang, yang menghasilkan enam belas cincin segmen untuk setiap irisan dalam tumpukan. Cincin-cincin ini membentuk batas luar kapal.

Seperti yang dapat Anda lihat dari gambar, ada area di mana batas terdeteksi salah. Hal ini disebabkan oleh adanya kalsium, yang menghasilkan deteksi batas kalsium daripada batas pembuluh. Untuk mencegah hal ini terjadi setelah deteksi batas pertama, perlu untuk menentukan ambang batas kalsium (lebih lanjut tentang ini nanti), dan kemudian melakukan deteksi batas kedua, mengabaikan voxel terkait dengan kalsium. Lalu kita dapatkan:

Hasil yang bagus

Deteksi ambang batas internal, batas eksternal dan ambang batas kalsium


Setelah batas eksternal diketahui, kita perlu mengumpulkan informasi statistik. Yakni, intensitas semua voxel yang ada di dalam kapal.

Deteksi ambang batas


Sekarang perhatikan maksimalisasi algoritma clustering ekspektasi (selanjutnya disebut EM). Mari kita mulai dengan fungsi distribusi normal: ini ditandai dengan ekspektasi matematis dan standar deviasi . Begini cara mereka memengaruhi tipe distribusi:



Misalkan kita memiliki data (titik) yang berasal dari sumber "kuning" dan dari sumber "biru":


Kemudian, dengan menggunakan rumus standar, kita dengan mudah menemukan mean dan standar deviasi untuk setiap sumber. Rumus untuk sumber "a":




Tetapi bagaimana jika kita mengetahui jumlah sumber, tetapi tidak tahu titik mana yang berasal dari sumber yang mana? Bagaimana jika kita memiliki gambar seperti itu?


Jika seseorang datang dan memberi tahu kami parameter distribusi, maka kami dapat dengan mudah menghitung probabilitas setiap titik milik masing-masing sumber. Probabilitas bahwa titik tersebut berasal dari sumber "a":

dimana




Dan jika kita perlu menghitung parameter sumber, mengetahui probabilitasnya:



Dengan demikian, lingkaran setan diperoleh: jika kita mengetahui parameter dari sumber, kita akan menghitung titik mana yang berasal dari sumber mana, tetapi kita tidak tahu parameternya. Dan jika kita tahu titik mana milik sumber mana, kita akan menghitung parameternya, tetapi kita tidak tahu titik mana milik sumber mana. Menyeimbangkan antara fakta-fakta ini persis seperti yang dilakukan algoritma EM.

Pada saat start-up, EM menerima beberapa parameter yang telah ditentukan untuk sumber, yang dapat dipilih secara acak. Tentunya, jika parameter diketahui, maka kita dapat menghitung probabilitas setiap titik milik masing-masing sumber. Sekarang setelah probabilitas diketahui, kita dapat menghitung parameter baru yang lebih akurat. Kemudian mulai dari awal lagi, tetapi dengan parameter baru. Setelah setiap siklus, parameter sumber menjadi lebih akurat.

Bagaimana kita bisa menggunakan pengetahuan ini dalam kaitannya dengan kapal? Mari kita lihat struktur salah satunya:

Dalam diagram, titik ini biasanya dihilangkan, tetapi formasi lemak dan kalsium juga ada di dalam pembuluh. Dengan demikian, setiap voxel akan menjadi milik salah satu jaringan. Setelah percobaan, ternyata cukup membuat divisi berikut:

- gendut
- dinding # 1
- dinding # 2
- media kontras
- kalsium

Distribusi intensitas voxel dalam setiap kasus adalah normal. Yaitu kami memiliki semua yang kami butuhkan untuk menggunakan EM untuk menemukan parameter dari setiap sumber.

Hasilnya cukup bagus

Garis hijau adalah histogram intensitas, garis merah adalah model matematika yang dihasilkan.

Sekarang kita tahu parameter dari masing-masing sumber, kita dapat menghitung ambang - nilai intensitas, di persimpangan yang, keanggotaan voxel berubah dari satu sumber ke sumber lainnya. Kami tertarik pada:

1. Ambang batas batas luar kapal. Jika intensitas voxel di bawah nilai ini, maka dianggap bahwa itu bukan milik kapal sama sekali;

2. Ambang batas batas dalam kapal. Jika intensitas voxel lebih besar dari nilai ini, maka itu
mengacu pada lumen kapal, yaitu ke campuran darah dan media kontras;

3. Ambang batas kalsium. Jika nilai intensitas voxel lebih besar dari nilai ini, maka itu mengacu pada kalsium.

Konstruksi perbatasan bagian dalam kapal


Seperti biasa, mari kita mulai dengan diagram, perhitungan dilakukan untuk setiap irisan.



Jika Anda menampilkan data secara visual sesuai dengan ambang yang diperoleh pada langkah sebelumnya, kami mendapatkan gambar berikut:



Warna merah adalah dinding kapal. Warna hijau - izin. Putih adalah kalsium.

Hal pertama yang menarik perhatian Anda adalah kalsium "menggantung", yang tidak berdampingan dengan dinding mana pun. Ini dianggap normal dan timbul karena smoothing yang diterapkan oleh tomograph itu sendiri.

Pertama, Anda perlu mendapatkan batas sesuai dengan ambang, dan untuk ini algoritma marching squares digunakan. Bisa dikatakan, lewat dalam dua tahap. Pertama, area dibagi oleh kisi-kisi diskrit, dan kuadrat di mana nilai intensitas lebih besar dari atau sama dengan ambang batas dianggap "positif", sisanya dianggap "negatif".

Setiap kali kita akan berada dalam semacam simpul, dan kita perlu menggambar kontur di sekitar kotak "positif". Untuk membuat keputusan, kita akan mempertimbangkan tanda-tanda empat kotak tetangga: kiri atas, kiri bawah, kanan atas, kanan bawah. Tidak termasuk simetri, kami tertarik pada tiga kasus.

1. Tiga kotak dari satu tanda dan satu berlawanan, pergerakan kontur terjadi secara diagonal:

Contoh


2. Dua kotak dengan tanda yang sama dan dua berlawanan, dan kotak dengan tanda yang sama ada di satu sisi, gerakan konturnya vertikal atau horizontal:

Contoh


3. Dua kotak dengan tanda yang sama dan dua berlawanan, kotak dengan tanda yang sama ditempatkan di sisi yang berlawanan:

Contoh


Ini adalah kasus luar biasa, untuk membuat keputusan, nilai rata-rata intensitas di keempat kuadrat diambil, dan jika lebih besar atau sama dengan ambang, maka pusatnya positif, dalam kasus lain - negatif. Penting juga simpul mana yang saat ini ada:

Contoh


Algoritma marching kuadrat secara akurat dan jelas membuat kontur. Dalam contoh di bawah ini, saya sengaja menggeser garis dari tengah sisi sehingga setiap langkah terlihat jelas.

Contoh
Secara khusus, kasus pertama dan kedua:



Untuk setiap bagian kapal, kami menemukan dua kontur utama - ini adalah kontur perbatasan luar dan kontur perbatasan dalam. Kami segera "memotong" kontur luar dengan kontur luar kami yang lain, yang kami temukan di awal artikel dengan mencari jalur. Ini dilakukan untuk mengabaikan cabang-cabang kapal. Kita mengabaikan kontur kalsium yang terlalu jauh dari dinding bagian dalam, seolah-olah mereka tidak ada sama sekali, kita menemukan sisanya dan menggunakannya di masa depan. Jika bagian tengah pembuluh berada di dalam kalsium, maka kami menggesernya ke arah yang paling dekat dengan sirkuit kalsium sampai bagian tengah berada di lumen (di wilayah hijau). Seperti pusat yang diperbarui, saya akan memanggil posisi awal.

Menurut skema, ada dua kasus: sederhana dan kompleks.


Jika posisi awal berada di dalam loop kalsium tertutup (misalnya, jika stent dipasang), maka kami segera menyamakan batas bagian dalam dengan loop ini. Hal-hal lebih rumit ketika pusat berada di luar kalsium. Dalam hal ini, kita perlu memperluas sirkuit awal sehingga lancar mengalir di sekitar kalsium dan batas dalam:


Untuk mencapai hasil yang diinginkan, algoritma khusus dikembangkan berdasarkan ide yang digunakan dalam mesin 2d fisik, khususnya pemecahan tabrakan poligon dan teorema sumbu terpisah.

Dua konsep dasar yang tidak dapat disingkirkan: untuk memotong poligon cembung, vektor mtv (vektor terjemahan minimum) adalah perpindahan terkecil dari salah satu poligon, setelah itu persimpangan berhenti.

Kita juga membutuhkan normalan poligon - dalam 2D ​​mereka tegak lurus ke wajah dan menunjukkan "keluar":

Agar tidak membuat artikel panjang, saya akan menghilangkan sisa detail mengenai mesin fisik. Satu-satunya hal yang saya perhatikan adalah bahwa selama setiap iterasi, setiap titik dalam kontur mengakumulasikan pengaruh gaya pada dirinya sendiri dalam bentuk vektor, dan pada akhir setiap iterasi ia bergeser dengan panjang vektor ini ke arahnya. Pertimbangkan kekuatan:

1. Dua gaya bekerja pada setiap simpul dari kontur awal ke arah simpul-simpul yang bertetangga, dan gaya-gaya tersebut berbanding lurus dengan jarak ke simpul-simpul ini. Ini membuat garis mengecil dan berusaha untuk mempertahankan bentuk membulat;

2. Jika vertex dari kontur samping berada di dalam kontur awal, maka offset sebanding dengan vektor mtv verteks dari verteks diterapkan ke wajah terdekat dari kontur awal;

3. Jika bagian atas kontur awal berada di dalam kontur samping, maka offset sebanding dengan vektor mtv verteks dari titik diterapkan ke bagian atas kontur awal. Ini, bersama dengan paragraf sebelumnya, tidak memungkinkan sirkuit melampaui batas sirkuit lain;

4. Jika case 2 dan 3 tidak berfungsi untuk vertex, maka gaya diberikan padanya dengan arah rata-rata dari dua normals dari permukaan yang berdekatan. Ini memastikan pertumbuhan kontur "luas".

Penting: Anda tidak dapat menggeser titik atau wajah sepenuhnya dengan panjang vektor mtv - itu dikalikan dengan koefisien tertentu dalam kisaran 0,2 hingga 0,8. Koefisien untuk setiap gaya dalam kasus yang tersisa dipilih secara eksperimental.

Berkat pendekatan ini, kami menemukan lumen pembuluh, dengan mempertimbangkan fakta bahwa kalsium tidak berdampingan dengan dinding. Sekarang cukup gabungkan hasil dari semua bagian dan dapatkan batas dalam dan luar kapal:


Ketidakakuratan perbatasan setelah stent disebabkan oleh bifurkasi anomali:


Area perbatasan bagian dalam pada pemotongan akan mencirikan pembukaan yang sangat kami minati. Penggunaan lebih lanjut dari data ini saya anggap sepele dan tidak memerlukan pertimbangan. Akhirnya, saya akan meninggalkan gambar perbatasan dalam yang diekspor dalam 3D:

Source: https://habr.com/ru/post/id441204/


All Articles