Bagaimana cara melakukan De-Houghing of a Hough transform'ed Image?

9

Saya bekerja dengan kode yang ditemukan di Rosetta Code untuk membuat transformasi Hough. Saya sekarang ingin menemukan semua garis dalam gambar. Untuk melakukannya saya membutuhkan nilai ρ dan θ dari masing-masing puncak di ruang Hough. Output sampel untuk pentagon terlihat seperti ini:

Ruang Hough

Bagaimana saya dapat menemukan satu koordinat [θ, ρ] untuk masing-masing 'hot spot' yang terlihat di ruang Hough?

waspinator
sumber

Jawaban:

9

Anda menemukan koordinat puncak dan kemudian menggunakan sumbu untuk menskalakannya menjadi koordinat [θ, ρ].

Tergantung pada seberapa berisik data, berapa banyak puncak palsu yang Anda harapkan dan berapa banyak waktu yang Anda miliki, ada beberapa cara untuk melakukannya. Paling mudah adalah memilih beberapa level yang merupakan puncak nyata, potong semua data di bawahnya dan kemudian lakukan pusat gravitasi pada setiap puncak untuk mendapatkan pusatnya.

Anda juga dapat mengikis / memutar gambar sampai setiap puncak adalah satu piksel.

Martin Beckett
sumber
1
+1 untuk jawaban yang tepat. Bagaimana Anda mendefinisikan / menghitung center of gravity?
Dipan Mehta
Untuk akurasi lebih lanjut, cari maksimum, lalu paskan parabola dengan titik itu dan titik tetangganya, lalu cari puncak paraboid, yang umumnya akan berada di antara piksel.
endolith
2
@endolith - umumnya dengan transformasi Hough keakuratan dibatasi oleh identifikasi tepi pada gambar awal dan 'diskritisasi' hasil dalam ruang Hough. Jika Anda membutuhkan hasil yang lebih akurat itu normal untuk kembali dan mengulang transformasi untuk rentang yang lebih terbatas [θ, ρ] koordinat untuk mendapatkan resolusi Hough ruang yang lebih tinggi di sekitar solusi saja Anda menemukan
Martin Beckett
@DipanMehta - jumlahkan saja ( nilai x setiap piksel) dan (y ..) kemudian bagi dengan X, lebar Y kotak yang Anda cari - tetapi lihat komentar untuk endolith
Martin Beckett
2

3×3

Langkah kedua bisa memperbaiki posisi puncak ke akurasi sub-pixel. Ini bisa dilakukan dengan pemasangan parabola.

f(x)xpf(x+p)

f(x+p)f(x)+pTf(x)+12pTf(x)+p

Kemudian vektor yang mengoreksi

p=f(x)1f(x)

Derivatif dapat dihitung dari gambar Hough dengan perbedaan hingga .

Perhatikan bahwa adalah matriks Hessian dan adalah 2-vektor (gradien horizontal dan vertikal), maka juga merupakan 2-vektor yang menentukan pergeseran sub-pixel untuk mendapatkan posisi akurat dari maximizer lokal.2 × 2 f ( x ) hlmf(x)2×2f(x)p

Persamaan di atas kadang-kadang dapat menghasilkan pergeseran lebih dari 1 piksel. Dalam kasus seperti itu, lingkungan maximizer tidak memiliki bentuk parabola dan Anda mungkin tidak ingin melakukan koreksi atau bahkan harus menjatuhkan kandidat maximizer.

Libor
sumber
0

Ada teknik yang sangat bagus yang dikembangkan kembali di pertengahan 80 oleh Gerig dan Klein. Ini adalah prosedur backmapping yang menganalisis ruang Hough untuk mengidentifikasi titik yang paling mungkin terkait dengan setiap titik tepi dan kemudian membangun ruang Hough kedua di mana pemetaan titik tepi ke parameter adalah satu-ke-satu daripada satu-ke-banyak yang adalah tahap pertama yang biasa. Saya tidak memiliki referensi ke tangan tetapi melihat di kertas ulasan Hough mani Illingworth dan Kittler (sekitar 1987?)

lebih membantu
sumber