Algoritma untuk membandingkan dua gambar

158

Diberikan dua file gambar yang berbeda (dalam format apa pun yang saya pilih), saya perlu menulis sebuah program untuk memprediksi kesempatan jika salah satunya adalah salinan ilegal dari yang lain. Penulis salinan dapat melakukan hal-hal seperti memutar, membuat negatif, atau menambahkan detail sepele (serta mengubah dimensi gambar).

Apakah Anda tahu algoritma apa pun untuk melakukan pekerjaan semacam ini?

Salvador Dali
sumber
12
Bagaimana Anda menentukan yang asli?
jfs
1
Saya kira dia memiliki yang asli dan perlu memverifikasi apakah file asing adalah salinan yang diubah atau tidak terkait dengan aslinya.
unfa

Jawaban:

304

Ini hanyalah ide-ide yang telah saya pikirkan tentang masalahnya, tidak pernah mencobanya tetapi saya suka memikirkan masalah seperti ini!

Sebelum kamu memulai

Pertimbangkan untuk menormalkan gambar, jika satu resolusi lebih tinggi daripada yang lain, pertimbangkan opsi bahwa salah satunya adalah versi terkompresi dari yang lain, oleh karena itu menurunkan resolusi mungkin memberikan hasil yang lebih akurat.

Pertimbangkan untuk memindai berbagai area prospektif dari gambar yang dapat mewakili bagian yang diperbesar dari gambar dan berbagai posisi dan rotasi. Itu mulai menjadi rumit jika salah satu gambar adalah versi miring dari yang lain, ini adalah semacam batasan Anda harus mengidentifikasi dan kompromi.

Matlab adalah alat yang sangat baik untuk menguji dan mengevaluasi gambar.

Menguji algoritme

Anda harus menguji (minimal) satu set besar data uji manusia yang dianalisis di mana kecocokan diketahui sebelumnya. Jika misalnya dalam data pengujian Anda, Anda memiliki 1.000 gambar di mana 5% dari mereka cocok, Anda sekarang memiliki patokan yang cukup dapat diandalkan. Algoritma yang menemukan 10% positif tidak sebagus yang menemukan 4% positif dalam data pengujian kami. Namun, satu algoritma mungkin menemukan semua kecocokan, tetapi juga memiliki 20% false positive rate yang besar, jadi ada beberapa cara untuk menilai algoritma Anda.

Data uji harus berusaha dirancang untuk mencakup sebanyak mungkin jenis dinamika yang Anda harapkan akan ditemukan di dunia nyata.

Penting untuk dicatat bahwa setiap algoritma yang akan berguna harus berkinerja lebih baik daripada menebak secara acak, jika tidak, itu tidak berguna bagi kita!

Anda kemudian dapat menerapkan perangkat lunak Anda ke dunia nyata dengan cara yang terkontrol dan mulai menganalisis hasil yang dihasilkannya. Ini adalah jenis proyek perangkat lunak yang dapat digunakan untuk infinitum, selalu ada perubahan dan peningkatan yang dapat Anda lakukan, penting untuk diingat bahwa ketika merancang itu karena mudah untuk jatuh ke dalam perangkap proyek yang tidak pernah berakhir.

Ember warna

Dengan dua gambar, pindai setiap piksel dan hitung warnanya. Misalnya, Anda mungkin memiliki 'ember':

white
red
blue
green
black

(Jelas Anda akan memiliki resolusi counter yang lebih tinggi). Setiap kali Anda menemukan piksel 'merah', Anda menambah penghitung merah. Setiap ember dapat mewakili spektrum warna, semakin tinggi resolusi semakin akurat tetapi Anda harus bereksperimen dengan tingkat perbedaan yang dapat diterima.

Setelah Anda memiliki total, bandingkan dengan total untuk gambar kedua. Anda mungkin menemukan bahwa setiap gambar memiliki jejak yang cukup unik, cukup untuk mengidentifikasi kecocokan.

Deteksi tepi

Bagaimana dengan menggunakan Deteksi Tepi . (sumber: wikimedia.org )teks alternatif

Dengan dua gambar serupa, deteksi tepi akan memberi Anda jejak unik yang dapat digunakan dan cukup andal.

