Bagaimana saya bisa mendeteksi foto yang ditingkatkan?


8

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?


Hanya untuk memperjelas, apakah Anda bertanya tentang deteksi sepenuhnya otomatis, tanpa evaluasi oleh bola mata manusia?
junkyardsparkle

4
Untuk pengujian otomatis, stackoverflow lebih cenderung memberi Anda jawaban
Renan Le Caro

@Renan Bahkan tes manual menggunakan urutan filter GIMP dapat bekerja untuk pemeriksaan langsung gambar penjual tertentu.
Damian Yerrick

1
Saya kira pertanyaan yang perlu kita tanyakan adalah mengapa Anda peduli? Jawabannya cukup berbeda ...
James Snell

@JamesSnell Foto buruk mengusir pembeli. Lihat misalnya panduan eBay .
Damian Yerrick

Jawaban:


9

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).

  1. Buka gambar dalam GIMP atau editor foto berlapis lainnya.
  2. Gandakan layer.
  3. Terapkan Gaussian Blur dengan jari-jari 1 piksel ke lapisan baru ini.
  4. Ubah mode lapisan ke "Perbedaan". Gambar akan menjadi hitam kecuali bagian tepinya.
  5. Ulangi langkah 1-4 untuk gambar tajam yang diketahui memiliki materi, komposisi, dan ukuran yang serupa.
  6. Bandingkan intensitas tepi pada dua gambar yang berbeda. Anda dapat melihat ini atau menggunakan histogram.

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.

  1. Buka gambar.
  2. Gandakan layer.
  3. Matikan layer baru satu piksel ke atas atau ke kiri.
  4. Ubah mode lapisan ke "Perbedaan".
  5. Cari pola garis kosong.

1
Bagaimana jika gambar yang ditingkatkan memiliki topeng unsharp yang sangat kuat diterapkan?
Silakan Baca Profil Saya

1
@mattdm unsharp mask meningkatkan kontras, itu tidak membuat konten gambar frekuensi tinggi.
Matt Grum

@mattdm USM adalah high-boost filter: 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.
Damian Yerrick

1

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?)


Saya suka bagian terakhir - jika tidak ada yang tahu, siapa yang peduli? Mengingatkan saya pada Xkcd ini . (Peringatan: bahasa yang kuat.)
Silakan Baca Profil Saya

0

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.


0

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).


0

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:

{
  "is_upscaled": true,
  "current_width": "2000",
  "current_height": "928",
  "original_width": "1750",
  "original_height": "696",
  "accuracy": "82%",
  "accuracy_width": "82%",
  "accuracy_height": "82%",
  "success": 1
}

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

masukkan deskripsi gambar di sini

Jika Anda memposting foto yang dipangkas, halaman ini akan kembali:

{
  "is_upscaled": true,
  "current_width": "700",
  "current_height": "300",
  "original_width": 352.33333333333,
  "original_height": 151,
  "accuracy": "57%",
  "accuracy_width": "57%",
  "accuracy_height": "57%",
  "cropped": true,
  "success": 1
}

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.


Situs itu hanya akan berfungsi selama Anda bisa mempercayai data yang disematkan dalam gambar. Namun sepele mudah untuk memodifikasi data tersebut. Dan jika saya mencoba menipu pasar untuk mencari uang, saya akan mengubah data ke kanan dan tengah.
Peter M

@PeterM Saya tidak yakin apa yang Anda maksud. Anda ingin memotong gambar? Situs ini masih akan mendeteksi bahwa itu ditingkatkan.
Jack

Tanyakan pada diri Anda bagaimana ia tahu bahwa gambar telah dipangkas. Menurut Anda di mana informasi disimpan yang memberi tahu ukuran gambar aslinya?
Peter M

@PeterM Yah, saya tidak yakin bagaimana tepatnya itu bekerja tetapi saya menggunakannya sedikit dan saya dapat memberitahu Anda itu menganalisa piksel dan mendeteksi resolusi asli berdasarkan itu. Itu tidak menganalisis format file tetapi piksel itu sendiri. Jadi resolusi asli tidak disimpan di mana pun.
Jack

@ Jack Ketika "itu menganalisis piksel", itu mungkin menggunakan sesuatu seperti DOG.
Damian Yerrick
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.