Apakah OpenCV mendukung perbandingan dua gambar, mengembalikan beberapa nilai (mungkin persentase) yang menunjukkan seberapa mirip gambar-gambar ini? Misalnya, 100% akan dikembalikan jika gambar yang sama diteruskan dua kali, 0% akan dikembalikan jika gambarnya benar-benar berbeda.
Saya sudah membaca banyak topik serupa di sini di StackOverflow. Saya juga melakukan beberapa Googling. Sayangnya saya tidak bisa mendapatkan jawaban yang memuaskan.
image
opencv
comparison
similarity
Boris
sumber
sumber
Jawaban:
Ini adalah topik yang sangat besar, dengan jawaban dari 3 baris kode untuk seluruh majalah penelitian.
Saya akan menjelaskan teknik-teknik yang paling umum dan hasilnya.
Membandingkan histogram
Salah satu metode paling sederhana & tercepat. Diusulkan puluhan tahun lalu sebagai sarana untuk menemukan kemiripan gambar. Idenya adalah bahwa hutan akan memiliki banyak warna hijau, dan wajah manusia akan memiliki banyak warna merah jambu, atau apa pun. Jadi, jika Anda membandingkan dua gambar dengan hutan, Anda akan mendapatkan beberapa kesamaan antara histogram, karena Anda memiliki banyak warna hijau di keduanya.
Pencocokan template
Contoh yang bagus di sini matchTemplate menemukan kecocokan yang baik . Ini menggabungkan gambar pencarian dengan yang sedang dicari. Biasanya digunakan untuk menemukan bagian gambar yang lebih kecil di bagian yang lebih besar.
Pencocokan fitur
Dianggap sebagai salah satu cara paling efisien untuk melakukan penelusuran gambar. Sejumlah fitur diekstraksi dari sebuah gambar, dengan cara yang menjamin fitur yang sama akan dikenali lagi bahkan saat diputar, diskalakan, atau dimiringkan. Fitur yang diekstrak dengan cara ini dapat dicocokkan dengan kumpulan fitur gambar lainnya. Gambar lain yang memiliki proporsi fitur tinggi yang cocok dengan gambar pertama dianggap menggambarkan pemandangan yang sama.
Menemukan homografi antara dua set titik akan memungkinkan Anda juga menemukan perbedaan relatif dalam sudut pemotretan antara gambar asli atau jumlah tumpang tindih.
Di situs T&J OpenCV saya berbicara tentang perbedaan antara deskriptor fitur, yang sangat bagus saat membandingkan seluruh gambar dan deskriptor tekstur, yang digunakan untuk mengidentifikasi objek seperti wajah manusia atau mobil dalam sebuah gambar.
sumber
absdiff
codota.com/code/java/methods/org.opencv.core.Core/absdiff Thresholding hasil menghasilkan topeng yang memungkinkan Anda menyorot daerah yang berubah dari satu adegan ke adegan lain.Jika untuk mencocokkan gambar identik (ukuran / orientasi sama)
Sumber
sumber
Solusi Sam seharusnya cukup. Saya telah menggunakan kombinasi perbedaan histogram dan pencocokan template karena tidak ada satu metode pun yang berhasil untuk saya 100%. Saya tidak terlalu mementingkan metode histogram. Inilah cara saya menerapkan dalam skrip python sederhana.
sumber
Sedikit keluar dari topik tetapi berguna adalah
numpy
pendekatan pythonic . Ini kuat dan cepat tetapi hanya membandingkan piksel dan bukan objek atau data yang dikandung gambar (dan ini membutuhkan gambar dengan ukuran dan bentuk yang sama):Pendekatan yang sangat sederhana dan cepat untuk melakukan ini tanpa openCV dan library apa pun untuk computer vision adalah mengatur susunan gambar
Setelah menentukan kedua gambar bernorma (atau matriks), Anda bisa menjumlahkan perkalian gambar yang ingin Anda bandingkan:
1) Jika Anda membandingkan gambar yang serupa, jumlahnya akan menghasilkan 1:
2) Jika tidak sama, Anda akan mendapatkan nilai antara 0 dan 1 (persentase jika Anda mengalikan dengan 100):
Harap perhatikan bahwa jika Anda memiliki gambar berwarna, Anda harus melakukan ini dalam semua 3 dimensi atau hanya membandingkan versi skala abu-abu. Saya sering kali harus membandingkan gambar dalam jumlah besar dengan konten yang berubah-ubah dan itulah cara yang sangat cepat untuk melakukannya.
sumber