Ambil kedua gambar, dan terapkan deteksi tepi. Mungkin mengukur ketebalan rata-rata tepi dan kemudian menghitung probabilitas gambar bisa diskalakan, dan skala ulang jika perlu. Di bawah ini adalah contoh dari Gabor Filter yang diterapkan (sejenis deteksi tepi) dalam berbagai rotasi.

teks alternatif

Bandingkan gambar piksel dengan piksel, hitung kecocokan dan kecocokan. Jika mereka berada dalam ambang kesalahan tertentu, Anda memiliki kecocokan. Jika tidak, Anda dapat mencoba mengurangi resolusi hingga titik tertentu dan melihat apakah kemungkinan kecocokan membaik.

Daerah yang Menarik

Beberapa gambar mungkin memiliki segmen / wilayah tertentu yang menarik. Wilayah ini mungkin sangat kontras dengan gambar lainnya, dan merupakan barang yang bagus untuk dicari di gambar Anda yang lain untuk menemukan kecocokan. Ambil gambar ini misalnya:

teks alternatif
(sumber: meetthegimp.org )

Pekerja konstruksi berwarna biru adalah wilayah yang diminati dan dapat digunakan sebagai objek pencarian. Mungkin ada beberapa cara Anda bisa mengekstraksi properti / data dari wilayah yang diminati ini dan menggunakannya untuk mencari set data Anda.

Jika Anda memiliki lebih dari 2 wilayah minat, Anda dapat mengukur jarak di antara mereka. Ambil contoh sederhana ini:

teks alternatif
(sumber: per2000.eu )

Kami memiliki 3 bidang minat yang jelas. Jarak antara wilayah 1 dan 2 mungkin 200 piksel, antara 1 dan 3 400 piksel, dan 2 dan 3 200 piksel.

Cari gambar lain untuk bidang minat yang sama, normalkan nilai jarak dan lihat apakah Anda memiliki kecocokan potensial. Teknik ini bisa bekerja dengan baik untuk gambar yang diputar dan diskalakan. Semakin banyak wilayah minat yang Anda miliki, probabilitas kecocokan meningkat karena setiap pengukuran jarak cocok.

Penting untuk memikirkan konteks set data Anda. Jika misalnya kumpulan data Anda adalah seni modern, maka wilayah yang diminati akan bekerja dengan cukup baik, karena wilayah yang diminati mungkin dirancang untuk menjadi bagian mendasar dari gambar akhir. Namun jika Anda berurusan dengan gambar-gambar situs konstruksi, wilayah yang menarik dapat ditafsirkan oleh mesin fotokopi ilegal sebagai jelek dan dapat dipotong / diedit secara bebas. Ingat fitur-fitur umum pada dataset Anda, dan cobalah untuk mengeksploitasi pengetahuan itu.

Perubahan

Mengubah dua gambar adalah proses mengubah satu gambar menjadi yang lain melalui serangkaian langkah:

teks alternatif

Catatan, ini berbeda dengan memudar satu gambar ke gambar lain!

Ada banyak paket perangkat lunak yang dapat mengubah gambar. Ini secara tradisional digunakan sebagai efek transisi, dua gambar tidak berubah menjadi sesuatu yang biasanya separuh jalan, satu gambar ekstrem menjadi ekstrem yang lain sebagai hasil akhirnya.

Mengapa ini bisa bermanfaat? Bergantung pada algoritma morphing yang Anda gunakan, mungkin ada hubungan antara kesamaan gambar, dan beberapa parameter dari algoritma morphing.

Dalam contoh yang terlalu sederhana, satu algoritma mungkin mengeksekusi lebih cepat ketika ada sedikit perubahan yang harus dilakukan. Kami kemudian tahu ada kemungkinan lebih tinggi bahwa kedua gambar ini berbagi properti satu sama lain.

Teknik ini dapat bekerja dengan baik untuk memutar, mendistorsi, miring, diperbesar, semua jenis gambar yang disalin. Sekali lagi ini hanya ide yang saya miliki, itu tidak didasarkan pada akademisi yang diteliti sejauh yang saya sadari (saya belum terlihat keras), jadi mungkin banyak pekerjaan untuk Anda dengan hasil terbatas / tanpa hasil.

Zip

