Metode Pemrosesan Gambar untuk pemilihan runcing

11

Saya memiliki input sebagai gambar biner 3D dan output yang disukai di bawah ini:

Memasukkan:

MEMASUKKAN

Output yang disukai:

KELUARAN

Apa metode pemrosesan gambar yang harus saya cari jika saya hanya memiliki objek runcing, seperti output yang disukai di atas?

Karl
sumber
Apa yang Anda maksud dengan gambar biner 3D ? Bisakah Anda dengan mudah membagi gambar menjadi beberapa bagian?
bjoernz
Dengan 3D, maksud saya Ini adalah gambar tomografis.
Karl
1
Bisakah Anda jelaskan apa itu spikyobjek? Apa yang benar-benar menyebutnya runcing? apa karakteristik utama untuk menemukan objek runcing?
Dipan Mehta
Objek runcing dalam hal ini adalah area 3D yang tidak mulus dan memiliki bentuk seperti duri di sekujurnya.
Karl

Jawaban:

19

Ada lebih banyak sudut di perbatasan "objek runcing" Anda, jadi salah satu pendekatan adalah menyetel detektor sudut untuk ini.

Sebagai contoh, saya menghitung faktor penentu tensor struktur (kode Mathematica di bawah) dari gambar yang diubah jarak:

masukkan deskripsi gambar di sini

Binarizing dengan histeresis menghasilkan gambar ini, yang seharusnya menjadi titik awal yang baik untuk algoritma segmentasi pilihan Anda:

masukkan deskripsi gambar di sini

Kode Mathematica ( srcadalah gambar sumber yang Anda poskan)

Pada awalnya, saya menghitung transformasi jarak dari gambar input. Ini menciptakan kontras di seluruh area objek (bukan hanya perbatasan), sehingga seluruh objek dapat dideteksi.

dist = ImageData[DistanceTransform[src]];

Selanjutnya saya siapkan komponen tensor struktur . Ukuran filter untuk turunan gaussian jika 5, ukuran jendela adalah 20.

gx = GaussianFilter[dist, 5, {1, 0}];
gy = GaussianFilter[dist, 5, {0, 1}];
gx2 = GaussianFilter[gx^2, 20];
gxy = GaussianFilter[gx*gy, 20];
gy2 = GaussianFilter[gy^2, 20];   

Untuk menghitung filter sudut pada setiap piksel, saya cukup tancapkan ini ke penentu simbolis dari tensor struktur:

corners = Det[{{dx2, dxy}, {dxy, dy2}}] /. {dx2 -> gx2, dxy -> gxy, dy2 -> gy2};

Yang pada dasarnya sama dengan:

corners = gx2 * gy2 - gxy * gxy;

Mengubah ini ke gambar dan menskalakannya ke kisaran 0..1 menghasilkan gambar detektor sudut di atas.

Akhirnya, melakukan binarizing dengan ambang batas yang tepat menghasilkan citra biner akhir:

MorphologicalBinarize[Image[corners], {0.025, 0.1}]
Niki Estner
sumber
Jawaban yang sangat keren! =)
Telepon
Jawaban Anda luar biasa, saya belajar banyak dari mereka.
Andrey Rubshtein