Mengapa Menggunakan Opencv+Python Untuk Mengimplementasikan Mesin Pencari Gambar?
Pertama-tama, OpenCV adalah perpustakaan pemrosesan Computer Vision sumber terbuka yang memiliki berbagai aplikasi dalam Computer Vision, pemrosesan gambar dan pengenalan pola.
Antarmukanya aman dan mudah digunakan dan melakukan pekerjaan lintas platform dengan baik. Ini adalah gambar komputer dan perpustakaan pemrosesan visual yang langka.
Kedua, sintaks Python lebih mudah digunakan, dekat dengan bahasa alami dan sangat fleksibel. Meskipun efisiensi komputasinya tidak tinggi, tetapi jauh lebih unggul daripada C++ atau bahasa lain dalam hal perkembangan yang cepat.
Pengenalan pysco dapat mengoptimalkan loop dalam kode python dan mempersempit kesenjangan komputasi dengan C/C++ sampai batas tertentu. Selain itu, banyak perhitungan matriks yang diperlukan dalam pemrosesan gambar.
Pengenalan numpy untuk melakukan operasi matriks dapat mengurangi kompleksitas pemrograman dan lebih fokus pada logika pencocokan daripada detail perhitungan.
1. Algoritma Mesin Pencari Gambar Dan Desain Kerangka Kerja:
Langkah-langkah dasar
Fitur citra diekstraksi menggunakan ekstraktor fitur ruang warna dan ekstraktor fitur ruang komposisi.
Driver konstruksi tabel indeks gambar menghasilkan tabel indeks fitur gambar dari perpustakaan gambar yang akan dicari .
Driver mesin pencari gambar menjalankan perintah pencarian, menghasilkan fitur gambar asli dan meneruskannya ke pencocokan pencarian gambar.
Kernel pencocokan pencarian gambar melakukan tugas pencocokan pencarian. Kembalikan gambar yang paling cocok dengan batas atas.
Modul Yang Diperlukan
numpy Alat yang ampuh untuk komputasi ilmiah dan operasi matriks.
cv2 Akses modul python OpenCV.
re Modul regularisasi. Parsing fitur komposisi gambar dan set fitur warna dalam csv.
csv. Efisien membaca dalam file csv.
glob Secara teratur dapatkan jalur file di folder.
argparse. Tetapkan parameter baris perintah.
2. Ekstraktor Fitur Ruang Warna Colordescriptor
Catat distribusi bin terbaik dari histogram distribusi rona, saturasi dan kecerahan yang dihasilkan oleh ruang warna HSV. Alokasi bin yang terlalu banyak dapat menyebabkan efisiensi program yang rendah dan kesulitan pencocokan serta persyaratan pencocokan terlalu ketat. Alokasi bin yang terlalu sedikit akan menyebabkan akurasi pencocokan yang tidak memadai dan tidak dapat menunjukkan fitur gambar.
Fungsi anggota getHistogram(self, image, mask, isCenter). Menghasilkan histogram dari distribusi fitur warna gambar. Gambar adalah gambar yang akan diproses, mask adalah mask dari area pemrosesan gambar. isCenter menentukan apakah itu adalah pusat gambar, sehingga secara efektif menimbang vektor fitur warna. Berat beratnya adalah 5.0. Gunakan metode calcHist() OpenCV untuk mendapatkan histogram dan metode normalize() untuk menormalkan.
Fungsi anggota menggambarkan (self, gambar). Ubah gambar dari ruang warna BGR ke ruang warna HSV (perlu dicatat di sini bahwa ruang warna yang dibaca OpenCV ke dalam gambar adalah BGR, bukan RGB).
Hasilkan mask untuk bagian kiri atas, kanan atas, kiri bawah, kanan bawah, dan tengah. Bentuk mask bagian tengah adalah elips. Dengan cara ini, bagian tengah dan bagian tepi dapat dibedakan secara efektif. Sehingga fitur warna dari bagian yang berbeda dapat dibobotkan dalam metode getHistogram.
3. Ekstraktor Fitur Ruang Komposisi Structuredescriptor
Dimensi anggota kelas. Normalisasikan (downsample) semua gambar ke ukuran yang ditentukan oleh dimensi. Ini kemudian dapat digunakan untuk pencocokan seragam dan pembuatan fitur ruang komposisi.
Fungsi anggota menggambarkan (self, gambar). Ubah gambar dari ruang warna BGR ke ruang warna HSV (harus dicatat di sini bahwa ruang warna yang dibaca OpenCV ke dalam gambar adalah BGR, bukan RGB). Mengembalikan matriks ruang warna HSV, menunggu pemrosesan lebih lanjut di inti mesin telusur.
4. Pencarian Gambar Cocok Dengan Pencari Kernel
Anggota kelas colorIndexPath dan structureIndexPath. Catat jalur tabel indeks fitur ruang warna dan jalur tabel indeks fitur struktur.
Fungsi anggota solveColorDistance (self, features, queryFeatures, eps = 1e-5). Temukan dua norma fitur dan kueriFitur vektor fitur. eps adalah untuk menghindari kesalahan pembagian dengan no .
Fungsi anggota solveStructureDistance(self, structure, queryStructures, eps = 1e-5). Hal yang sama untuk menemukan norma kedua dari vektor eigen. eps adalah untuk menghindari kesalahan pembagian dengan nol. Perlu kesatuan, jarak antara vektor eigen warna dan struktur relatif moderat dan tidak boleh terlalu bias.
Fungsi anggota searchByColor(self, queryFeatures). Gunakan metode pembaca modul csv untuk membaca data tabel indeks. Gunakan metode split re untuk mengurai format data. Gunakan hasil pencarian kamus untuk menyimpan jarak antara gambar kueri dan gambar di perpustakaan, kuncinya adalah nama gambar imageName di perpustakaan, dan nilainya adalah jarak jarak.
Fungsi anggota transformRawQuery(self, rawQueryStructures). Konversi matriks gambar kueri mentah ke bentuk vektor fitur untuk pencocokan.
Fungsi anggota searchByStructure(self, rawQueryStructures). Mirip dengan Konversi matriks gambar kueri mentah ke bentuk vektor fitur untuk pencocokan.
Pencarian fungsi anggota (self, queryFeatures, rawQueryStructures, limit = 3). Ringkaslah hasil dari metode searchByColor dan searchByStructure untuk mendapatkan skor rendah skor, semakin kecil jarak komprehensif dan semakin tinggi derajat kecocokan. Kembalikan gambar yang paling cocok dengan batas atas.
5. Konstruksi Tabel Indeks Gambar Mendorong Index.Py.
Perkenalkan color_descriptor dan structure_descriptor. Ini digunakan untuk mengurai gambar perpustakaan gambar untuk mendapatkan vektor fitur ruang warna dan vektor fitur ruang komposisi.
Setel argumen baris perintah dengan argparse. Parameter termasuk jalur perpustakaan gambar, jalur tabel indeks fitur ruang warna dan jalur tabel indeks fitur ruang komposisi.
Gunakan glob untuk mendapatkan jalur perpustakaan gambar.
Hasilkan teks tabel indeks dan tulis ke file csv.
driver dapat dimulai dalam bentuk baris perintah berikut.
dataset adalah jalur pustaka gambar. color_index.csv adalah jalur tabel indeks fitur ruang warna. structure_index.csv adalah jalur tabel indeks fitur ruang komposisi.
Mesin Pencari Gambar Menggerakkan Searchengine.Py.
Perkenalkan color_descriptor dan structure_descriptor. Digunakan untuk mengurai citra yang akan dicocokkan (dicari) untuk mendapatkan vektor ciri ruang warna dan vektor ciri ruang komposisi.
Setel argumen baris perintah dengan argparse. Parameternya meliputi jalur pustaka gambar, jalur tabel indeks fitur ruang warna, jalur tabel indeks fitur ruang komposisi, dan jalur gambar yang akan dicari.
6. Hasilkan Teks Tabel Indeks Dan Tulis Ke File Csv.
Driver dapat dimulai dalam bentuk baris perintah berikut.
dataset adalah jalur pustaka gambar. color_index.csv adalah jalur tabel indeks fitur ruang warna. structure_index.csv adalah jalur dari tabel indeks fitur ruang komposisi dan query/pyramid.jpg adalah jalur dari gambar yang akan dicari.