Jawaban Ow dalam pertanyaan ini luar biasa, saya ingat pernah membaca tentang teknik belajar AI semacam ini. Ini cukup efektif untuk membandingkan corpus lexicons.

Salah satu optimasi yang menarik ketika membandingkan corpus adalah Anda dapat menghapus kata-kata yang dianggap terlalu umum, misalnya 'The', 'A', 'And' dll. jadi ini bisa dihapus sebelum diproses. Mungkin ada sinyal umum yang serupa dalam gambar yang dapat dilucuti sebelum kompresi? Mungkin layak untuk dilihat.

Rasio kompresi adalah cara yang sangat cepat dan cukup efektif untuk menentukan seberapa mirip dua set data. Membaca tentang bagaimana kompresi bekerja akan memberi Anda ide bagus mengapa ini bisa sangat efektif. Untuk algoritma rilis cepat ini mungkin akan menjadi titik awal yang baik.

Transparansi

Sekali lagi saya tidak yakin bagaimana data transparansi disimpan untuk jenis gambar tertentu, gif png dll, tetapi ini akan diekstraksi dan akan berfungsi sebagai cut out yang disederhanakan secara efektif untuk dibandingkan dengan set data transparansi Anda.

Sinyal Pembalikan

Gambar hanyalah sinyal. Jika Anda memainkan suara dari speaker, dan Anda memainkan suara yang berlawanan di speaker lain dalam sinkronisasi sempurna pada volume yang sama persis, mereka membatalkan satu sama lain.

teks alternatif
(sumber: themotorreport.com.au )

Balikkan gambar, dan tambahkan ke gambar Anda yang lain. Skala posisi / loop berulang-ulang sampai Anda menemukan gambar yang dihasilkan di mana cukup banyak piksel putih (atau hitam? Saya akan menyebutnya sebagai kanvas netral) untuk memberi Anda kecocokan positif, atau kecocokan sebagian.

Namun, perhatikan dua gambar yang sama, kecuali salah satu dari mereka memiliki efek mencerahkan yang diterapkan padanya:

teks alternatif
(sumber: mcburrz.com )

Membalikkan salah satu dari mereka, lalu menambahkannya ke yang lain tidak akan menghasilkan kanvas netral yang merupakan tujuan kami. Namun, ketika membandingkan piksel dari kedua gambar asli, kita dapat melihat hubungan yang jelas antara keduanya.

Saya belum mempelajari warna selama beberapa tahun sekarang, dan saya tidak yakin apakah spektrum warna dalam skala linier, tetapi jika Anda menentukan faktor rata-rata perbedaan warna antara kedua gambar, Anda dapat menggunakan nilai ini untuk menormalkan data sebelum memproses dengan teknik ini.

Struktur Data Pohon

Pada awalnya ini tampaknya tidak cocok untuk masalah ini, tetapi saya pikir mereka bisa bekerja.

Anda dapat berpikir tentang mengekstraksi properti tertentu dari suatu gambar (misalnya tempat warna) dan menghasilkan pohon huffman atau struktur data serupa. Anda mungkin dapat membandingkan dua pohon untuk kesamaan. Ini tidak akan bekerja dengan baik untuk data fotografi misalnya dengan spektrum warna yang besar, tetapi kartun atau gambar dengan warna yang diperkecil lainnya mungkin berhasil.

Ini mungkin tidak akan berhasil, tapi itu ide. Struktur data trie sangat bagus dalam menyimpan leksikon, misalnya kamus. Ini pohon awalan. Mungkin mungkin untuk membangun gambar yang setara dengan leksikon, (sekali lagi saya hanya bisa memikirkan warna) untuk membangun sebuah trie. Jika Anda mengurangi mengatakan gambar 300x300 ke dalam kotak 5x5, maka dekomposisi setiap kotak 5x5 menjadi urutan warna yang Anda bisa membuat trie dari data yang dihasilkan. Jika kotak 2x2 berisi:

FFFFFF|000000|FDFD44|FFFFFF

Kami memiliki kode trie yang cukup unik yang meluas 24 tingkat, menambah / mengurangi tingkat (IE mengurangi / meningkatkan ukuran sub-persegi kami) dapat menghasilkan hasil yang lebih akurat.

Membandingkan pohon trie harus cukup mudah, dan dapat memungkinkan memberikan hasil yang efektif.

Lebih banyak ide

Saya menemukan sebuah kertas pendek yang menarik tentang klasifikasi citra satelit , yang menguraikan:

Ukuran tekstur yang dipertimbangkan adalah: matriks cooccurrence, perbedaan level abu-abu, analisis tekstur-nada, fitur yang berasal dari spektrum Fourier, dan filter Gabor. Beberapa fitur Fourier dan beberapa filter Gabor ditemukan menjadi pilihan yang baik, khususnya ketika pita frekuensi tunggal digunakan untuk klasifikasi.

Mungkin perlu menyelidiki pengukuran-pengukuran itu secara lebih rinci, meskipun beberapa di antaranya mungkin tidak relevan dengan kumpulan data Anda.

Hal-hal lain yang perlu dipertimbangkan

Mungkin ada banyak makalah tentang hal semacam ini, jadi membaca beberapa di antaranya akan membantu walaupun bisa sangat teknis. Ini adalah bidang yang sangat sulit dalam komputasi, dengan banyak jam kerja sia-sia dihabiskan oleh banyak orang yang berusaha melakukan hal serupa. Tetap sederhana dan membangun ide-ide itu akan menjadi cara terbaik untuk pergi. Seharusnya menjadi tantangan yang cukup sulit untuk membuat algoritma dengan tingkat kecocokan acak yang lebih baik, dan untuk mulai meningkatkan yang benar-benar mulai menjadi sangat sulit untuk dicapai.

Setiap metode mungkin perlu diuji dan diubah secara menyeluruh, jika Anda memiliki informasi tentang jenis gambar yang akan Anda periksa juga, ini akan berguna. Misalnya iklan, banyak dari mereka akan memiliki teks di dalamnya, jadi melakukan pengenalan teks akan menjadi cara yang mudah dan mungkin sangat dapat diandalkan untuk menemukan kecocokan terutama ketika dikombinasikan dengan solusi lain. Seperti disebutkan sebelumnya, cobalah untuk mengeksploitasi properti umum dari kumpulan data Anda.

Menggabungkan pengukuran dan teknik alternatif masing-masing yang dapat memiliki suara terbobot (tergantung pada keefektifannya) akan menjadi salah satu cara Anda dapat menciptakan sistem yang menghasilkan hasil yang lebih akurat.

Jika menggunakan beberapa algoritma, seperti yang disebutkan pada awal jawaban ini, seseorang dapat menemukan semua positif tetapi memiliki tingkat positif palsu sebesar 20%, akan menarik untuk mempelajari sifat / kekuatan / kelemahan dari algoritma lain seperti algoritma lain mungkin efektif dalam menghilangkan positif palsu yang dikembalikan dari yang lain.

Berhati-hatilah untuk tidak mencoba menyelesaikan proyek yang tidak pernah berakhir, semoga berhasil!

Tom Gullen
sumber
22
Respons yang luar biasa. Pujian atas jawaban yang dipikirkan dengan matang dan mencerahkan.
Andrew Hubbs
Terima kasih! Saya berharap untuk memperluasnya besok, saya punya beberapa ide lagi yang ingin saya pikirkan dan cari.
Tom Gullen
Hai Tom - apakah Anda tahu perpustakaan deteksi tepi open-source, pref di java?
Richard H
1
Hai Richard, maaf, tapi saya yakin ada beberapa di luar sana. Cari di Google untuk "Java Gabor Filter" atau "Java Edge Detection" dan saya yakin Anda akan menemukan satu atau dua.
Tom Gullen
Tautan untuk gambar ( blog.meetthegimp.orgwp-content / uploads / 2009/04 / 97.jpg ) menjadi buruk. Perhatikan bahwa stackoverflow sekarang memiliki layanan hosting gambar.
ThomasW
36

Baca koran: Porikli, Fatih, Oncel Tuzel, dan Peter Meer. "Pelacakan Kovarian Menggunakan Pembaruan Model Berdasarkan Sarana pada Manifold Riemannian". (2006) Visi Komputer IEEE dan Pengenalan Pola.

