Demonstrasi kerangka berbasis lingkaran

Dec 03 2020

Skeletonization (atau transformasi sumbu medial) adalah proses menemukan sumbu "tengah" dari suatu daerah (dinyatakan sebagai topeng). Ini dilakukan oleh SkeletonTransform, yang tampaknya bekerja dengan menipiskan topeng sampai "perbatasan" bertemu, di mana mereka menentukan sumbu medial.

Ada metode lain, berdasarkan lingkaran tumbuh, yang menjadi perhatian saya.

Pertimbangkan topeng kepala kuda ini:

Misalkan Anda mulai dengan lingkaran merah kecil yang bersinggungan dengan batas topeng (yaitu, menyentuh batas topeng di setidaknya dua titik, seperti yang ditunjukkan di bawah).

Metode alternatif ini secara bertahap meningkatkan jari-jari lingkaran dan secara otomatis menyesuaikan posisi pusat baru untuk mempertahankan kondisi bi-tangensi ini.

Contoh gambar di atas adalah hack ... a kludge ... berdasarkan pemilihan beberapa kandidat pusat lingkaran dan meningkatkan radius hingga dua (atau lebih) titik menyentuh batas topeng.

Saya ingin melakukan proses ini dengan benar dan algoritmik.

Pendekatan umum saya adalah mengambil lingkaran terbesar saat ini, menambah jari-jarinya dengan jumlah kecil (misalnya, dengan 1 piksel), lalu mencari pusat lingkaran yang paling dekat dengan pusat terbesar saat ini yang mempertahankan bi-tangensi. Saya pikir ada primitif berbasis wilayah yang cerdas di Mathematica yang dapat membuat kode yang efisien, tetapi sayangnya saya tidak cukup terbiasa dengan penghitungan berbasis wilayah. Selain itu, fungsi seperti RegionMemberQtidak secara langsung berhubungan dengan bi-tangency.

Pada akhirnya, saya ingin mewarnai lingkaran dan pusat penghubung garis terkait, seperti yang dijelaskan di atas.


Saran @bills tentang RidgeFilter(baru bagi saya) sangat membantu!

Saya hanya perlu menyesuaikan ambang batas dan semacamnya.

Jawaban

2 bills Dec 03 2020 at 06:48

Ini mungkin tidak memberikan semua yang Anda cari, tetapi:

img = Import["https://i.stack.imgur.com/zV7QC.png"];
RidgeFilter[DistanceTransform[img],0.5] // ImageAdjust

Ini adalah punggungan, yang seharusnya menjadi pusat lingkaran Anda. Jari-jari akan menjadi nilai citra Transformasi Jarak di pusat-pusat ini.