You are here

Vánoční DIY 2018: Stresová Zlomalovánka

Série: Tagy:

Po kratší, asi pětileté pauze se vracíme s vánočním DIY.

Kdy jindy než v tento čas plný pohody a klidu oceníte naši stres vzbuzující Zlomalovánku pro dospělé (věkem).

Zlomalovánka
Verzi pro tisk stahujte zde (cca. 0.5 MB).

K vybarvování doporučujeme ty nejtemnější pastelky. Kdo nám v komentářích nebo na Twitter pošle obrazovou dokumentaci hotového výtvoru, nevyhraje nic.

Ať slouží!

Komentáře

První!
A stejně jsem nic nedokázal...

Hmm takže když způsobíte nukleární válku, tak máte z 33% splněno :-D

To je závazek do nového roku? :-P

https://jenda.hrach.eu/f/bugemos-589.png


import cv2
import numpy as np
import queue

im = cv2.imread("Stresova-Zlomalovanka.png")

def darkcolor():
__a = np.random.uniform(0, 127, size=3)
__return a

def cond(p):
__return (p>127).all()

def dfsfill(im,x,y,c):
__if not cond(im[x,y]):
____return
__q = queue.Queue()
__q.put((x,y))
__while not q.empty():
____x,y = q.get()
____if x>=1 and cond(im[x-1, y]):
______im[x-1, y] = c
______q.put((x-1, y))
____if y>=1 and cond(im[x,y-1]):
______im[x, y-1] = c
______q.put((x, y-1))
____if x<im.shape[0]-1 and cond(im[x+1,y]):
______im[x+1, y] = c
______q.put((x+1, y))
____if y<im.shape[1]-1 and cond(im[x,y+1]):
______im[x, y+1] = c
______q.put((x, y+1))

for x in range(im.shape[0]):
__for y in range(im.shape[1]):
____dfsfill(im, x, y, darkcolor())
__print("fill %i"%x)

cv2.imwrite("filled.png", im)

  • nahraďte _ za mezery, místní CMS umí jenom tag <code> a ne <pre> tak jsem odsazení nedokázal zadat
  • nepovedlo se mi uspokojivě použít cv2.floodFill, ten threshold nefunguje podle mých představ a masku se mi zkoumat nechtělo
  • tupé rekurzivní DFS narazilo na limit stacku v Pythonu
  • celkově je to šíleně pomalé, příště to napíšu v nějakém vhodnějším jazyce

super načasování a ještě lepší vybarvení! ;)

Rychlejší a kratší varianta v PHP
Online zmalovátor: https://hensl.tech/zlo.php


<?php

$im = imagecreatefrompng("Stresova-Zlomalovanka.png");
for($y = 0; $y < imagesy($im); $y++){
for($x = 0; $x < imagesx($im); $x++){
if((imagecolorat($im, $x, $y) & 0xFF) > 127){
imagesetpixel($im, $x, $y, 0xFFFFFF);
}
else{
imagesetpixel($im, $x, $y, 0x000000);
} } }
for($y = 0; $y < imagesy($im); $y++){
for($x = 0; $x < imagesx($im); $x++){
if(imagecolorat($im, $x, $y) == 0xFFFFFF){
imagefilltoborder($im, $x, $y, 0x000000, mt_rand(0, 0xFFFFFF));
} } }
imagepng($im, "zlo.png");

příliš mnoho barev. černá a červná by plně postačovaly.
Opět jste dokazal, jen to že jste nic nedokázal
:)

Jerry64...hahaha...Jerry64... Skoda, s takovym jmenem dnes zkousku neudelate.
Zkuste to priste, mozna budu mene rozmarily....

import cv2
import numpy

