Dalam perangkat lunak pengedit gambar yang populer terdapat fitur, yaitu tambalan (Istilah yang digunakan dalam pemrosesan gambar adalah pewarnaan seperti yang ditunjukkan oleh @ mınxomaτ.) Area gambar yang dipilih, berdasarkan informasi di luar tambalan itu. Dan itu melakukan pekerjaan yang cukup baik, mengingat itu hanya sebuah program. Sebagai manusia, kadang-kadang Anda bisa melihat ada sesuatu yang salah, tetapi jika Anda memicingkan mata atau hanya melirik sebentar, tambalan itu sepertinya mengisi kekosongan dengan cukup baik.
Tantangan
Diberikan gambar dan topeng yang menentukan area persegi panjang dari gambar harus ditambal (juga sebagai gambar, atau format lain yang disukai), program Anda harus mencoba untuk mengisi area yang ditentukan dengan tambalan yang mencoba untuk berbaur dengan sisa foto. Program tidak dapat menggunakan informasi dari gambar asli yang berada dalam area yang ditentukan.
Anda dapat mengasumsikan bahwa tambalan selalu setidaknya lebarnya dari sisi, dan tinggi dari bagian atas dan bawah gambar. Itu berarti area maksimum tambalan adalah 1/9 dari keseluruhan gambar.
Harap tambahkan deskripsi singkat tentang cara kerja algoritme Anda.
Pemungutan suara
Para pemilih diminta untuk menilai seberapa baik algoritma bekerja dan memberikan suara yang sesuai.
Beberapa saran tentang cara menilai: (Sekali lagi, terima kasih @ mınxomaτ untuk beberapa kriteria lainnya.)
- Jika Anda menyipitkan mata dan gambar terlihat bagus?
- Bisakah Anda tahu persis di mana tambalan itu berada?
- Seberapa baik struktur dan tekstur dari latar belakang gambar dan area sekitarnya dilanjutkan?
- Berapa banyak piksel warna salah yang mengandung area yang diedit?
- Apakah ada gumpalan / blok berwarna seragam di daerah yang tampaknya tidak termasuk di sana?
- Apakah area yang diedit memiliki perubahan drastis / kontras atau kecerahan dibandingkan dengan gambar lainnya?
Kriteria validitas
Agar kiriman valid, gambar output harus sama persis dengan gambar input di luar area yang ditentukan.
Kasus cobaan
Di sebelah kiri gambar sumber, di sebelah kanan topeng yang sesuai:
inpaint.exe left top width height img.jpg
)?Jawaban:
Otomatis , VB
pengantar
Ini adalah implementasi dari Penghapusan Objek oleh algoritma Inpainting Berbasis-Exemplar yang dikembangkan oleh A. Criminisi, P. Perez (Cambridge Microsoft Research Ltd.) dan K. Toyama (Microsoft) [X] . Algoritma ini ditargetkan pada gambar informasi tinggi (dan bingkai video) dan bertujuan untuk menjadi keseimbangan antara rekonstruksi struktural dan rekonstruksi organik. Paragraf jawaban ini berisi kutipan teks lengkap dari kertas asli (karena tidak lagi tersedia secara resmi) untuk membuat jawaban ini lebih mandiri.
Algoritma
Sasaran : Ganti area yang dipilih ( bertopeng ) (lebih disukai objek latar depan yang dipisahkan secara visual) dengan latar belakang yang masuk akal secara visual.
Dalam karya sebelumnya, beberapa peneliti telah mempertimbangkan sintesis tekstur sebagai cara untuk mengisi daerah gambar besar dengan tekstur "murni" - pola tekstur dua dimensi berulang dengan stokastik moderat. Ini didasarkan pada sejumlah besar penelitian sintesis-tekstur, yang berupaya mereplikasi tekstur ad infinitum , dengan sampel sumber kecil tekstur murni [1] [8] [9] [10] [11] [12] [14] [15] [16] [19] [22] .
Sama efektifnya dengan teknik-teknik ini dalam mereplikasi tekstur yang konsisten, mereka mengalami kesulitan mengisi lubang pada foto-foto pemandangan dunia nyata, yang seringkali terdiri dari struktur linear dan tekstur komposit - banyak tekstur berinteraksi secara spasial [23] . Masalah utama adalah bahwa batas-batas antara daerah gambar adalah produk kompleks yang saling mempengaruhi antara tekstur yang berbeda. Berbeda dengan sifat dua dimensi dari tekstur murni, batas-batas ini membentuk apa yang mungkin dianggap lebih satu-dimensi, atau linear, struktur gambar.
Teknik pengecatan gambar mengisi lubang pada gambar dengan menyebarkan struktur linier (disebut isofot dalam literatur pewarnaan ) ke dalam wilayah target melalui difusi. Mereka terinspirasi oleh persamaan diferensial parsial dari aliran panas fisik, dan bekerja secara meyakinkan sebagai algoritma restorasi. Kelemahan mereka adalah proses difusi menghasilkan beberapa blur, yang terlihat jelas.
Wilayah yang akan diisi, yaitu, wilayah target ditandai dengan Ω, dan konturnya dilambangkan δΩ. Kontur berkembang ke dalam seiring dengan perkembangan algoritma, dan karenanya kami juga menyebutnya sebagai "bagian depan isi". Wilayah sumber, Φ, yang tetap diperbaiki di seluruh algoritma, menyediakan sampel yang digunakan dalam proses pengisian. Kami sekarang fokus pada satu iterasi algoritma untuk menunjukkan bagaimana struktur dan tekstur ditangani secara memadai oleh sintesis berbasis contoh. Misalkan templat kotak Ψp ∈ Ω yang berpusat pada titik p (gb. 2b), harus diisi. Sampel yang paling cocok dari wilayah sumber berasal dari patch Ψqˆ ∈ Φ, yang paling mirip dengan bagian-bagian yang sudah diisi dengan Ψp. Dalam contoh dalam gambar. 2b, kita melihat bahwa jika liesp terletak pada kelanjutan tepi gambar, kecocokan terbaik yang paling mungkin akan terletak di sepanjang tepi yang sama (atau berwarna sama) (misalnya, Ψq 'dan Ψq' 'dalam gambar 2c). Semua yang diperlukan untuk menyebarkan isophote ke dalam adalah transfer sederhana dari pola dari patch sumber yang paling cocok (gbr. 2d). Perhatikan bahwa orientasi isophote secara otomatis dipertahankan. Dalam gambar, meskipun fakta bahwa tepi asli tidak ortogonal dengan kontur target δΩ, struktur yang diperbanyak telah mempertahankan orientasi yang sama seperti di wilayah sumber.
Detail Implementasi dan Algoritma
Fungsionalitas implementasi ini diringkas dalam ActiveX COM DLL yang dikeluarkan dari program host sebagai biner dan kemudian dipanggil saat itu dengan memanggil inpainter oleh IID. Dalam kasus khusus ini, API ditulis dalam VisualBasic dan dapat dipanggil dari bahasa yang mengaktifkan COM. Bagian berikut dari kode menjatuhkan biner:
Perpustakaan kemudian dipakai menggunakan CLSID dan IID:
Perpustakaan menerima pegangan GDIOBJECT, khususnya DIBSection dari setiap bitmap GDI / + (file, stream dll.). File gambar yang ditentukan dimuat, dan ditarik ke bitmap kosong yang dibangun dari
Scan0
dimensi gambar input.File input untuk implementasi ini adalah format file yang kompatibel dengan GDI / + yang berisi data gambar yang di-mask. The mask (s) adalah satu atau lebih seragam berwarna daerah di citra input. Pengguna memasok nilai warna RGB untuk topeng, hanya piksel dengan nilai warna yang tepat yang akan cocok. Warna masking default adalah hijau (0, 255, 0). Semua wilayah bertopeng bersama-sama mewakili wilayah target, Ω, untuk dihapus dan diisi. Wilayah sumber, Φ, didefinisikan sebagai seluruh gambar dikurangi wilayah target (Φ = I − Ω).
Selanjutnya, seperti semua sintesis tekstur berbasis contoh [10] , ukuran jendela templat Ψ (alias " jari-jari pindai ") harus ditentukan. Implementasi ini memberikan ukuran jendela default 6 ² piksel, tetapi dalam praktiknya mengharuskan pengguna untuk mengaturnya menjadi sedikit lebih besar dari elemen tekstur terbesar yang dapat dibedakan, atau "texel", di wilayah sumber. Modifikasi tambahan untuk algoritma asli adalah " ukuran blok " yang dapat ditentukan pengguna yang menentukan area piksel yang akan diganti dengan warna seragam yang baru. Ini meningkatkan kecepatan dan menurunkan kualitas. Ukuran blok geater dari 1px dimaksudkan untuk digunakan dengan area yang sangat seragam (air, pasir, bulu, dll.), Namun, kept harus dijaga maksimal. .5x ukuran blok (yang tidak mungkin tergantung pada mask).
Untuk tidak menghentikan algoritme pada gambar 1bit, setiap kali gambar dengan kurang dari 5 warna diterima, ukuran jendela diperkuat oleh 10x.
Setelah parameter ini ditentukan, sisa proses pengisian wilayah sepenuhnya otomatis. Dalam algoritme kami, setiap piksel mempertahankan nilai warna (atau "kosong", jika piksel tidak terisi) dan nilai kepercayaan, yang mencerminkan kepercayaan kami pada nilai piksel, dan yang dibekukan setelah piksel diisi. Selama algoritma berlangsung, tambalan di sepanjang bagian depan isian juga diberikan nilai prioritas sementara, yang menentukan urutan pengisiannya. Kemudian, algoritma kami mengulangi tiga langkah berikut hingga semua piksel terisi.
Langkah 1: Komputasi prioritas tambalan
Mengisi urutan sangat penting untuk sintesis tekstur non-parametrik [1] [6] [10] [13] . Sejauh ini, favorit default adalah metode "bawang bawang", di mana wilayah target disintesis dari luar ke dalam, di lapisan konsentris. Algoritme kami melakukan tugas ini melalui algoritma pengisian terbaik-pertama yang sepenuhnya bergantung pada nilai-nilai prioritas yang ditetapkan untuk setiap tambalan di bagian depan pengisian. Komputasi prioritas bias terhadap tambalan-tambalan yang berada di kelanjutan tepi yang kuat dan yang dikelilingi oleh piksel kepercayaan tinggi, piksel ini adalah batas, ditandai dengan nilai -2. Kode berikut menghitung ulang prioritas:
Diberikan patch Ψp yang berpusat pada titik p untuk beberapa p ∈ δΩ (lihat gambar 3), prioritasnya P (p) didefinisikan sebagai produk dari kepercayaan yang dihitung (
ComputeConfidence
, atau C (p) ) dan istilah data (ComputeData
, atau D (p) ), di manadimana
| Ψp | adalah area Ψp, α adalah faktor normalisasi (misalnya, α = 255 untuk gambar tingkat abu-abu khas), dan np adalah vektor satuan ortogonal ke depan δΩ pada titik p. Prioritas dihitung untuk setiap tambalan perbatasan, dengan tambalan berbeda untuk setiap piksel pada batas wilayah target.
Diimplementasikan sebagai
Istilah kepercayaan C (p) dapat dianggap sebagai ukuran dari jumlah informasi yang dapat dipercaya seputar piksel p. Tujuannya adalah untuk mengisi dulu tambalan-tambalan yang memiliki lebih banyak pikselnya yang sudah terisi, dengan preferensi tambahan yang diberikan pada piksel yang diisi sejak dini (atau yang tidak pernah menjadi bagian dari wilayah target).
Ini secara otomatis menggabungkan preferensi terhadap bentuk-bentuk tertentu di sepanjang bagian depan isian. Misalnya, tambalan yang menyertakan sudut dan sulur tipis wilayah target akan cenderung terisi lebih dulu, karena dikelilingi oleh lebih banyak piksel dari gambar asli. Tambalan ini memberikan informasi yang lebih andal untuk dicocokkan. Sebaliknya, tambalan di ujung "semenanjung" piksel terisi yang menjorok ke wilayah target akan cenderung disisihkan sampai lebih banyak piksel sekitarnya diisi. Pada tingkat kasar, istilah C (p) dari (1) kira-kira memberlakukan perintah pengisian konsentris yang diinginkan.
Saat pengisian berlangsung, piksel di lapisan luar wilayah target akan cenderung ditandai dengan nilai kepercayaan yang lebih besar, dan karenanya diisi lebih awal; piksel di tengah wilayah target akan memiliki nilai kepercayaan yang lebih rendah. Istilah data D (p) adalah fungsi dari kekuatan isofot yang mengenai bagian depan δΩ pada setiap iterasi. Istilah ini meningkatkan prioritas tambalan yang isophote "mengalir" ke dalamnya. Faktor ini sangat penting dalam algoritma kami karena ini mendorong struktur linear untuk disintesis terlebih dahulu, dan, oleh karena itu, disebarkan dengan aman ke wilayah target. Garis putus-putus cenderung terhubung, dengan demikian mewujudkan "Prinsip Konektivitas" psikologi penglihatan [7] [17] .
Urutan isian tergantung pada sifat-sifat gambar, menghasilkan proses sintesis organik yang menghilangkan risiko artefak "struktur-rusak" dan juga mengurangi artefak gumpal tanpa langkah patch-cutting yang mahal [9] atau langkah blending-inducing blending [19] ] .
Langkah 2: Menyebarkan informasi tekstur dan struktur
Setelah semua prioritas pada bidang isian ( batas ) telah dihitung, tambalan Ψpˆ dengan prioritas tertinggi ditemukan. Kami kemudian mengisinya dengan data yang diekstraksi dari wilayah sumber Φ. Kami menyebarkan tekstur gambar dengan pengambilan sampel langsung dari wilayah sumber. Mirip dengan [10] , kami mencari di daerah sumber untuk tambalan yang paling mirip dengan Ψpˆ. Secara formal,
dimana
jarak d (Ψa, Ψb) antara dua tambalan generik Ψa dan Ψb secara sederhana didefinisikan sebagai jumlah perbedaan kuadrat (SSD) dari piksel yang sudah terisi di dua tambalan. Tidak ada analisis atau manipulasi lebih lanjut ( terutama tidak kabur ) dilakukan pada langkah ini. Perhitungan ini berjalan di loop siklus utama dan diimplementasikan sebagai berikut:
Mendapatkan prioritas maksimum:
Menemukan tambalan yang paling mirip:
Langkah 3: Memperbarui nilai kepercayaan
Setelah patch Ψpˆ diisi dengan nilai-nilai piksel baru, kepercayaan C (p) diperbarui di area yang dibatasi oleh Ψpˆ sebagai berikut:
Aturan pembaruan sederhana ini memungkinkan kami untuk mengukur kepercayaan relatif tambalan di bagian depan pengisian, tanpa parameter khusus gambar. Saat pengisian berlangsung, nilai kepercayaan menurun, yang menunjukkan bahwa kami kurang yakin dengan nilai warna piksel di dekat pusat wilayah target. Diimplementasikan di sini (bersama dengan semua pembaruan lain yang diperlukan):
Kode Lengkap
Inilah kode yang bisa dijalankan, lengkap dengan kode sumber perpustakaan sebagai komentar.
Kode ini dipanggil oleh
Contohnya termasuk dalam bentuk
batalkan komentar contoh yang ingin Anda jalankan menggunakan CTRL+ Q.
File Tes Resmi
Algoritma ini dibuat agar dapat disesuaikan untuk setiap gambar. Oleh karena itu, nilai default (dan juga masker default) sepenuhnya suboptimal. Nilai default dipilih sehingga setiap sampel dapat diproses dalam jumlah waktu yang wajar. Saya sangat merekomendasikan untuk bermain dengan topeng berbentuk tidak teratur dan ukuran jendela yang lebih baik. Klik gambar untuk memperbesar!
Papan main dam
→
American Gothic
→
Labirin
→
Mona lisa
→
(topeng mengerikan)
Berteriak
→
Penuh bintang
→
Contoh Dunia Nyata
Ini semua menggunakan topeng digambar tangan kustom.
Jika Anda memiliki gambar menarik lainnya yang ingin Anda sertakan, tinggalkan komentar.
Perbaikan EBII
Ada beberapa varian EBII di luar sana, yang dibuat oleh berbagai peneliti. AnkurKumar Patel menarik perhatian saya dengan koleksi makalahnya [24] tentang berbagai peningkatan EBII.
Secara khusus makalah " Algoritma Robust Peningkatan Untuk Contoh Berbasis Gambar Inpainting " [25] menyebutkan dua perbaikan pada penimbangan nilai prioritas.
Perbaikan
Modifikasi efektif ada pada Langkah 1 (lihat di atas) dari algoritma, dan memperluas efek C (p) dan D (p) pada peringkat prioritas untuk piksel ini menggunakan ini:
Dalam rumus untuk C dan D yang diberikan di atas, dan masing-masing merupakan faktor normalisasi (misalnya, α = 255), vektor isophote, dan vektor satuan ortogonal ke depan di titik p.
Lebih lanjut,
Fungsi prioritas didefinisikan sebagai jumlah bobot dari istilah kepercayaan teregulasi C (p) dan istilah data baru D (p) . Di mana α adalah koefisien penyesuaian, memuaskan 0Rp (p) didefinisikan sebagai berikut:
Di mana α dan β masing-masing merupakan bobot komponen dari kepercayaan dan istilah data. Perhatikan bahwa α + β = 1 .
Penilaian obyektif
Apa yang benar-benar menarik adalah bahwa makalah ini berisi metode yang diusulkan (dan sederhana!) Untuk mencetak kinerja jika algoritma EBII. Ambil ini dengan sebutir garam, karena ini adalah metode yang dipilih oleh penulis kertas sendiri untuk memverifikasi efektivitas pendekatan varians yang diusulkan dan perbaikan pada beberapa gambar.
Evaluasi hasil dilakukan dengan membandingkan PSNR (Peak Signal-to-Noise Ratio [26] ) antara gambar yang dipulihkan dan gambar asli. Umumnya semakin tinggi nilai PSNR, semakin besar kesamaan gambar yang diperbaiki dengan aslinya. Persamaan untuk menghitung PSNR adalah sebagai berikut:
Ini adalah 2 (dua!) Gambar uji dunia nyata mengejutkan yang mereka gunakan:
Kesimpulannya sama mengecewakannya dengan kualitas kertas itu sendiri. Ini menunjukkan sedikit peningkatan. Hal utama di sini adalah metode skoring objek yang mungkin untuk tantangan semacam ini (dan tantangan perbaikan citra lainnya):
Ah.
Penelitian harus dilakukan
(Khusus untuk EBII)
a) Pra-Pemrosesan
Semuanya bermuara pada prinsip "Magic Erase" bahwa algoritma harus "hanya bekerja" untuk semuanya. Solusi naif saya untuk ini adalah amplifikasi berbasis warna (lihat di atas), tetapi ada cara yang lebih baik. Saya berpikir untuk mengenali rata-rata geometrik dari semua texel yang dapat dilacak untuk secara otomatis menyesuaikan ukuran jendela dan membuat ukuran perangko (juga peningkatan saya) tergantung pada resolusi texel dan seluruh gambar. Penelitian harus dilakukan di sini.
b) Pasca Pemrosesan
Penulis asli telah melakukan pekerjaan yang baik untuk menghilangkan prasangka semua filter pemrosesan pos yang ada dalam pikiran. Hari ini, saya mencoba sesuatu yang lain, terinspirasi oleh Mona Lisa yang selalu aneh (terima kasih undergroundmonorail). Jika Anda hanya mengambil daerah yang dicat dan menerapkan topeng baru ke semua blok warna aneh dan memasukkannya ke dalam algoritma despeckling, Anda akan mendapatkan hasil yang hampir sempurna. Saya dapat menjelajahi ini beberapa waktu di masa depan.
[X] - Penghapusan Objek oleh Inpainting Berbasis Contoh oleh A. Criminisi, P. Perez, K. Toyama
[1] - M. Ashikhmin. Mensintesis tekstur alami. Di Proc. ACM Symp. pada Interactive 3D Graphics, hlm. 217–226, Research Triangle Park, NC, Mar 2001.
[5] - M. Bertalmio, L. Vese, G. Sapiro, dan S. Osher. Struktur dan tekstur gambar yang simultan. tampil, 2002
[6] - R. Bornard, E. Lecan, L. Laborelli, dan JH. Chenot. Koreksi data tidak ada dalam gambar diam dan urutan gambar. Dalam ACM Multimedia, Prancis, Desember 2002.
[7] - TF Chan dan J. Shen. Pewarnaan non-tekstur dengan difusi curvature-driven (CDD). J. Visual Comm. Image Rep., 4 (12), 2001.
[8] - JS de Bonet. Prosedur pengambilan sampel multiresolusi untuk analisis dan sintesis gambar tekstur. Di Proc. ACM Conf. Comp. Grafik (SIGGRAPH), volume 31, hlm. 361-368, 1997.
[9] - A. Efros dan WT Freeman. Gambar quilting untuk sintesis dan transfer tekstur. Di Proc. ACM Conf. Comp. Grafik (SIGGRAPH), hlm. 341–346, Eugene Fiume, Agustus 2001.
[10] - A. Efros dan T. Leung. Sintesis tekstur dengan pengambilan sampel non-parametrik. Di Proc. ICCV, hlm. 1033-1038, Kerkyra, Yunani, Sep 1999.
[11] - WT Freeman, EC Pasztor, dan PL Carmichael. Mempelajari visi tingkat rendah. Int. J. Computer Vision, 40 (1): 25–47, 2000.
[12] - D. Garber. Model Komputasi untuk Analisis Tekstur dan Sintesis Tekstur. Tesis PhD, Univ. California Selatan, AS, 1981.
[13] - P. Harrison. Prosedur non-hierarkis untuk sintesis ulang tekstur kompleks. Di Proc. Int. Conf. Eropa Tengah Comp. Grafik, Visua. dan Comp. Visi, Plzen, Republik Ceko, Februari 2001.
[14] - DJ Heeger dan JR Bergen. Analisis / sintesis tekstur berbasis piramida. Di Proc. ACM Conf. Comp. Grafik (SIGGRAPH), volume 29, hlm. 229–233, Los Angeles, CA, 1995.
[15] - A. Hertzmann, C. Jacobs, N. Oliver, B. Curless, dan D. Salesin. Analogi gambar. Di Proc. ACM Conf. Comp. Grafik (SIGGRAPH), Eugene Fiume, Agustus 2001.
[16] - H. Igehy dan L. Pereira. Penggantian gambar melalui sintesis tekstur. Di Proc. Int. Conf. Pemrosesan Gambar, hal. III: 186–190, 1997.
[17] - G. Kanizsa. Organisasi dalam Visi. Praeger, New York, 1979.
[19] - L. Liang, C. Liu, Y.-Q. Xu, B. Guo, dan H.-Y. Shum. Sintesis tekstur waktu nyata dengan pengambilan sampel berbasis tambalan. Dalam ACM Transactions on Graphics, 2001.
[22] - L.-W. Wey dan M. Levoy. Sintesis tekstur cepat menggunakan kuantisasi vektor terstruktur pohon. Dalam Proc. ACM Conf. Comp. Grafik (SIGGRAPH), 2000.
[23] - A. Zalesny, V. Ferrari, G. Caenen, dan L. van Gool. Sintesis tekstur komposit paralel. Dalam lokakarya Texture 2002 - (dalam hubungannya dengan ECCV02), Kopenhagen, Denmark, Jun 2002.
[24] - AkurKumar Patel, Universitas Teknologi Gujarat, Ilmu Komputer dan Teknik
[25] - Peningkatan Algoritma Kuat Untuk Contoh Gambar Berbasis Gambar
[26] - Wikipedia, Peak-Signal-to-Noise-Ratio
sumber
Matlab
Ini adalah pendekatan interpolasi sederhana. Idenya adalah mencerminkan apa yang ada di setiap sisi tambalan. Kemudian piksel gambar cermin tersebut diinterpolasi oleh seberapa dekat mereka dengan tepi yang sesuai:
Bagian yang sulit adalah menemukan bobot interpolasi yang bagus. Setelah beberapa bermain-main saya datang dengan fungsi rasional yang nol di semua tepi kecuali yang kita cerminkan. Ini kemudian ditransformasikan oleh polinomial tingkat ketiga untuk beberapa perataan:
Pendekatan sederhana ini sangat mengejutkan pada gambar "alami", tetapi segera setelah Anda berhadapan dengan tepi yang tajam, permainan berakhir. Dalam contoh gothic Amerika , paku garpu jerami berbaris dengan baik dengan kisi-kisi pixel, yang membuatnya terlihat cukup bagus, tetapi sebaliknya akan jauh lebih buruk.
Jadi di sini hasilnya:
Dan akhirnya, kodenya:
sumber
Mathematica
Ini menggunakan
Inpaint
fungsi Mathematica . Karena Mathematica sendiri melakukan semua hal yang berat, ini adalah wiki komunitas.inPaint
(di bawah) adalah adaptasi sederhana dariInpaint
. Untuk lukisan / foto berwarna, menggunakan pengaturan default, "TextureSynthesis",. Jika mendeteksi bahwa gambar berwarna hitam dan putih (karena data gambar gambar sama dengan data gambar dari bentuk biner gambar), maka ia akan meng-binari gambar dan menerapkan tambalan "TotalVariation". TheIf
klausul baik berlakuBinarize
atauIdentity
gambar. (Identity
Fungsi mengembalikan argumennya tidak berubah.)Gambar dan topeng dimasukkan sebagai argumen
inPaint
.Partition
danGrid
hanya untuk keperluan format.Keluaran telah ditambal. Tidak ada retouching gambar setelahnya
inPaint
.sumber
Inpaint
tampaknya mencari simetri di seluruh gambar hitam dan putih. - DavidC 9 jam yang laluPython 2 dan PIL
Program ini memadukan salinan wilayah Utara, Selatan, Timur, dan Barat untuk membuat piksel pengganti yang menggunakan warna, tekstur, dan bayangan dari wilayah gambar lokal.
Contoh output:
Kode pertama kali menemukan kotak pembatas untuk tambalan. Kemudian untuk setiap piksel yang akan dihasilkan, itu menghitung warna setiap saluran (RGB) berdasarkan jumlah tertimbang dari 4 wilayah sekitarnya.
sumber
Python 3, PIL
Program ini menggunakan operator sobel, dan menggambar garis berdasarkan gambar itu.
Operator sobel menemukan sudut setiap tepi, sehingga setiap tepi yang mengekstrusi ke area yang tidak diketahui harus dilanjutkan.
Sementara itu, berikut adalah contoh gambarnya.
Mona Lisa Mona Lisa Ḿ͠oǹ̰͎̣a ̾̇Lisa Ḿ͠o̢̎̓̀ǹ̰͎̣aͧ̈ͤ ̣̖̠̮̘̹̠̾̇ͣLisa Ḿ̳̜͇͓͠o̢̎̓̀ǹ̰͎̣͙a̤̩̖̞̝ͧ̈ͤͤ ̣̖̠̮̘̹̠̾̇ͣL͉̻̭͌i̛̥͕̱͋͌ş̠͔̏̋̀ạ̫͕͎ͨͮͪ̐͡ͅ
Area pada gambar di atas sehalus kaktus
Ini tidak terlalu bagus dengan warna konstan.
sumber
Python 2
Skrip python sederhana yang membuat tambalan menggunakan nilai dari piksel di luar celah. Dibutuhkan nilai warna dari akhir baris dan kolom piksel dan menghitung rata-rata tertimbang menggunakan jarak dari piksel tersebut.
Outputnya tidak begitu cantik, tapi itu seni .
Dan kemudian, kode:
sumber
Mathematica
Kebetulan bahwa Mathematica memiliki fungsi bawaan yang melakukan tugas ini dengan tepat, dan maksud saya persis :
Secara default ia menggunakan "metode sintesis tekstur terbaik menggunakan random sampling" yang menghasilkan hasil yang baik pada lukisan, tetapi hasil yang buruk untuk labirin dan kotak-kotak:
Bermain-main dengan pengaturan tidak membuat saya mengalami peningkatan kualitas di semua gambar, jadi saya hanya menggunakan default (untuk menyimpan byte —
codegolf.se
bagaimanapun juga!).sumber
Binarize
(untuk menghilangkan noda abu-abu). Coba ini:methods = {"TextureSynthesis", "Diffusion", "FastMarching", "NavierStokes", "TotalVariation"};g[pic_, mask_] := Join[{Labeled[Framed@pic, "Original"]}, Labeled[ Binarize@Inpaint[pic, mask, Method -> #], #] & /@ methods]
TextureSynthesis
terlihat bagus di lukisan; dan saya pikir kami tidak diizinkan untuk menyetel pengaturan kami untuk setiap kasus uji individual. (Jika kita bisa, maka kita bisa dengan sepele memasok bagian yang hilang sebagai 'pengaturan'.)inPaint[picture_, mask_] := If[bw = ImageData@Rasterize[Binarize[picture]] == ImageData[picture], Binarize, Identity]@ Inpaint[picture, mask, Method -> If[bw, "TotalVariation", "TextureSynthesis"]]
Python3
Jawaban ini mengimplementasikan ide dalam makalah "Deep Image Prior" oleh Ulyanov et al. (CVPR 2018) Dalam makalah ini mereka mengeksplorasi gagasan bahwa cara jaring saraf berkinerja baik untuk pemrosesan gambar dirancang secara dekat mencerminkan gagasan kami tentang seperti apa gambar alami (distribusi "sebelum").
Mereka mengusulkan metode yang dapat digunakan untuk pewarnaan serta penghapusan noise dan artefak yang hanya menggunakan gambar yang diberikan tanpa pelatihan tentang data lainnya. Konsep aktualnya cukup sederhana: Jaring dilatih untuk menampilkan gambar yang diinginkan (untuk beberapa gangguan acak tetap sebagai input) dengan hanya menghukum erros di luar beberapa topeng yang diberikan. Jika Anda ingin menghilangkan kebisingan, Anda tidak perlu menutupi apa pun, tetapi berhenti saja di awal pelatihan.
Untuk pewarnaan, Anda menutupi bagian yang ingin Anda cat dan latih sampai konvergensi. Ini tentu saja tidak canggih, tetapi saya masih ingin mempostingnya dan mempostingnya di sini karena kesederhanaan ide dan kinerja yang masih luar biasa. Dalam eksperimen saya, pengecatan tambalan yang lebih besar ternyata tidak terlalu baik, tetapi untuk segmen yang lebih kecil hasilnya bisa jauh lebih meyakinkan.
Saya menerapkan ini menggunakan arsitektur U-Net populer dari jaxony on github . Kode untuk pelatihan dan pemrosesan gambar dapat ditemukan di bawah.
Latihan
Ini adalah visualisasi dari proses pelatihan. Setiap frame adalah status ofter sejumlah iterasi:
Contohnya
Kode
Perhatikan bahwa pada sebuah cpu, ini bisa memakan waktu berjam-jam hanya untuk satu gambar, sementara gpu yang diaktifkan dengan cpu yang baik mungkin membutuhkan waktu yang jauh lebih sedikit.
sumber
Python dengan OpenCV
OpenCV memiliki fungsi yang disebut inpaint. Ada dua jenis pewarnaan yang digunakan, saya akan menggunakan Metode Marching Cepat. Menurut dokumentasi, algoritma bekerja seperti ini:
Ini kode *:
Perhatikan bagaimana saya mengonversi BGR ke RGB karena alasan alasan. Saya juga memutarnya. Inilah hasilnya:
Mona Lisa kembali!
Seperti yang Anda lihat, ini bukan yang terbaik dengan dua warna.
sumber
Jawa
Pendekatan rata-rata warna. Mungkin bisa ditingkatkan.
Hasil:
sumber