Saya memiliki koleksi foto JPEG, masing-masing 500 hingga 600 piksel di sisi terpanjang. Bagaimana saya bisa mendeteksi yang mana yang diperbesar secara algoritmik dari foto yang jauh lebih kecil?
Pasar online mengharuskan setiap penjual untuk mengunggah foto produk yang dijualnya, dan foto-foto ini harus memiliki lebar minimal 500 piksel atau tinggi 500 piksel karena foto produk dengan detail kecil menyebabkan pengalaman buruk bagi pembeli. Saya sudah tahu apakah penjual mencoba menghindari persyaratan ini dengan menambahkan batas warna solid, seperti memperluas latar belakang putih standar dengan lebih banyak putih. Namun belakangan ini, penjual sudah mulai mengelak dari hal ini dengan meningkatkan skala foto lama yang diambil sebelum persyaratan 500-pixel diterbitkan. Apa cara yang baik untuk menentukan apakah foto telah diperbesar dengan tetangga terdekat, bilinear, atau interpolasi bikubik?
sumber
Jawaban:
Apakah DOG mengendus kabur di foto.
Jika Anda akan dihukum untuk foto yang diperbesar secara digital, Anda mungkin juga akan dihukum untuk foto yang tidak fokus. Tepi buram dan detail keduanya menyebabkan pengalaman buruk yang sama bagi pemirsa, terlepas dari apakah itu disebabkan oleh fokus orisinal atau buruk. Yang ingin Anda lakukan adalah mendeteksi blur, yang merupakan ketiadaan frekuensi spasial yang tinggi.
Coba ambil perbedaan antara gambar dan salinannya sendiri. Jika gambar sudah buram, 1-pixel Gaussian blur tidak akan mengubah gambar sebanyak jika gambar itu tajam. Jadi akan ada lebih banyak perbedaan antara gambar yang tajam dan versi yang kabur daripada ada antara gambar yang kabur dan versi yang lebih kabur. Dalam visi komputer, teknik ini disebut " perbedaan Gaussians " (DOG).
Saya baru saja mencoba ini pada foto 400x480 piksel dan pada hal yang sama yang telah dikurangi menjadi 200x240 (50%) dan kemudian diperbesar kembali menjadi 400x480 (200%), dan ujung-ujung pada foto yang ditingkatkan agak jauh lebih samar. Ini tidak akan konklusif pada pembesaran ringan seperti 140%, tetapi akan menangkap kasus yang mencolok.
Beberapa perpustakaan visi komputer menyertakan cara untuk menghitung selisih Gaussians pada gambar. Begitu juga banyak editor gambar grafis. GIMP versi terbaru, misalnya. sertakan makro DOG yang mengotomatiskan langkah 2 hingga 4: Filter> Edge-Detect> Difference of Gaussians, lalu setel radius ke 1.0 dan 0.0.
Pertanyaan terkait di situs Stack Exchange lainnya:
DOG tidak akan menangkap tetangga terdekat, tetapi Anda dapat melakukannya dengan mencari pola baris dan kolom yang identik dengan tetangga terdekat mereka ke arah atas atau kiri.
sumber
x + amt*(x - GB(x, r))
. Menggabungkan USM dan memperbesar hanya akan meningkatkan pertengahan (freq spasial tengah), bukan yang tertinggi, karena yang tinggi tidak ada. DOG (x, 1, 0) mengisolasi tertinggi.Saya tidak berpendapat ini mungkin dalam arti umum. Ada banyak kemungkinan algoritma peningkatan skala, dengan tanda tangan yang mungkin sulit untuk dideteksi dengan jelas tanpa pengetahuan tentang konten gambar (sebagai contoh ekstrem, area yang dinaikkan warna seragamnya masih berwarna seragam ...).
Kemungkinan suatu opsi adalah menghitung metrik untuk kompleksitas gambar, seperti perkiraan entropi (misalnya, lihat /programming/4935380/get-or-calculate-theentent-of-an-im-image-with -ruby-and-imagemagick ).
Jika Anda melakukan ini pada sejumlah besar gambar, Anda dapat menghasilkan statistik untuk seluruh koleksi. Anda kemudian dapat meninjau gambar yang outlier secara manual dalam statistik tersebut.
Sayangnya, ini akan selalu menghasilkan hasil positif palsu dan gambar yang telah ditingkatkan skala mungkin tidak dapat ditangkap (tetapi jika mereka baik, apakah itu penting?)
sumber
Saya akan mengambil pendekatan hybrid. Saya pikir ide-ide lain untuk menggunakan Perbedaan Gaussians, memeriksa EXIF atau metadata lainnya, atau bahkan FFT dapat digabungkan. Cara lain yang mungkin lebih mudah adalah dengan hanya mengambil setiap gambar, menurunkan skala, meningkatkan lagi dan membandingkan. Jika mereka sangat mirip (menggunakan sesuatu seperti Delta E , mungkin), maka kemungkinan mereka meningkat (atau buram seperti yang disarankan oleh pos lain). Mungkin Anda bisa membuat ambang batas jumlah tes lulus vs gagal? Jika lebih dari setengah tes lulus, maka itu baik, jika tidak, itu buruk, atau perlu intervensi manusia untuk memverifikasi, atau sesuatu seperti itu.
sumber
Anda harus dapat melakukan pekerjaan yang cukup baik dengan membongkar sebagian data JPEG itu sendiri dan melakukan penghitungan sepele.
Data JPEG dibuat dengan melakukan transformasi cosine diskrit pada data gambar asli, mengkuantisasi (membuang data resolusi tinggi), kemudian berjalan melalui blok DCT yang dihasilkan dalam pola zigzag dan mengemas aliran bit yang dihasilkan dengan pengkodean Huffman.
Jika Anda membalikkan kode Huffman dan membatalkan zigzag, Anda akan memiliki serangkaian blok DCT 8x8, di mana data frekuensi terendah ada di sudut kiri atas blok dan informasi frekuensi tertinggi ada di kanan bawah.
Apa artinya itu adalah bahwa Anda benar-benar dapat melirik data dalam format menengah itu dan mengatakan apakah itu upampled, karena semua blok 8x8 akan memiliki nilai bukan nol hanya di sudut kiri atas (kurang-lebih).
sumber
Sebenarnya kamu bisa
Anda tidak perlu anjing untuk mengendus gambar. Pergi ke:
http://rest7.com/image_upscaled
Di halaman ini Anda dapat mengunggah gambar Anda dan akan mendapatkan dimensi asli , seperti ini:
Terkadang tidak menebak resolusi asli dengan benar. Saya pikir itu tergantung algoritma up-scaling apa yang digunakan pada foto. Saya juga menemukan bahwa jika sebuah foto ditingkatkan dan dikompres ke format JPEG dengan kompresi besar (seperti 30%) artefak JPEG membuat halaman ini lebih sulit ditebak. Tetapi jika foto Anda berkualitas baik, ditingkatkan menggunakan metode yang populer (Lanczos, Bilinear) itu harus cukup akurat.
Berikut adalah 2 contoh gambar:
ASLI
https: // i. tumpukan. imgur com / iXYKV.png
(maaf, saya tidak memiliki reputasi yang cukup untuk mengirim lebih dari 2 tautan)
TERGUGAT & BANYAK
Jika Anda memposting foto yang dipangkas, halaman ini akan kembali:
Jadi Anda bisa melihatnya mendeteksi gambar diperbesar dan dipotong. Itu tidak akan memberi tahu Anda ukuran gambar asli sebelum memotong karena itu tidak mungkin untuk mendapatkan informasi tentang sesuatu yang dihapus hanya dari piksel yang dibiarkan utuh.
sumber