Saya berhasil mendeteksi daerah yang tumpang tindih dalam gambar yang diambil dari webcam yang berdekatan menggunakan teknik yang disajikan dalam makalah ini. Matriks kovarian saya terdiri dari keluaran deteksi aspek / tepi Sobel, cerdik dan SUSAN, serta piksel skala abu-abu asli.

Nick
sumber
1
@Satoru Logic: pencarian google menunjukkan hit di atas kertas: google.com/… .
Nick
34

Sebuah ide:

  1. gunakan detektor titik kunci untuk menemukan deskriptor skala dan transformasi-invarian dari beberapa titik dalam gambar (misalnya SIFT, SURF, GLOH, atau LESH).
  2. cobalah untuk menyelaraskan titik kunci dengan deskriptor serupa dari kedua gambar (seperti pada penjahitan panorama), memungkinkan untuk beberapa transformasi gambar jika perlu (mis. skala & memutar, atau peregangan elastis).
  3. jika banyak titik kunci menyelaraskan dengan baik (ada transformasi seperti itu, kesalahan penyelarasan titik kunci rendah; atau transformasi "energi" rendah, dll.), Anda mungkin memiliki gambar yang sama.

Langkah 2 bukanlah hal sepele. Secara khusus, Anda mungkin perlu menggunakan algoritma pintar untuk menemukan titik kunci yang paling mirip pada gambar lain. Penjelas titik biasanya sangat berdimensi tinggi (seperti seratus parameter), dan ada banyak titik untuk dilihat. kd-tree mungkin berguna di sini, pencarian hash tidak berfungsi dengan baik.

Varian:

  • Deteksi tepi atau fitur lainnya, bukan titik.
sastanin
sumber
2
Saya pikir itu pendekatan yang tepat juga. Hanya detail: SIFT, SURF, GLOH bukan detektor tombol kunci. Mereka deskriptor keypoint. Detektor keypoint umum adalah (skala invarian) detektor DoG, Harris atau Eigenvalue.
Niki
Untuk langkah 2, Anda dapat menggunakan tetangga terdekat, yang menggunakan jarak euclidean antara deskriptor
MobileCushion
15

Ini memang jauh lebih sederhana daripada kelihatannya :-) Saran Nick adalah saran yang bagus.

Untuk memulai, perlu diingat bahwa metode perbandingan apa pun yang bermanfaat pada dasarnya akan bekerja dengan mengubah gambar menjadi bentuk yang berbeda - bentuk yang memudahkan untuk memilih fitur serupa. Biasanya, hal ini tidak membuat bacaan menjadi sangat ringan ...


Salah satu contoh paling sederhana yang dapat saya pikirkan adalah hanya menggunakan ruang warna dari setiap gambar. Jika dua gambar memiliki distribusi warna yang sangat mirip, maka Anda dapat yakin bahwa mereka menunjukkan hal yang sama. Setidaknya, Anda dapat memiliki cukup kepastian untuk menandai, atau melakukan lebih banyak pengujian. Membandingkan gambar dalam ruang warna juga akan menahan hal-hal seperti rotasi, penskalaan, dan beberapa pemotongan. Tentu saja, itu tidak akan menahan modifikasi gambar yang berat atau pewarnaan ulang yang berat (dan bahkan perubahan rona sederhana akan agak rumit).

http://en.wikipedia.org/wiki/RGB_color_space
http://upvector.com/index.php?section=tutorials&subsection=tutorials/colorspace


Contoh lain melibatkan sesuatu yang disebut Hough Transform. Transformasi ini pada dasarnya menguraikan gambar menjadi satu set garis. Anda kemudian dapat mengambil beberapa baris 'terkuat' di setiap gambar dan melihat apakah mereka berbaris. Anda dapat melakukan beberapa pekerjaan ekstra untuk mencoba dan mengkompensasi rotasi dan penskalaan juga - dan dalam hal ini, karena membandingkan beberapa baris adalah pekerjaan komputasi JAUH lebih sedikit daripada melakukan hal yang sama untuk seluruh gambar - itu tidak akan terlalu buruk.

http://homepages.inf.ed.ac.uk/amos/hough.html
http://rkb.home.cern.ch/rkb/AN16pp/node122.html
http://en.wikipedia.org/wiki/ Hough_transformasi

shea241
sumber
8

