Saya telah melakukan banyak penelitian dan menemukan metode seperti ambang batas adaptif, daerah aliran sungai dll yang dapat digunakan untuk mendeteksi vena di daun. Namun pengirikan tidak baik karena menimbulkan banyak kebisingan
Semua gambar saya adalah gambar abu-abu. Tolong bisa ada yang menyarankan pendekatan apa untuk mengadopsi sambil mempertimbangkan masalah ini membutuhkan bantuan
EDIT: Gambar asli saya
Setelah ambang batas
Seperti yang disarankan oleh jawaban saya telah mencoba deteksi tepi berikut
- Cerdik
Terlalu banyak kebisingan dan gangguan yang tidak diinginkan
- Sobel
- Roberts
EDIT: Mencoba satu operasi lagi saya mendapatkan hasil berikut ini lebih baik daripada apa yang saya coba dengan cerdik dan adaptif Apa yang Anda rasakan?
Jawaban:
Anda tidak mencari tepi (= perbatasan antara daerah diperpanjang nilai abu-abu tinggi dan rendah), Anda sedang mencari pegunungan (garis tipis gelap atau lebih terang dari lingkungan mereka), sehingga tepi filter mungkin tidak ideal: Filter tepi akan memberi Anda dua sisi (satu di setiap sisi garis) dan respons rendah di tengah garis:
TAMBAH : Jika diminta menjelaskan perbedaan antara detektor tepi dan detektor ridge lebih jelas. Saya minta maaf sebelumnya jika jawaban ini terlalu panjang.
Detektor tepi (biasanya) adalah operator turunan pertama: Jika Anda membayangkan gambar input sebagai lanskap 3D, detektor tepi mengukur kecuraman lereng di setiap titik lanskap itu:
Jika Anda ingin mendeteksi batas wilayah yang terang atau gelap, ini tidak apa-apa. Tetapi untuk urat pada gambar OP itu akan memberi Anda sama saja: garis besar kiri dan kanan masing-masing urat:
Itu juga menjelaskan "pola garis ganda" dalam hasil detektor tepi Canny:
Jadi, bagaimana Anda mendeteksi garis-garis tipis ini (yaitu bubungan)? Idenya adalah bahwa nilai-nilai piksel dapat (secara lokal) didekati oleh polinomial orde 2, yaitu jika fungsi gambar adalah , maka untuk nilai kecil dan :g x y
atau, dalam bentuk matriks:
Matriks turunan urutan kedua disebut " Matriks goni ". Ini menjelaskan struktur urutan kedua yang menarik bagi kami.⎛⎝⎜∂2g∂x2∂2g∂x∂y∂2g∂x∂y∂2g∂y2⎞⎠⎟
Bagian urutan kedua dari fungsi ini dapat diubah menjadi jumlah dari dua parabola diputar oleh beberapa sudut, dengan mendekomposisi matriks Hessian di atas hingga kali rotasi matriks diagonal dari nilai eigen-nya ( Penguraian matriks ). Kami tidak peduli dengan rotasi (kami ingin mendeteksi ridges dalam orientasi apa pun), jadi kami hanya tertarik pada danλ1x2+λ2y2 λ1 λ2
Bentuk seperti apa yang bisa dimiliki oleh perkiraan fungsi ini? Sebenarnya tidak banyak:
Untuk mendeteksi ridges, kami ingin menemukan area dalam gambar yang terlihat seperti plot terakhir di atas, jadi kami mencari area di mana nilai eigen utama Hessian besar (dibandingkan dengan nilai eigen minor). Cara termudah untuk mendeteksi itu hanya dengan menghitung nilai eigen utama pada setiap piksel - dan itulah yang dilakukan oleh filter ridge di bawah ini.
Sebuah Filter ridge mungkin akan memberikan hasil yang lebih baik. Saya telah mencoba built in Mathematica
RidgeFilter
(yang menghitung nilai eigen utama dari matriks Hessian pada setiap piksel) pada gambar Anda:Seperti yang Anda lihat, hanya ada satu puncak untuk setiap garis gelap tipis. Hasil binarizing dan skeletonizing:
Setelah memangkas kerangka dan mengeluarkan komponen kecil (noise) dari gambar, saya mendapatkan kerangka terakhir ini:
Kode Mathematica lengkap:
MENAMBAHKAN:
Saya bukan ahli Matlab, saya tidak tahu apakah ia memiliki filter ridge bawaan, tetapi saya dapat menunjukkan kepada Anda bagaimana menerapkannya "dengan tangan" (sekali lagi, menggunakan Matematica). Seperti yang saya katakan, filter ridge adalah nilai eigen utama dari matriks Hessian. Saya dapat menghitung nilai eigen secara simbolis dalam Mathematica:
=>12(Hxx+Hyy+H2xx+4H2xy−2HxxHyy+H2yy−−−−−−−−−−−−−−−−−−−−−−−√)
Jadi yang harus Anda lakukan adalah menghitung turunan kedua , , (menggunakan sobel atau turunan dari filter gaussian) dan masukkan ke dalam ekspresi di atas, dan Anda punya filter ridge Anda. H xy H yyHxx Hxy Hyy
sumber
Saat menggunakan deteksi tepi Canny (dalam Halcon), dengan alpha menjadi 1, dan ambang rendah 8 dan ambang tinggi 13 (pada skala 1-255), saya mendapatkan hasil berikut:
Dengan mengutak-atik parameter, hasil yang Anda dapatkan dari Canny dapat jauh lebih ditingkatkan. Dengan menggunakan gambar ini, Anda dapat melewati tepi pendek untuk menghilangkan noise, dan menghubungkan tepi panjang untuk hasil akhir.
BTW: warna yang berbeda menunjukkan tepi yang berbeda.
Saya bisa mendapatkan hasil yang hampir serupa menggunakan online Canny edge detector ini :
sumber
Menyusul dari jawaban yang sangat baik di atas, berikut adalah bagaimana melakukannya dengan python menggunakan functons scikit.
sumber
img
seharusnya? Saya punyapng
file dan tidak berfungsi.i1
ini adalah nilai eigen yang lebih besar, jadi Anda harus menggunakannya.Alih-alih thresholding, saya telah menerapkan deteksi tepi sederhana.
GIMP Bekas dengan Perbedaan Gaussian - Radious Outer: 3.0 dan Inner: 1.0.
Ini dia tampilannya.
Anda selanjutnya dapat menerapkan filter median atau erosi / pelebaran sehingga Anda dapat menghilangkan beberapa suara kasar.
Berikut adalah halaman yang menjelaskan implementasi gimp.
Anda harus merujuk ke berbagai teknik seperti Laplacian of Gaussian atau Difference of Gaussin dll. Lihat ini: http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm#7
Dan jawaban ini Bagaimana Laplacian digunakan untuk Masker Unsharp?
sumber
Topik ini selalu menarik banyak minat, namun belum ada konsensus nyata tentang topik tersebut. Karena itu saya memutuskan untuk mengucapkan beberapa patah kata.
Jawaban saya untuk pertanyaan serupa yang diajukan sebelumnya pada stackexchange ( Q1 dan Q2 ) melibatkan algoritma ekstraksi struktur curvilinear subpixel oleh Steger. Metode ini dilakukan dengan cukup baik dalam banyak kasus dan untungnya, termasuk yang ini. Oleh karena itu saya memposting gambar output di sini: dan di sini dengan pengaturan parameter yang berbeda, dan tanpa pewarnaan yang terhubung: Untuk detail dan referensi yang tepat, silakan lihat posting stackexchange yang telah saya rujuk.
sumber
Sebagai bagian dari tahun terakhir tugas studi teknik saya, saya harus mempelajari metode segmentasi untuk pembuluh darah dalam gambar fundus mata. Saya menemukan metode rekonstruksi pohon ini (oleh Cohen, Laurent D. dan Mille, Julien sangat menarik untuk digunakan bersama dengan Metode Fast-Marching.
Makalah lain yang Anda mungkin ingin melihat:
Tautan yang berguna: - Perambatan depan dalam 2D dan 3D
Saya harap ini sedikit membantu, meskipun itu tidak benar-benar canggih.
sumber