img = cv2.imread("Stresova-Zlomalovanka.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY, dst=gray)
_, markers = cv2.connectedComponents(gray, connectivity=4)
img = cv2.cvtColor(markers.astype("uint8"), cv2.COLOR_GRAY2BGR)
lut = numpy.random.randint(0, 255, (1, 256, 3)).astype("uint8")
lut[0, 0, :] = 0
cv2.LUT(img, lut, img)

cv2.imshow("zlo", img)
cv2.waitKey()

Nie, radšej křivky https://nahraj.to/g/L1f

Tento příspěvek se zabývá novými možnostmi efektivního obarvování abstraktních grafických struktur (map) studovaný autory [1]. Autoři dávají volně k dispozici výsledky svého výzkumu[2]. S využitím důkazu [3] a aplikací zjištění [4] ukážeme možnost rychlého obarvení výše zmíněné mapy v rámci slabšího teorému [5].

Upozornění: Pro účely tohoto výzkumu nejsou uzavřené oblasti glyfů považovány za součást mapy.

Neobarvená mapa byla nejprve vyexportována jako bitmapa v maximálním možném rozlišení. Toto rozlišení bylo určeno jako limitní rozlišení, kdy již další zvětšení tvoří jen čtvercové struktury místo obrazových bodů.

Tato vyexportovaná bitmapa byla ohodnocena prahovým algoritmem tak, že všechny body s hodnotou menší než 225 byly označeny kódem 0 a s hodnotou stejnou či větší pak kódem 16777215. Kódy odpovídají barvám v BGR prostoru v LE kódování. Prahová hodnota 225 byla určena měřením estetické reakce testovacích subjektů.

Pro další operace byl implementován software v moderním dialektu jazyka Scheme [6].

V nově získané bitmapě byly iterativně označeny souvislé oblasti kódu 16777215 a každé byl přiřazen nový kód dle pravidla (+ (* w y) x). Následně byly tyto oblasti rozšířeny do přilehlých obrazových bodů s kódem nula. Tato operace proběhla postupně vždy jeden bod pro jeden region tak, aby nedošlo k hladovému roztáhnutí oblastí ve směru os souřadnic. Všechny body byly vyplněny v devíti iteracích.

Z takto pročištěné mapy byl sestaven seznam hran neorientovaného grafu, kdy každá plocha je reprezentována uzlem a sousedství ploch je pak vyjádřeno hranou tohoto grafu. Vhodným seřazením uzlů dle počtu navazujících hran, stochastickou alokací barev ze zadané množiny a s nutností - byť drobného - backtrackingu, byl graf obarven pěti barevnými kódy.

Rešerší z dalších prací autorú [7] byly vybrány nejvhodnější možné barvy pro zobrazení a čtyři finální barvy pak byly opět určeny měřením estetické reakce testovacích subjektů.

Výsledek algoritmu je možné vidět na [8] a [9].

Budoucí práce by se měly zaměřit na praktickou aplikaci kvadratického algoritmu pro obarvení pouze 4 barvami [4]. Nelze vyloučit, že ačkoliv chromatické číslo mapy [2] je 4 (uvádíme bez důkazů), je možné, že estetické nároky znemožní vizuálně atraktivní obarvení pouze čtyřmi barvami.

[1] https://bugemos.com/

[2] https://www.bugemos.com/?q=node/589

[3] Wikipedia contributors. (2018, December 18). Four color theorem. In Wikipedia, The Free Encyclopedia. Retrieved 09:19, December 31, 2018, from https://en.wikipedia.org/w/index.php?title=Four_color_theorem&oldid=874329529

[4] http://people.math.gatech.edu/~thomas/PAP/fcstoc.pdf

[5] Wikipedia contributors. (2018, August 14). Five color theorem. In Wikipedia, The Free Encyclopedia. Retrieved 09:19, December 31, 2018, from https://en.wikipedia.org/w/index.php?title=Five_color_theorem&oldid=854955535

[6] http://racket-lang.org/

[7] https://www.bugemos.com/?q=taxonomy/term/51

[8] http://joe.cz/bugemos/Stresova-Zlomalovanka-5ct-hd.png

[9] http://joe.cz/bugemos/Stresova-Zlomalovanka-5ct-full.png

Hustokrutoprisne. Davam 5 andulek! Navrhuji preklad a publikaci v http://www.jir.com/

Zlo nám už visí v kanceláři v rámečku jako motivace. Nicméně po dokončení jsem si říkal, že by bylo lepší, kdyby tu visel celý kalendář (takový Zlondář:-). Samozřejmě by těch dvanáct měsíců muselo být proloženo Kapitánem Pejskem a Majorem Ostřížem :-)