Pemrosesan Gambar: Bagaimana mendeteksi papan nama quadrialteral dalam gambar?


14

Bagaimana saya bisa mendeteksi papan nama segi empat dari gambar yang diambil menggunakan ponsel? Bagaimana saya bisa mendeteksi bentuk seperti persegi panjang? rounded rectangle (sudut bulat bukan sudut bentuk)?

Saya menggunakan opencv.wrapper tetapi saya baru mengenalnya.

Terima kasih.

Berikut ini contohnya: alt teks http://www.freeimagehosting.net/uploads/b03442fd36.png

alt teks http://www.freeimagehosting.net/uploads/e6b36040e8.png

Karena kebisingan dan banyak garis di sana, saya tidak dapat menentukan garis batas papan nama. Kadang-kadang saya dapat menemukan batas garis setelah mengubah hough. Saya terjebak .... dalam skenario semacam ini ...

Ini adalah 2 gambar mentah yang diambil dari kamera ponsel

alt teks http://www.freeimagehosting.net/uploads/6dbd613edf.jpg alt teks http://www.freeimagehosting.net/uploads/720da20080.jpg

Saya butuh saran untuk melihat bagaimana saya bisa memproses gambar untuk mengeluarkan papan nama?

Terima kasih banyak


2
Kata kunci: opencv, hough transform, Duplikat: stackoverflow.com/questions/1817442 stackoverflow.com/questions/2068013

Ya, hough mengubah FTW!

tetapi ada suara di gambar bagaimana saya bisa mengetahui yang merupakan batas papan nama

@ xabi123: hough transform, threshold, bacakan batas

1
Bisakah Anda membagikan gambar contoh?

Jawaban:


7

Kedua gambar Anda mengandung banyak garis yang tidak ada hubungannya dengan tanda yang Anda cari. Dan beberapa garis itu lebih panjang / memiliki kontras lebih tinggi daripada garis yang sebenarnya Anda inginkan, jadi saya pikir mendeteksi garis tepi (misalnya menggunakan transformasi hough atau dengan menjumlahkan kontras secara horizontal / vertikal) tidak akan berfungsi.

Tetapi: Tanda yang Anda cari memiliki karakteristik lain yang seharusnya lebih mudah dideteksi:

  • Latar belakang tanda ada memiliki (hampir) kecerahan konstan
  • Ini membutuhkan area gambar yang relatif besar
  • Itu dekat pusat gambar

Jadi, Anda mencari area terhubung yang besar dengan kontras rendah. Saya telah meretas algoritma pembuktian konsep di Mathematica. (Saya bukan ahli OpenCV, tapi saya akan menyebutkan fungsi OpenCV masing-masing ketika saya mengenal mereka.)

Pertama, saya menggunakan filter turunan gaussian untuk mendeteksi besarnya gradien pada setiap piksel. Filter turunan gaussian memiliki bukaan lebar (11x11 piksel dalam kasus ini), sehingga sangat tidak sensitif terhadap noise. Saya kemudian menormalkan gambar gradien berarti = 1, jadi saya bisa menggunakan ambang yang sama untuk kedua sampel.

src = Import["http://www.freeimagehosting.net/uploads/720da20080.jpg"];
pixels = ImageData[ColorConvert[src, "Grayscale"]];
gradient = Sqrt[GaussianFilter[pixels, 5, {1, 0}]^2 + GaussianFilter[pixels, 5, {0, 1}]^2];
gradient = gradient/Mean[Flatten[gradient]];

Implementasi OpenCV: Anda dapat menggunakan sepFilter2Duntuk pemfilteran yang sebenarnya, tetapi tampaknya, Anda harus menghitung sendiri nilai-nilai kernel filter .

Hasilnya terlihat seperti ini:

besarnya gradien

Pada gambar ini, latar belakang tanda gelap dan batas tanda cerah. Jadi saya bisa melakukan binarize pada gambar ini dan mencari komponen yang terhubung secara gelap.

binaryBorders = Binarize[Image[gradient], 0.2];
sign = DeleteBorderComponents@ColorNegate[binaryBorders];
largestComponent = SortBy[ComponentMeasurements[sign, {"Area", "ConvexVertices"}][[All, 2]], First][[-1, 2]];

Implementasi OpenCV: Ambang batas harus langsung, tetapi saya pikir OpenCV tidak mengandung analisis komponen yang terhubung - Anda dapat menggunakan mengisi banjir atau cvBlobsLib untuk itu.

Sekarang, temukan gumpalan terbesar di dekat bagian tengah gambar dan temukan cembung cembung (Saya hanya menggunakan gumpalan terbesar yang tidak terhubung ke latar belakang, tetapi itu mungkin tidak cukup untuk setiap gambar).

Hasil: masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini


0

Pendekatan lain yang dapat Anda ambil yang lebih kuat untuk suara dalam situasi ini adalah untuk menghasilkan kurva tingkat abu-abu rata-rata gambar sepanjang sumbu x dan sepanjang sumbu y. Artinya, hitung tingkat abu-abu rata-rata untuk setiap baris / kolom dalam gambar.

Jika, misalnya, papan nama (atau tepiannya) lebih ringan dari sekelilingnya (yang merupakan kasus untuk semua contoh yang diperlihatkan dalam pertanyaan), Anda akan memiliki dua puncak pada kurva sumbu x Anda (untuk kiri dan kanan dan tepi) ) dan dua puncak pada kurva sumbu y Anda (untuk batas atas dan bawah). Dengan menggunakan teknik deteksi batas untuk sinyal 1 dimensi (mungkin filter high-pass), Anda dapat menyimpulkan koordinat sudut papan nama.

Saya telah melihat pendekatan ini digunakan untuk mendeteksi plat nomor dan juga untuk pengenalan wajah (hidung cenderung menjadi bagian wajah yang lebih cerah, sehingga menghasilkan puncak pada kurva x-axis dan y-axis).


hmm .. bagaimana jika papan nama diputar atau kamera diputar?
Mustafa

0

Ini mungkin ide yang agak terbalik, tetapi mungkin layak untuk dicoba. Alih-alih mencoba mendeteksi persegi panjang dan memikirkan teks seperti noise , mungkin Anda bisa memperlakukan teks seperti informasi dan menggunakannya untuk mendeteksi persegi panjang dengan lebih mudah.

Inilah garis besar gagasan:

  • mendeteksi teks dalam gambar . Itu tidak perlu menjadi implementasi yang kuat (Anda harus dapat google beberapa perpustakaan kecil yang melakukan itu, atau mungkin OpenCV memilikinya), hanya perkiraan kasar dari teks dalam gambar
  • temukan pusat semua deteksi teks . Bahkan dengan gambar yang berisik itu harus di sekitar tempat nyata
  • lakukan Hough decetion rectangle pada area di sekitar text detection . Mungkin menggunakan jarak median dari pusat deteksi teks, atau yang serupa. Lakukan diameter yang berbeda dan ingat dengan kuat .

Penjelasan dan keuntungannya:

  • area di sekitar teks biasanya homogen - persegi panjang yang sebenarnya harus menjadi recall kuat pertama
  • dengan cara ini Anda tidak perlu melakukan transformasi besar pada seluruh gambar, sehingga Anda dapat melakukannya lebih thurally (mungkin beberapa kali pada area yang sama tetapi dengan ukuran bucket yang berbeda ...)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.