Dalam bentuk yang Anda jelaskan, masalahnya sulit. Apakah Anda menganggap menyalin, menempelkan bagian gambar ke gambar lain yang lebih besar sebagai salinan? dll.

Jika Anda mengambil langkah mundur, ini lebih mudah untuk diselesaikan jika Anda menandai gambar induk. Anda perlu menggunakan skema watermarking untuk menanamkan kode ke dalam gambar. Untuk mengambil langkah mundur, yang bertentangan dengan beberapa pendekatan tingkat rendah (deteksi tepi dll) yang disarankan oleh beberapa orang, metode watermarking lebih unggul karena:

Ini tahan terhadap serangan pemrosesan sinyal ► Peningkatan sinyal - penajaman, kontras, dll. ► Pemfilteran - median, low pass, high pass, dll. ► Aditif noise - Gaussian, seragam, dll. ► Kompresi lossy - JPEG, MPEG, dll.

Ini tahan terhadap serangan Geometrik ► Transformasi Affine ► Pengurangan data - memotong, memotong, dll. ► Distorsi lokal acak ► Warping

Lakukan riset tentang algoritma watermarking dan Anda akan berada di jalur yang benar untuk menyelesaikan masalah Anda. (Catatan: Anda dapat membuat tolok ukur metode Anda menggunakan dataset STIRMARK . Ini adalah standar yang diterima untuk jenis aplikasi ini.

nav
sumber
5

Ini hanya saran, mungkin tidak berhasil dan saya siap dipanggil untuk ini.

Ini akan menghasilkan false positive, tapi semoga bukan false negative.

  1. Ubah ukuran kedua gambar sehingga ukurannya sama (saya berasumsi bahwa rasio lebar dengan panjang sama di kedua gambar).

  2. Kompres bitmap dari kedua gambar dengan algoritma kompresi lossless (mis. Gzip).

  3. Temukan pasangan file yang memiliki ukuran file serupa. Misalnya, Anda bisa mengurutkan setiap pasangan file yang Anda miliki dengan seberapa mirip ukuran file dan mengambil X atas.

Seperti yang saya katakan, ini pasti akan menghasilkan positif palsu, tetapi mudah-mudahan bukan negatif palsu. Anda dapat menerapkan ini dalam lima menit, sedangkan Porikil et. Al. mungkin akan membutuhkan pekerjaan yang luas.

Owen
sumber
Saya sangat menyukai solusi ini, mudah diimplementasikan dan saya percaya ini akan menghasilkan tingkat identifikasi yang lebih baik daripada acak
Tom Gullen
Ini pertanyaan: Apakah ini berfungsi jika salinan telah disimpan dengan resolusi yang berbeda?
Dr. belisarius
4

Saya percaya jika Anda bersedia menerapkan pendekatan untuk setiap orientasi yang mungkin dan untuk versi negatif, awal yang baik untuk pengenalan gambar (dengan keandalan yang baik) adalah dengan menggunakan eigenfaces: http://en.wikipedia.org/wiki/Eigenface

Gagasan lain adalah mengubah kedua gambar menjadi vektor komponen mereka. Cara yang baik untuk melakukan ini adalah membuat vektor yang beroperasi dalam dimensi x * y (x menjadi lebar gambar Anda dan y menjadi tinggi), dengan nilai untuk setiap dimensi yang berlaku untuk nilai piksel (x, y). Kemudian jalankan varian K-Nearest Neighbors dengan dua kategori: cocok dan tidak cocok. Jika cukup dekat dengan gambar asli, maka akan cocok dengan kategori pertandingan, jika tidak maka tidak akan.

K Nearest Neighbors (KNN) dapat ditemukan di sini, ada penjelasan bagus lainnya di web juga: http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm

Manfaat KNN adalah bahwa semakin banyak varian yang Anda bandingkan dengan gambar asli, algoritme menjadi lebih akurat. Kelemahannya adalah Anda perlu katalog gambar untuk melatih sistem terlebih dahulu.

Nick Udell
sumber
1
Ide bagus tetapi hanya jika wajah ada dalam data. Juga mengidentifikasi orang, bukan situasi. Oleh karena itu aktor profesional yang tampil di berbagai publikasi akan menghasilkan banyak positif palsu.
Tom Gullen
Kecuali saya salah paham maksud penggunaan Anda
Tom Gullen
Sebenarnya saya percaya algoritme berfungsi terlepas dari subjek, jadi jika Anda membandingkan pohon, itu juga akan berguna. Itu hanya disebut Eigenfaces karena secara klasik dikaitkan dengan Pengenalan Wajah. Selama item yang akan dicari memiliki fitur keseluruhan yang sama seperti item yang Anda bandingkan dengan itu masih berfungsi.
Nick Udell
Terlalu lama untuk menambahkan komentar sebelumnya: Juga: Eigenfaces membandingkan seluruh gambar, bukan hanya wajah di layar. Contoh di wikipedia hanya menggunakan wajah yang dipangkas karena aplikasi tradisionalnya adalah pengenalan wajah, yang hanya bermanfaat bagi wajah. Jika aktor Anda muncul di posisi yang berbeda, itu akan ditandai sebagai berbeda.
Nick Udell
1
Saya ragu menerapkan KNN langsung pada nilai piksel mentah akan banyak membantu, baik. Terjemahan / rotasi kecil biasanya menyebabkan perbedaan besar dalam nilai piksel mentah, terutama jika gambar mengandung kontras tajam atau garis tipis. Jadi versi sewenang-wenang mengubah gambar yang sama tidak benar-benar dekat satu sama lain di ruang itu (mereka tidak jatuh ke dalam kelompok), dan KNN tidak akan bekerja dengan baik. Saya kira itu bisa bekerja dengan baik pada histogram gambar atau representasi transformasi-invarian gambar lainnya.
Niki
1

Jika Anda ingin mempertimbangkan pendekatan yang berbeda sama sekali untuk mendeteksi salinan ilegal gambar Anda, Anda dapat mempertimbangkan watermarking . (dari 1.4)

... memasukkan informasi hak cipta ke dalam objek digital tanpa kehilangan kualitas. Setiap kali hak cipta objek digital dipertanyakan, informasi ini diekstraksi untuk mengidentifikasi pemilik yang sah. Dimungkinkan juga untuk menyandikan identitas pembeli asli bersama dengan identitas pemegang hak cipta, yang memungkinkan pelacakan salinan yang tidak sah.

Meskipun ini juga bidang yang kompleks, ada teknik yang memungkinkan informasi tanda air bertahan melalui perubahan gambar kotor: (dari 1.9)

... setiap transformasi sinyal dengan kekuatan yang wajar tidak dapat menghilangkan tanda air. Oleh karena itu, seorang bajak laut yang ingin menghilangkan tanda air tidak akan berhasil kecuali mereka merendahkan dokumen terlalu banyak untuk kepentingan komersial.

tentu saja, faq panggilan menerapkan pendekatan ini: "... sangat menantang" tetapi jika Anda berhasil dengan itu, Anda mendapatkan kepercayaan tinggi apakah gambar itu adalah salinan atau tidak, daripada persentase kemungkinan.

JeffH
sumber
Adakah informasi lebih lanjut tentang bagaimana watermarking bertahan setelah pengeditan berat? Kedengarannya sangat menarik.
Tom Gullen
1

Jika Anda menjalankan Linux, saya akan menyarankan dua alat:

align_image_stack dari package hugin-tools - adalah program commandline yang dapat secara otomatis memperbaiki rotasi, penskalaan, dan distorsi lainnya (sebagian besar ditujukan untuk mengomposisi fotografi HDR, tetapi berfungsi untuk bingkai video dan dokumen lain juga). Informasi lebih lanjut: http://hugin.sourceforge.net/docs/manual/Align_image_stack.html

bandingkan dari paket imagemagick - program yang dapat menemukan dan menghitung jumlah piksel yang berbeda dalam dua gambar. Berikut ini adalah tutorial yang rapi: http://www.imagemagick.org/Usage/compare/ uising -fuzz N% Anda dapat meningkatkan toleransi kesalahan. Semakin tinggi N semakin tinggi toleransi kesalahan untuk tetap menghitung dua piksel sebagai sama.

align_image_stack harus memperbaiki offset apa pun sehingga perintah bandingkan sebenarnya memiliki peluang untuk mendeteksi piksel yang sama.

unfa
sumber