Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws1415:projekte_im_wintersemester_2014_15:bildzutoncode [2015/02/28 15:56] lschmittmann |
ws1415:projekte_im_wintersemester_2014_15:bildzutoncode [2016/05/10 14:46] (aktuell) |
||
---|---|---|---|
Zeile 436: | Zeile 436: | ||
return plraster | return plraster | ||
</code> | </code> | ||
- | ==== Markovketten ==== | + | ==== Farbräume ==== |
- | Markovketten | + | <code python> |
+ | |||
+ | def farbraume (self, z=2): #z Anzahl der Teilbereiche pro Farbkomponente | ||
+ | '''Wenn man sich den RGB-Farbraum als Würfel vorstellt, so kann man diesen in kleinere Würfel zerlegen. Diese Methode zerlegt den Würfel in z*z*z kleine Würfel und ordnet jedem Pixel den Würfel zu, in dem er liegt.''' | ||
+ | farbraume = [] | ||
+ | for i in range (z): | ||
+ | for j in range (z): | ||
+ | for k in range (z): | ||
+ | farbraume.append((i,j,k)) | ||
+ | |||
+ | konvpixel = [] | ||
+ | for pixel in self.pixels: | ||
+ | r = pixel[0] | ||
+ | g = pixel[1] | ||
+ | b = pixel[2] | ||
+ | for i in range(z): | ||
+ | if (256/z)*i <= r and r < (256*(i+1))/z: | ||
+ | rl = i #rot | ||
+ | if (256/z)*i <= g and g < (256*(i+1))/z: | ||
+ | gl = i #grün | ||
+ | if (256/z)*i <= b and b < (256*(i+1))/z: | ||
+ | bl = i #blau | ||
+ | konvpixel.append((rl,gl,bl)) | ||
+ | return [farbraume.index(tupel) for tupel in konvpixel] | ||
+ | </code> | ||
+ | ==== Synthesizer ==== | ||
+ | <code python> | ||
+ | def tune(f, d, r=44100, mode='sinus'): | ||
+ | vol = 1 | ||
+ | waves = [] | ||
+ | waves.append(sinewave(f, r, d)) | ||
+ | if mode == 'organ': | ||
+ | while vol >= 0.1: | ||
+ | vol *= 0.7 | ||
+ | waves.append(sinewave(f*freq.getRatio('quinte'), r, d, vol=vol/2)) | ||
+ | f *= freq.getRatio('oktave') | ||
+ | waves.append(sinewave(f, r, d, vol = vol)) | ||
+ | if '#' in mode: #bei #a-z1,b-z2,c-z3,d-z4,g-z5,t-z6,e-z7 wird der a-te, b-te, ..., e-te oberton hinzugefügt mit z1, z2,..., z7 % lautstärke | ||
+ | toene = mode[1:].split(',') | ||
+ | for ton in toene: | ||
+ | waves.append(sinewave(f*2**int(ton[:ton.index('-')]), r, d, vol=int(ton[ton.index('-'):])/100)) | ||
+ | |||
+ | return wave | ||
+ | </code> | ||
+ | ==== MARKOV ==== | ||
<code python> | <code python> | ||
from __future__ import division | from __future__ import division | ||
Zeile 519: | Zeile 563: | ||
def genRandList(length, maximum): | def genRandList(length, maximum): | ||
return [(np.random.random_integers(maximum+1)-1)/maximum for x in range(length)] | return [(np.random.random_integers(maximum+1)-1)/maximum for x in range(length)] | ||
+ | </code> | ||
+ | ==== Zufallszahlen ==== | ||
+ | Zufallszahlen für Markov-ketten | ||
+ | <code python> | ||
+ | # -*- coding: cp1252 -*- | ||
+ | #Zufallszahl für Markov-Kette | ||
+ | |||
+ | #-*- coding: utf-8 -*- | ||
+ | from __future__ import division | ||
+ | from PIL import Image | ||
+ | import random | ||
+ | from bild import Bild | ||
+ | import numpy as np | ||
+ | |||
+ | def spaltenBreite(bild, spalten = 240): | ||
+ | '''Spaltenbreite der Pixel die zusammengefasst wird!''' | ||
+ | n = bild.bBreite() | ||
+ | b = int((n-(n%spalten))/spalten) | ||
+ | if b == 0: | ||
+ | return 1 | ||
+ | return b | ||
+ | |||
+ | def spalten(bild, spaltenum = 240): | ||
+ | spalten = [] | ||
+ | pic = bild.rasterList(bild.farbraume(4)) | ||
+ | sBreite = spaltenBreite(bild, spaltenum) | ||
+ | ende = bild.bBreite()-bild.bBreite()%sBreite | ||
+ | if ende == 0: | ||
+ | ende = bild.bBreite() | ||
+ | for i in range(0, ende, sBreite): | ||
+ | spalte = [] | ||
+ | for x in range(sBreite): | ||
+ | if (i+x < len(pic)): | ||
+ | spalte += pic[i+x] | ||
+ | spalten.append(spalte) | ||
+ | return spalten | ||
+ | |||
+ | def zufallsZahl(bild, spaltenum = 240): | ||
+ | n = bild.bBreite() | ||
+ | b = spaltenBreite(bild, spaltenum) | ||
+ | l = int(bild.bHohe()) | ||
+ | r = b * l | ||
+ | |||
+ | spalter = [] | ||
+ | spaltenliste = spalten(bild, spaltenum) | ||
| | ||
- | | + | for spalte in spaltenliste: |
+ | spalter.append(sum(spalte)/len(spalte)) | ||
+ | |||
+ | zZahl = [] | ||
+ | for spalte in range(len(spalter)): | ||
+ | varianz = 0 | ||
+ | for y in range(r): | ||
+ | x1 = spalter[spalte] | ||
+ | x2 = spaltenliste[spalte][y] | ||
+ | varianz += 1/r*(x1 - x2)**2 | ||
+ | zZahl.append(varianz) | ||
+ | maximum = max(zZahl) | ||
+ | return [num/maximum for num in zZahl] | ||
+ | </code> |