Tugas Anda adalah membuat program yang mengambil gambar garis hitam-putih (contoh gambar di bawah) dan mengisinya dengan warna. Terserah Anda bagaimana Anda memisah-misahkan masing-masing wilayah dan warna yang mana untuk mengisinya (Anda bahkan bisa menggunakan RNG).
Sebagai contoh:
Seperti yang Anda lihat, saya jelas seorang seniman kaliber unggul dalam hal MS Paint.
Mencetak gol
Ini adalah kontes popularitas, jadi jawabannya dengan suara terbanyak menang. Pemilih didorong untuk menilai jawaban oleh
- Kriteria input: gambar apa pun yang terdiri dari latar belakang putih / abu-abu terang dan garis hitam / abu-abu gelap
- Seberapa baik pewarnaan dilakukan; artinya sedikit atau tidak ada area yang putih tidak seperti di atas (kecuali Anda jelas bermaksud menggunakan putih misalnya untuk awan)
- Kustomisasi warna yang digunakan di bagian tertentu
- Seberapa baik sistem bekerja pada serangkaian gambar yang berbeda (dengan detail yang bervariasi)
- Posting berapa lama program Anda mengambil per gambar. Kami mungkin tidak bermain golf kode, tetapi kode yang lebih pendek, lebih cepat, dan lebih efisien harus dianggap lebih baik
- Seharusnya menampilkan gambar baru ke layar atau ke file (tidak lebih dari 2MB sehingga dapat ditampilkan dalam jawaban)
- Tolong beri alasan mengapa Anda memilih untuk menampilkan tipe gambar itu dan berkomentar / jelaskan cara kerja kode Anda
- Penerapan warna yang digunakan untuk bentuk masing-masing terikat oleh (skema warna realistis yaitu rumput berwarna hijau, pagar kayu berwarna coklat dll.)
"Aku bisa mewarnai setiap area secara acak, tetapi jika aku bisa mengidentifikasi" pagar "dan membuatnya berwarna sama, maka itu adalah sesuatu yang patut mendapat pujian." - NathanMerrill
Melihat ini adalah kontes popularitas, Anda juga dapat menilai secara opsional dengan:
- Daya tarik keseluruhan (seberapa bagus gambar terlihat)
- Bakat artistik; jika Anda dapat memprogram dalam pewarnaan atau pewarnaan gaya cat air dll.
Secara umum, gambar terkecil yang dihasilkan (ukuran file) dengan kualitas tertinggi, dengan program berpuasa dan suara publik tertinggi akan menang.
Jika Anda memiliki spesifikasi penilaian lain yang menurut Anda harus digunakan, harap rekomendasikan mereka di komentar posting ini.
Contohnya
Saya tidak punya apa apa; semua contoh gambar adalah lisensi creative commons.
Sumber: https://pixabay.com/ro/stejar-arbore-schi%C5%A3%C4%83-natura-303890/ Sumber: http://www.freestockphotos.biz/stockphoto/10665 Sumber: http: / /crystal-rose1981.deviantart.com/art/Dragon-Tattoo-Outline-167320011 Sumber: http://jaclynonacloudlines.deviantart.com/art/Gryphon-Lines-PF-273195317 Sumber: http://captaincyprus.deviantart.com / art / Dragon-OutLine-331748686 Sumber: http://electric-meat.deviantart.com/art/A-Heroes-Farewell-280271639 Sumber: http://movillefacepalmplz.deviantart.com/art/Background-The-Pumpkin -Pertanian-of-Good-old-Days-342865938
EDIT: Karena anti-aliasing pada garis-garis yang menyebabkan piksel non-hitam / putih dan beberapa gambar yang mungkin mengandung abu-abu, bukan hitam / putih, sebagai tantangan bonus Anda dapat mencoba untuk mengatasinya. Seharusnya menurut saya cukup mudah.
sumber
Jawaban:
Airbrushing spektral (Python, PIL, Scipy)
Ini menggunakan algoritma matematika yang canggih untuk menghasilkan omong kosong penuh warna. Algoritma ini terkait dengan algoritma PageRank Google, tetapi untuk piksel, bukan halaman web.
Saya mengambil pendekatan ini karena saya berpikir bahwa tidak seperti metode berbasis pengisian banjir mungkin dapat mengatasi gambar seperti ayam dan pohon, di mana ada bentuk yang tidak sepenuhnya tertutup oleh garis hitam. Seperti yang dapat Anda lihat, ini berfungsi, meskipun cenderung berwarna di berbagai bagian langit dengan warna berbeda
Untuk yang berpikiran matematis: apa yang dilakukannya pada dasarnya adalah membangun grafik kedekatan dari piksel sementara dalam gambar, kemudian menemukan 25 vektor eigen teratas dari grafik Laplacian. (Kecuali itu tidak sepenuhnya seperti itu, karena kami memang menyertakan piksel gelap, kami hanya memberi koneksi lebih berat. Ini membantu dalam berurusan dengan antialiasing, dan juga tampaknya memberikan hasil yang lebih baik secara umum.) Setelah menemukan vektor eigen, ia menciptakan sebuah kombinasi linear acak dari mereka, ditimbang oleh nilai eigen terbalik mereka, untuk membentuk komponen RGB dari gambar output.
Untuk kepentingan waktu komputasi, gambar diperkecil sebelum melakukan semua ini, kemudian ditingkatkan kembali dan kemudian dikalikan dengan gambar asli. Namun, itu tidak berjalan cepat, membutuhkan waktu antara 2 dan 10 menit pada mesin saya, tergantung pada gambar input, meskipun untuk beberapa alasan ayam butuh 17 menit.
Sebenarnya mungkin untuk mengubah ide ini menjadi sesuatu yang berguna, dengan membuat aplikasi interaktif di mana Anda dapat mengontrol warna dan intensitas masing-masing vektor eigen. Dengan begitu Anda bisa memudar yang membagi langit menjadi beberapa bagian yang berbeda, dan memudar pada yang mengambil fitur yang relevan dari gambar. Tapi saya tidak punya rencana untuk melakukan ini sendiri :)
Berikut adalah gambar output:
(Itu tidak bekerja dengan baik pada labu, jadi saya menghilangkan yang itu.)
Dan ini kodenya:
sumber
Python 2 + PIL juga, buku mewarnai pertama saya
Saya melakukan hal yang sama seperti yang dilakukan CarpetPython, kecuali bahwa saya mengisi wilayah dengan 'gradien', dan menggunakan siklus warna yang berbeda.
Pewarnaan saya yang paling indah:
Waktu komputasi pada mesin saya:
gambar 1 (naga cina): nyata 0m2.862 pengguna 0m2.801s sys 0m0.061s
gambar 2 (gryffon): nyata 0m0.991 pengguna 0m0.963s sys 0m0.029s
gambar 3 (naga unicornish): nyata 0m2.260 pengguna 0m2.239s sys 0m0.021s
sumber
Python 2 dan PIL: Dunia Psychedelic
Saya telah menggunakan algoritma sederhana untuk mengisi setiap area white-ish dengan warna dari palet bersepeda. Hasilnya sangat berwarna-warni, tetapi tidak seperti aslinya.
Perhatikan bahwa bagian "putih" dalam gambar ini tidak terlalu putih. Anda juga perlu menguji nuansa abu-abu.
Kode dalam Python 2.7:
Contoh gambar:
sumber
Matlab
Kami menggunakan ruang warna HSV dan memilih masing-masing wilayah Hue berdasarkan ukuran relatifnya antara wilayah putih. Wilayah terbesar akan berwarna biru (
Hue = 0.7
) dan wilayah terkecil akan berwarna ungu (Hue = 0.8
). Daerah antara dua ukuran ini diberi Rona dalam kisaran0.7 -> 1=0 -> 0.8
. Hue pada kisaran dipilih secara linear sehubungan dengan fungsiarea^0.15
. Saturasi dan Nilai selalu 1 untuk setiap piksel yang bukan hitam.Dibutuhkan kurang dari 1 detik untuk mewarnai gambar.
3 gambar dengan daerah tertutup tempat algoritma bekerja dengan baik:
Dan sisa gambar:
Pada gambar-gambar ini ada daerah terhubung putih besar yang idealnya diwarnai dengan beberapa warna (masalah ini diselesaikan dengan baik dalam solusi Nathaniel .
sumber
Python 3 dengan Bantal
Kode ini agak panjang untuk dimasukkan dalam jawaban ini, tetapi inilah intinya .
Sayangnya, beberapa langkah terakhir itu masih belum menghilangkan "lingkaran cahaya" yang terlihat di daerah yang berwarna lebih gelap, tetapi setidaknya mereka telah membuat perbedaan yang nyata. Pemrosesan gambar tidak pernah menjadi bidang studi saya, jadi untuk semua yang saya tahu ada algoritma yang lebih sukses dan lebih efisien untuk melakukan apa yang saya coba lakukan di sini ... tapi oh well.
Sejauh ini, hanya ada dua palet yang dapat dipilih untuk langkah 4: yang murni acak, dan yang "kasar" yang sangat kasar, yang mencoba untuk menetapkan warna langit ke sudut atas, warna rumput ke sudut bawah, coklat (batu atau kayu ) warna di tengah setiap sisi, dan beragam warna di tengah. Keberhasilan telah ... terbatas.
Pemakaian:
Sampel:
paint_by_prog.py -t 0.7 Gryphon-Lines.png
paint_by_prog.py Dragon-Tattoo-Outline.jpg
paint_by_prog.py -t 0.85 -p natural The-Pumpkin-Farm-of-Good-old-Days.jpg
paint_by_prog.py -t 0.7 Dragon-OutLine.jpg
paint_by_prog.py stejar-arbore-schiţă-natura.png
Ayamnya tidak terlihat sangat bagus, dan hasil terbaru saya untuk gambar Tautan bukan yang terbaik; kode yang berasal dari versi kode sebelumnya sebagian besar berwarna kuning pucat, dan memiliki getaran padang pasir yang menarik tentang itu ...
Kinerja:
Setiap gambar membutuhkan beberapa detik untuk diproses dengan pengaturan default, yang berarti algoritma tetangga terdekat terdekat digunakan untuk langkah 5. Benar tetangga terdekat jauh lebih lambat, mungkin sekitar setengah menit (saya belum benar-benar menghitung waktunya).
sumber
Jawa
Pilihan warna acak dari palet pilihan Anda.
Peringatan: Wilayah menemukan saat ini sangat lambat, kecuali wilayah putih luar biasa kecil.
Membutuhkan dua input: nama file, dan ID palet. Termasuk beberapa koreksi antialiasing, tetapi tidak termasuk logika untuk piksel transparan.
Palet berikut saat ini diakui:
Hasil:
Naga, palet Game Boy:
Naga lainnya, palet biru + hijau:
GOL still life mona lisa (seperti yang diberikan oleh program ini ), palet triwarna:
sumber