Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Missä vaiheessa tunnistat mikä kuuluisa maalaus?

PetriKeckman [30.01.2023 23:53:32]

#

Sekoitetaan kuvan pixelit ja palautetaaan oikeaan alkuperäiseen paikkaansa, missä vaiheessa pixelisekamelskasta tunnistat, mikä maalaus on kyseessä? Videossa pyörii sekunnit...(koodi 1)

https://youtu.be/l-gVnuuuWXk
https://youtu.be/MzdoXe0NtJI

Melko helppoa lienee monille ainakin taiteen harrastajille, sillä jo kuvan värimaailma kertoo mikä maalaus on kyseessä?

No himskatti! Arvotaan uudet väritkin, jotka palautetaan alkuperäisiin arvoihinsa (tämän tein koodilla 2).

https://youtu.be/le0H23DvQeA

Vaan eipä tuo kai mennyt sen vaikeammaksi/helpommaksi, vaikka ihan alusta ei varmasti tunnista?

Ohjelmoin yksittäisiä frameja ja tein animaation fps 20 arvolla MakeAvi ohjelmalla.

Koodi 1:

rebol[]
kuva: load %kuva1.jpg
maxx: kuva/size/x
maxy: kuva/size/y
print "odota..."
plot: copy[]
main: layout [
	box (as-pair (maxx) (maxy)) white effect reduce ['draw plot]
]
kuva2: copy/part skip to-image main 20x20 (as-pair maxx maxy)
fontti: make face/font [name: "Arial" size: 80] ;asetetaan fontti
x1: copy[]
y1: copy[]
väri1: copy[]
x2: copy[]
y2: copy[]
for x 0 (maxx - 1) 1 [ ;asetetaan tyhjään kuvaan kuva2 pixelit sattuman varaiseen paikkaan
	for y 0 (maxy - 1) 1 [
		append x1 x
		append y1 y
		arpax: random (maxx - 1) ;arvotaan uusi paikka koordinaatille x,y
		arpay: random (maxy - 1)
		append x2 arpax
		append y2 arpay
		apuväri: pick kuva (as-pair arpax arpay)
		väri: pick kuva (as-pair x y)
		append väri1 väri
		poke kuva2 (as-pair x y) apuväri
		poke kuva2 (as-pair arpax arpay) väri
	]
]
kuvalkm: 600
sek: 0
for kuvaind 1 kuvalkm 1 [ ; palautetaan 600 kuvassa pixelit oikeaan alkuperäiseen paikkaansa
	indeksi: 1
	for x 0 (maxx - 1) 1 [
		for y 0 (maxy - 1) 1 [
			askelx: - (x2/(indeksi) - (x1/(indeksi))) / kuvalkm
			askely: - (y2/(indeksi) - (y1/(indeksi))) / kuvalkm
			xp: x2/(indeksi) + (kuvaind * askelx)
			yp: y2/(indeksi) + (kuvaind * askely)
			poke kuva2 (as-pair xp yp) (väri1/(indeksi))
			indeksi: indeksi + 1
		]
	]
	plot: copy[pen white] ;otetaan käyttöön uusi grafiikka blockki....
	append plot compose [
		font (fontti)
		image kuva2 ;...asetetaan siihen kmuodostettu kuva2 ja
		pen white
		 text 30x30 (to-string sek) ;..., ja kirjoitetaan sekunnit
	]
	main: layout [
		box (as-pair (maxx) (maxy)) white effect reduce ['draw plot]
	]
	apukuva: copy/part skip to-image main 20x20 (as-pair maxx maxy)
	save/png to-file rejoin ["1kuva" kuvaind ".png"] apukuva
	print kuvaind
	if (mod kuvaind 20) = 0 [sek: sek + 1]
]
for i 601 660 1 [ ; asetetaan loppuun vielä selvyyden vuoksi 60 kpl selkeää kuvaa / framea
	save/png to-file rejoin ["1kuva" i ".png"] kuva
]
halt

Koodi 2:

rebol[]
kuva: load %kuva3.jpg
maxx: kuva/size/x
maxy: kuva/size/y
random/seed now/precise
print "odota..."
plot: copy[]
main: layout [
	panel1: box (as-pair maxx maxy) white effect reduce ['draw plot]
]
kuva2: copy/part skip to-image main 20x20 (as-pair maxx maxy) ;luodaan tyhjäkuvapohja
fontti: make face/font [name: "Arial" size: 80] ;asetetaan fontti
x1: copy[]
y1: copy[]
x2: copy[]
y2: copy[]

arvotutvärit: copy[]
oikeatvärit: copy[]
;arvotaan alkuvärit
pixeleitä: 0
for x 0 (maxx - 1) 1 [
	for y 0 (maxy - 1) 1 [
		append arvotutvärit random 255.255.255
		vä: pick kuva (as-pair x y)
		append oikeatvärit vä ;otetaan talteen myöskin oikea väri
	]
]
print pixeleitä
ind: 1
for x 0 (maxx - 1) 1 [ ;...asetetaan tyhjään kuvaan pixelit sattuman varaiseen paikkaan ja
;sattuman varaisilla väreillä
	for y 0 (maxy - 1) 1 [
		append x1 x
		append y1 y
		arpax: random (maxx - 1) ;arvotaan uusi paikka koordinaatille x,y
		arpay: random (maxy - 1)
		append x2 arpax
		append y2 arpay
		poke kuva2 (as-pair arpax arpay) (arvotutvärit/(ind))
		ind: ind + 1
	]
]
kuvalkm: 600
sek: 0
for kuvaind 1 kuvalkm 1 [ ; palautetaan kuvalkm:ssa kuvassa pixelit oikeaan alkuperäiseen paikkaansa ja väriinsä
	indeksi: 1
	for x 0 (maxx - 1) 1 [
		for y 0 (maxy - 1) 1 [
			askelx: - (x2/(indeksi) - (x1/(indeksi))) / kuvalkm
			askely: - (y2/(indeksi) - (y1/(indeksi))) / kuvalkm
			xp: x2/(indeksi) + (kuvaind * askelx)
			yp: y2/(indeksi) + (kuvaind * askely)

			dr: (oikeatvärit/(indeksi)/1 - arvotutvärit/(indeksi)/1) / kuvalkm ;delta R
			dg: (oikeatvärit/(indeksi)/2 - arvotutvärit/(indeksi)/2) / kuvalkm ;delta G
			db: (oikeatvärit/(indeksi)/3 - arvotutvärit/(indeksi)/3) / kuvalkm ;delta B eli määrä joka framejen välissä väriin lisätään

			väriR: arvotutvärit/(indeksi)/1 + (kuvaind * dr)
			väriG: arvotutvärit/(indeksi)/2 + (kuvaind * dg)
			väriB: arvotutvärit/(indeksi)/3 + (kuvaind * db)
			väri: to-tuple compose [(to-integer väriR) (to-integer väriG) (to-integer väriB)]

			poke kuva2 (as-pair xp yp) (väri)
			indeksi: indeksi + 1
		]
	]
	plot: copy[pen white] ;otetaan käyttöön uusi grafiikka blockki....
	append plot compose [
		font (fontti)
		image kuva2 ;asetetaan siihen kuva2
		pen white
		 text 30x30 (to-string sek) ;, jotta siihen voidaan kirjoittaa sekunnit
	]
	main: layout [
		box (as-pair (maxx) (maxy)) white effect reduce ['draw plot]
	]
	apukuva: copy/part skip to-image main 20x20 (as-pair maxx maxy)
	save/png to-file rejoin ["3kuva" kuvaind ".png"] apukuva
	print kuvaind
	if (mod kuvaind 20) = 0 [sek: sek + 1]
]

; asetetaan loppuun vielä selvyyden vuoksi 60 kpl selkeää kuvaa / framea
for i 601 660 1 [
	save/png to-file rejoin ["3kuva" i ".png"] kuva
]
halt

vesikuusi [01.02.2023 20:11:02]

#

Hauska. Tunnistin vasta n. 00:27. :D

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta