23.10. OLO3:n purku

Tällä viikolla neljättä olo-tapausta, joka oli siis kuva, oli saapunut purkamaan vain noin puolet ryhmämme vahvuudesta. Lieneekö tenttiviikko sitten tehnyt tehtävänsä vai mikä, mutta muutama aihe kuvaan littyen saatiin kuitenkin käytyä läpi.

Väriavaruus

Väriavaruus on matemaattinen malli siitä, kuinka esittää värejä lukujen avulla. Usein tämä toteutetaan kolmella tai neljällä luvulla, elöi komponentilla. Väriavaruus määrittelee, mitä kaikkia värejä voidaan käyttää – määrä ja määrittely vaihtelee värimallien välillä.

Erilaisia värimalleja ovat esimerkiksi:

  • RGB (Red Green Blue) – tietokonegrafiikassa varmasti yleisin värimalli

  • HSB (Hue Saturation Brightness) – sävyyn, kylläisyyteen ja kirkkauteen perustuva malli. Yleisesti käytetty valo- ja videokuvan käsittelyssä, sillä se mahdollistaa kuvan helpon värikorjauksen.

  • CMYK – tulostukseen tarkoitettu värimalli (värit sekoittuvat eri tavalla kuin tietokoneen näytöllä)

  • Lisäksi mm. PAL-videokuvan YUV, sekä RGB:n johdannaiset sRGB ja Adobe RGB.

Vektorigrafikka

Vektorigrafiikka eroaa rasterigrafiikasta siinä, että kuvaa ei tallenneta kuvapisteinä, vaan matemaattisesti määriteltyinä muotoina, esim. ympyrä ja neliö.

Käytännössä kuvatiedostoon tallennetaan solmujen paikkoja ja tiedot siitä miten mitkäkin solmut yhdistetään. Alla olevassa kuvassa esim. suorilla viivoilla.

vector4

Määritellyt muodot voidaan lopuksi määritellä täytettäviksi jollakin värillä (kuten mallikuvassa keltaisella) tai vaikka rasterimuotoisilla kuvilla, mikä on mahdollista esim. EPS-vektoriformaatissa. Koska kuva on tiedostossa määritelty ainoastaan matemaattisesti, täytyy lopullinen kuva muodostaa joka kerta uudestaan kuvaa näytettäessä. Tästä on tosin hyötynä se, että vektorigrafiikkaa voidaan skaalata loputomasti ilman että sen laatu kärsii. Yleisimpi vektoriformaatteja on  SVG, johon voidaan itse grafiikan lisäksi suoraan tallenetaa myös esimerkiksi animaatiota. SVG on nettisivuilla eniten käytetty vektoriformaatti sillä kaikki uudenaikaiset selaimet tukevat sitä.

HDR (High Dynamic Range) -kuva

  • Kuvantamista, jossa kuvaa käsitellään muodossa, jossa dynamiikkaa enemmän kuin tavalliset monitorit ja tulostimet pystyvät esittämään
  • HDR-kuvan tulostaminen/näyttäminen monitorilla: tavanomaista laajempi kirkkausalue kutistetaan tulostimen/näyttölaitteen kirkkausaluetta vastaavaksi
  • Yksinkertaisin, lineaarinen kutistaminen →kontrastittomat, mitäänsanomattomat kuvat; eivät vaikuta luonnollisilta.
  • Kehittyneemmättonemapping-algoritmit; pyrkivät säilyttämään paikallisen kontrastin

Dynamiika

  • Tarkoittaa sitä, kuinka laaja kirkkausalue voidaan esittää niin, että kuvan yksityiskohdat vielä erottuvat
  • Mitataan yleensä aukkoina →kukin aukko kaksinkertaistaa kirkkauden
  • Korkealla ja matalalla dynamiikkalla ei yksikäsitteistä rajaa
  • Tyypillinen matalan dynamiikan kamera/filmi/monitori toistaa noin 5-9 aukon laajuisen dynamiikka-alueen

HDR -kuvan ottaminen

  • Tyypillisesti valotushaarukoinnilla: samasta näkymästä otetaan useampi valokuva eri valotuksilla
  • Esim. 1/125 s, 1/250 s, 1/500 s, 1/1000 s, 1/2000 s; muut valotusparametrit (aukko, herkkyys) pysyvät samoina
  • Kuvien yhdistäminen: esim. Photoshop, LuminanceHDR →rekonstruoivat eri valotusajoilla otetuista kuvista kameran toistokäyrän, laskevat kullekin pikselilletodellisen kirkkauden

Tallentaminen

  • Yleensä jossakin muodossa, jossa ei ole käytännössä rajoja, esim. EXR
  • EXR-muodossa kunkin pikselinvärikomponentti (RGB, punainen, vihreä sininen) liukuluku →kirkkauden suuruusluokka voi vaihdella huomattavasti, merkitsevien numeroiden määrää vakio
  • Liukulukuina esitetty HDR-kuva tavallaan rekonstruktio siitä, millaiset valoisuuserot maisemassa oli ennen kuin se kuvattiin, lisättynä mahdollisesti kuvantamisvälineen virheillä

Kuvaputkinäyttö

Kuvaputkinäyttö koostuu tyhjiössä olevasta elektrinitykistä, jonka lähettämiä elektroneja ohjataan kaksisuuntaisella magneettikentällä. Elektronit kohdistetaan fosforipintaan siten, että ne muodestavat halutun kuvan. RGB-näytössä elektroneja kohdistetaan erikseen punaista, vihreää ja sinistä valoa emitoiville kohdille fosforipintaa. Yksi kuvaputken erityis-sovelluksista on oskilloskooppi.

Tälläistä siis tällä viikolla OLO-ryhmä #10 purussa.

Antti Virtanen

9.10 – OLO3 -session avaus – Kuva

Keskiviikkona 9.10 Kävimme läpi Tapaus Kolmosta eli Kuvaa.

Brainstormaamisen jälkeen taulullemme oli kertynyt seuraavanlaista lappua:

Tapaus 3 Post-itit

(Klikkaa isompaa)

Näistä ideoista karsimme kokoon seuraavat aiheet:

Tapaus 3 aiheet

(Klikkaa isompaa)

avuK

  • Värifilosofia – Matias
  • Näytöt – Sampsa, Esa
  • HDR – Markus
  • Kuvaformaatit – Terhi
  • Vektoriformaatit – Antti
  • Tietokonegrafiikka – Lauri
  • Väriavaruus – Tero

25.9. OLO1-session Purkumuistiinpanot

Enkapsulointi

-toteutustavan piilottaminen public/private määreillä

-olion sisäisen logiikan voi piilottaa käyttäjältä privatella

-vähentää monimutkasuutta

-estää toimintalogiikan muuttamisen koskematta alkuperäiseen koodiin

-ollennaista esim kirjastoissa joissa tiedonhakua ei tarvitse nähdä, vaan haettava tieto tarvitaan näyttää

-poistaa public puolelta potentiaalista raskasta luettavaa

muuistiinpanot

Interface (rajapinta)

-Antaa ohjelmien käyttää muita ohjelmia kun tiedetään ohjelman kyvyt ja metodit.

-Scalassa ei ole rajapintoja. “Traits” korvaa tämän saman toiminnon

-Tunnetaan myös API:na. Esimerkkejä:

-OpenGL

-DirectX

kalvot

Olio-ohjelmoinnin hierarkia

-On hankala näyttää minkään kielen kaikki hierarkiat ihan yksinkertaisesti koon takia; dataa olisi liikaa

-Scalassa:

-Kaikki ovat olioita

-Kaikkein korkeimmalla on Scala.Any, jonka alla on Scala.AnyRef ja Scala.AnyVal josta sitten kaikki muut oliot periytyvät.

-Null ja None ovat metaforisia “käärmeitä” Scalan maailmassa, kaikista alimpina hierarkiassa.

Tietotyyppien näkyvyys

-Yleisesti muuttujat voi määritellä joko private tai public tyyppisiksi

-Private muuttujat näkyvät vaan sen luokan sisällä tai sen funktion sisällä jossa se on määritelty

-Public:it näkyvät ulkoakinpäin. Näihin voi päästä mistä tahansa käsin.

-Scalassa ei ole julkisia muuttujia, niitä pitää määritellä luokkana tai pitää luoda funktio joka erikseen palauttaa sitä, mitä haluaa.

Perintä 

-tarkoituksena vähentää uudelleenkirjoittamista

-olio-ohjelmoinnissa on tapa luoda ali-luokkia olemassa olevista luokista

kalvot

Oliot ja tietokannat

-Olioita ja dataa halutaan tallentaa tietokantoihin

-tarkoitus ei ole tallentaa jokaista oliota, vaan tiettyjä oleellisia asioita

-voidaan poistaa tallennettuja olioita tietokannoista ja tuoda niitä takaisin muistista käyttäjän halun mukaan

-tyypit ja viittaukset:

-esim string voi olla niin pitkä kun haluaa, joka voi hajottaa tallennusta jos tallennuksessa on rajallinen tila

-dataolioit tulevat yksittäisinä ja eivät peri toisiaan

-pythonissa on django-palikka jossa idea on luoda olio joka kuvastaa jotain taulua ja linkitetään liittyviä indeksejä. Monta oliota voi linkittää samaan aikaan.

Tietorakenteet 

muistiinpanot 1

muistiinpanot 2

Emme valitettavasti saaneet polymorphismista tietoa kuten suunniteltu.