Blunt the Images

15

pengantar

Tepi tajam, terus terang, benar-benar berbahaya sehingga, diberikan PNG sebagai input, mengaburkan gambar menggunakan metode yang dijelaskan di bawah ini dan menumpulkan tepi tajam yang terkutuk itu.

metode

Untuk mendapatkan nilai RGB dari setiap piksel, gunakan tiga persamaan berikut:

R=1.5×Sebuah=1nRSebuah2n
G=1.5×Sebuah=1nGSebuah2n
B=1.5×Sebuah=1nBSebuah2n

Di mana Sebuah=1nRSebuah2 adalah jumlah dari nilai merah dari masing-masing piksel yang berdekatan yang dikuadratkan. Nilai n adalah jumlah piksel yang berdekatan (misalnya, piksel sudut akan memiliki nilai n 3, sementara piksel di sekitar tengah gambar akan memiliki nilai n 8).

Piksel yang berdekatan adalah piksel yang berjarak 1 piksel dari piksel asli di semua arah (kiri, kanan, atas, bawah, dan pada semua diagonal).

Misalnya, dalam gambar 3 x 1 berikut:

Nilai RGB kabur dari piksel tengah adalah:

R=1.5(02+02)2=0
G=1.5(02+2552)2=220.836=221
B=1.5(2552+02)2=220.836=221

di mana output desimal dibulatkan ke unit terdekat. Anda seharusnya tidak sekadar meratakan hasilnya.

Oleh karena itu, piksel tengah akan menjadi warna (0, 221, 221), atau:

Menghasilkan gambar:

Anda harus mengulangi proses ini untuk setiap piksel dalam gambar. (Perhatikan bahwa Anda melakukan ini dengan piksel asli dan bukan piksel yang dimodifikasi. Pada dasarnya, Anda tidak boleh menimpa gambar asli, dan harus membuatnya benar-benar terpisah dari gambar baru yang buram ).

Jika Anda menghitung nilai apa pun yang lebih besar dari 255, asumsikan nilainya 255 (Yaitu, nilai 374 akan ditetapkan ke 255).

Output yang dihasilkan harus berupa gambar PNG yang terpisah (Anda dapat memberi nama ini apa pun yang Anda inginkan).

Contohnya

Super Mario

Asli:

Kabur:

Papan main dam

Asli:

Kabur:

Keripik

Asli

Kabur

Tidak garing lagi

American Gothic

Asli:

Kabur:

Untuk melihat blur pada gambar yang lebih besar, sebaiknya jalankan kembali program pada gambar buram:

Tantangan

Kode terpendek untuk mengaburkan gambar PNG yang diberikan menang.

Anda dapat menggunakan pustaka pemrosesan gambar (seperti PIL) tetapi Anda tidak boleh menggunakan fungsi pengaburan bawaan (Mathematica, saya sedang melihat Anda).

Catatan

Seperti @orlp katakan di bawah ini:

Sebagai catatan, (setahu saya) ini bukan metode pengaburan standar. Tantangan ini bukan sumber daya pendidikan.

Peluruhan Beta
sumber
Saya tidak terlalu senang dengan penskalaan itu. nakan muncul di penyebut.
Karl Napf
Saya memikirkan sesuatu yang sangat berbeda ketika saya melihat "Blunt": P.
Adnan
3
Sebagai catatan, (setahu saya) ini bukan metode pengaburan standar. Tantangan ini bukan sumber daya pendidikan.
orlp
Jika Anda memiliki piksel putih dikelilingi oleh 8 piksel putih (semua rgb (255.255.255)), piksel kabur akan menjadi rgb (312.312.312). Apakah kita seharusnya menjepit nilai ke dalam kisaran [0,255]?
kamoroso94
1
@ kamoroso94 1: Ya, anggap angka yang lebih besar dari 255 adalah 255. 2: Contoh gambar seharusnya mewakili gambar 3 x 1.
Beta Decay

Jawaban:

5

Python, 354 313 byte

Bukan yang terbaik, tapi hei ...

Menggunakan Space untuk indentasi level 1, Tab untuk level 2, lalu Tab + Space dan Tab + Tab

import Image as I
A=I.open(raw_input())
w,h=A.size
B=I.new('RGB',(w,h))
s=[-1,1,0]
r=range
for x in r(w):
 for y in r(h):
    P=[]
    for d in s:
     for e in s:
        try:P+=[A.load()[x+e,y+d]]
        except:0
    P.pop()
    B.load()[x,y]=tuple(min(int(.5+(1.5*sum([v*v for v in t])/len(P))**.5),255)for t in zip(*P))
B.save("b.jpg")
  • Sunting1: mengganti math.sqrt()dengan ()**.5berkat peluruhan beta
  • Sunting2: gunakan minuntuk menjepit (menghemat banyak!) Dan 0untuk passterima kasih kepada Loovjo
  • Sunting3: +=[]untuk .append()menyimpan 5 byte
  • Sunting4: menggunakan variabel suntuk stensil
Karl Napf
sumber
1
Tentunya n**0.5lebih pendek dari import math;math.sqrt(n)? Apakah ada alasan untuk yang terakhir?
Beta Decay
Ya itu, tidak ada alasan. Saya baru saja lupa.
Karl Napf
2
v if v<256 else 255dapat disingkat menjadimin(v,255)
Loovjo
Anda juga dapat mengganti passdengan0
Loovjo
Anda harus menyatakan pustaka gambar mana yang Anda gunakan. Jika Anda menggunakan PIL / Bantal (dan sepertinya Anda), pernyataan impor teratas harus dibaca from PIL import Image as I.
Mego
0

MATLAB, 130 byte

Mengambil gambar sebagai input dan menyimpan output sebagai b.png.

i=double(input(''));m=ones(3);m(5)=0;k=@(x)imfilter(x,m);imwrite(uint8(round((1.5*k(double(i.^2))./k(i(:,:,1)*0+1)).^.5)),'b.png')
cacat
sumber