Alternatif untuk mengubah Hough untuk mendeteksi struktur seperti grid

16

Saya memiliki gambar yang terdiri dari beberapa 'sudut' yang membentuk bentuk kotak:

masukkan deskripsi gambar di sini

Setelah beberapa pencarian, Hough tampak cocok, karena tidak bermasalah dengan antrian. Namun, masalah yang saya miliki adalah bahwa garis saya 'gemuk', dan deteksi tepi yang saya jalankan (Canny dalam kasus ini), memilih tepi garis, dan bukan tengah:

masukkan deskripsi gambar di sini

Ini berarti bahwa transformasi Hough akhirnya memilih satu (atau keduanya) dari 'sisi' dari garis kisi saya, dan bukan tengah.

masukkan deskripsi gambar di sini

Mengingat saya tahu apa yang saya cari (bentuk seperti grid, selalu dalam orientasi yang hampir sama), apakah ada cara yang lebih baik untuk melakukan bagian 'deteksi tepi' untuk memberi saya garis tengah, atau haruskah saya mencari pada metode yang sama sekali berbeda?

Benjol
sumber
Untuk konteks, kisi ini akan dibandingkan dengan kisi nominal untuk melakukan kalibrasi kamera Tsai.
Benjol
"deteksi tepi saya jalankan, mengambil tepi garis" Ya, karena deteksi tepi mengubah tepi menjadi ridges, dan gambar Anda sudah ridges. Tepi adalah batas antara terang dan gelap.
endolith

Jawaban:

10

Hough Transform memang akan membantu dalam mengambil Grid dalam kasus ini. Untuk "menipiskan" garis, Anda mungkin ingin mempertimbangkan operasi Skeletonization

Itu akan menghasilkan gambar seperti ini: Output Kerangka

Karena cara skeletonization bekerja, masih akan menghasilkan beberapa garis yang tampaknya tidak relevan dengan grid tetapi garis-garis menuju arah "salah" tidak banyak (setidaknya dalam gambar yang diberikan) untuk membingungkan deteksi garis Hough Transform terlalu banyak dan itu jelas akan memilih dua set garis utama pada arah yang berbeda. (Berikut adalah bagaimana hasil HT terlihat:) masukkan deskripsi gambar di sini

Jika Anda menggunakan MATLAB, Anda mungkin ingin memeriksa halaman bantuan ini

A A
sumber
Terima kasih! Ini sangat membantu. Belum mendapatkan lisensi MATLAB saya, tetapi saya mencobanya menggunakan SimpleSkeletonization AForge, dan itu bekerja lebih baik ... Meskipun masih belum sempurna. Saya akan meninjau kembali subjek ini nanti ketika saya mendapatkan beberapa data nyata untuk mengujinya.
Benjol
Anda mungkin ingin mencoba mengirik gambar asli Anda terlebih dahulu di beberapa ambang yang tampaknya menghasilkan garis kotak lemak "optimal". Yang saya maksud dengan optimal adalah mereka setidaknya terhubung. Itu bisa meningkatkan kinerja skeletonization tetapi Anda akan memiliki parameter tambahan untuk menentukan (ambang batas). Mungkin ada baiknya juga mencari cara untuk meningkatkan perolehan gambar.
A_A
ya, seperti yang saya katakan, ketika saya memiliki data nyata untuk dimainkan, itu akan bernilai waktu saya untuk memperbaiki sistem. Satu keraguan besar yang saya miliki tentang Hough secara umum adalah bahwa diskritisasi theta akan bekerja melawan ketepatan sub-pixel yang kita butuhkan. (Itu, dan saya tidak sepenuhnya yakin bahwa penyimpangan lensa tidak akan berarti bahwa garis-garis dapat melengkung, tidak lurus ...)
Benjol
11

Alternatif untuk Hough Transform adalah Radon Transform ( 1 , 2 ). Deskripsi kasar suatu algoritma untuk mendeteksi struktur seperti grid dapat terlihat seperti ini:

1. Perform Radon Transform from 0 to 180 degrees.
2. Find the two highest maxima in the angle bins.
3. For the two angles with maximal amplitude find the local maxima within the bin.
4. You can use the constraint that the maxima should have even spacing to deal with outliers.

EDIT :

Berikut adalah cuplikan matlab kecil untuk menggambarkan langkah 1-3:

im = imread('grid.png');
[R, xp] = radon(im, 0:180);
imagesc(0:180, xp, R)

Hasil Transformasi Radon

plot(max(R)) % the two maxima are at 65 & 117 degrees

Maxima atas semua sudut

plot(R(:, 65))

Maxima pada 65 derajat

plot(R(:,117))

Maxima pada 117 derajat

Untuk menjawab pertanyaan Anda dari komentar: Tampaknya bagi saya dari satu contoh gambar yang Anda berikan, bahwa metode ini lebih kuat terhadap cacat kecil di kisi yang terdeteksi. Kerangka jarang akan menghasilkan garis lurus yang mungkin menjadi kerugian bagi Hough Transform berikutnya.

bjoernz
sumber
Terima kasih, bisakah Anda memberi tahu saya dalam beberapa kata apa keuntungan yang Anda harapkan dari Radon Transform untuk saya, dibandingkan dengan Hough Transform?
Benjol
@ Benjol, saya memperbarui jawaban saya.
bjoernz
Bagus sekali, terima kasih banyak. Setelah IT memberi saya akses ke Matlab saya akan mencobanya!
Benjol