Loppupuheenvuoro – Tero

Ja niin on studio ohitse!

OLO-sessiot olivat ihan uudenlainen tapa käydä läpi uusia asioita. Alkuhankaluuksien (niin mitä meidän pitäisi tehdä?) jälkeen ryhmätapaamiset olivat ihan kivoja; itselläni ainaakaan ei ollut mitään stressiä ryhmästä, asiat otettiin varsin rennosti. Ehkä liiankin rennosti järjestäjien mieleen, arvelen ma, mutta parempi olla mukavempaa kuin oppia hitusen enemmän ja ahdistella viikottaista tapaamista.

Tärkeimmät asiat sessioilta oli jo suurinpiirtein tiedossa. Ei kurssi tietenkään pelkkää kierrätystavaraa ollut, sillä tulee kuitenkin nyt mieleen esimerkiksi MVC, mikä tavallaan oli tiedossa mutta tavallaan ei. Kuten palautelappuja täytettäessä viimeisellä kokoontumisella todettiin, ei ollut mitään absoluuttisen turhaa asiaa jonka olisi voinut kokonaan jättää pois. Tai noh, Platon

Tehtävissä oli tekemistä. Ensimmäisestä (nollannesta) jäi tosin vähän karvas maku, kun oma liiankin verboosi miellekartta ei ollut ihan assarien mieleen. Ja “ensimmäisessäkin” meni ensimmäisellä kertaa ohi tehtävänannon painotus UML-kaavion esseeosuudesta, joka ei siis ollut tarpeeksi verboosi. Toinen tehtävä oli jännä kohinasimuloinnin ja virheeneston kanssa, ja kolmas tehtävä… kolmas tehtävä oli sitten jotain. Kuvien filtteröinti oli loppujen lopuksi ihan mielenkiintoista, vaikka tämä vähän “kokenutkin” koodaaja löysi monta mutkaa matkasta. Sokoban-klooni oli itselleni vähän turhan raskas, kun päätin että seinien tulee sovittautua vieressä olevien seinien perusteella! eikä kunnia antanut perääntyä. Voi niitä konditionaaleja ja match-caseja. Huh huh. Viimeinen kierros, pelikokoelma, tämä “tee tämä, ja tee se miten tahdot” ultimaallinen taitojen osoitus. Eh, täytyy tunnustaa että vika kierros ei ole ihan vielä valmis, mutta on ihan hyvä idea antaa vapaat kädet opiskelijalle, ja mikäs sen parempi (oikeasti) harjoitus kuin koodata muutama tuttu peli itse.

Loppujen lopuksi, vaikka kurssin huomaa olevan uusi ja sen kanssa on ollut vähän sähinää (ne irc-logit ovat viihdyttävää luettavaa jos osaa tilanteesta irtautua), en voi väittää etteikö kurssi ole ollut minulle hyödyksi. Kiitän kaikkia jotka ovat tässä olleet mukana.

Joten! Hyvää joulua ja aivan loistavaa uutta vuotta!

 Tero Saaristo

Tehtävä 3 – Kuva

Kolmannnen kierroksen tehtävän tavoitteena oli ohjelmoida kourallinen suotimia joilla kuvia voisi muokata. Itse käyttöliittymä oli annettu valmiiksi, mutta molemmat suodintyypit (PixelFilter ja FourierFilter) piti viimeistellä itse annetun rungon päälle. Tässä tehtävässä hyödynnettiin ensimmäistä kertaa abstrakteja luokkia; näin kumpaakin suodintyyppiä voitiin käyttää samalla tavalla, vaikka niiden sisäinen toteutus olikin aivan erilainen.

Auringonkukka

Kohdekuvamme

PixelFilter muokkasi kuvia annetun matriisin perusteella. Tämä oli varsin mielenkiintoista, sillä oikeasti selvisi “miten matriisilla kerrotaan pikseleitä” ja myös miten monia tuttuja suotimia voi ylipäätään toteuttaa! Todennäköisesti moniin suotimiin on kuitenkin monia eri tapoja, varmasti tehokkaampiakin, mutta tässä pääsi hyvin alkuun. Alla on esimerkkejä muutamista eri efekteistä, osa poimittu GIMPin ohjemateriaalista matriiseja koskien.

PixelFilter-suotimia

Vasemmalta oikealle: sumennus (blur), tarkennus (sharpen), reunanlöytö (edge detect) ja kohokuva (emboss)

Itse vedin PixelFilterin toteutuksen vähän överiksi ja tein oman MatrixFilter -luokan, joka sisälsi kaiken tarvittavan tiedon matriisista: sen nimen, itse matriisin, loppukertoimen, kohdekanavien (R, G, B) ja totuusarvon määrittämään kummassa väriavaruudessa kuvaa suodittiin – RGB:ssä vai HSV:ssä. Lopputuloksena ei tarvinnut kuin lisätä uusi instanssi listaan ja rivi pixelfilter.txt:hen niin operateFilter teki taikansa ilman muuta säätöä. Lisäksi kiersin tehtävänannossa mainitun reunaongelman teeskentelemällä kuvan jatkuvan samana reunojen yli.

FFT

Puolitiehen jätetty kuva, joka on käynyt kerran FFT:n läpi ja saanut reunojensiirron

FourierFilter muokkasi kuvia taajuusavaruudessa, ja se oli aivan yhtä selkeä asia kuin miltä kuullostaakin. Onneksi FFT-muunnoksia ei tarvinnut itse keksiä, vaan ohjeita orjallisesti noudattaen lopuksi voi huomata koodin toimivankin vaikka teoria menisikin ohitse. Yllä oleva kuva ei tietenkään ole riittävä alkuperäisen auringonkukan muodostamiseen, sillä FastFourierTransformin jälkeen kuva on jaettu kahteen osaan: reaali- sekä imaginääriosaan. FourierFilter käytännössä kertoo FFTn jälkeisiä arvoja (reaali ja imaginääri) ja sitten muuntaa kuvan takaisin ymmärrettävään muotoon.

Esimerkkejä taajuusavaruuden suotimista:

Notch

Notch

Lowpass

Lowpass

Highpass

Highpass

Ring

Ring

Bonus! Aaltokuvio joka syntyi kirjoitusvirheen ansiosta. Maskia ei voi näyttää, sillä se ylitti reaalimaailman rajat.

Waves

Waves

Tehtävässä oli myös ongelma ratkottavana: kuinka puhdistaa “vahingoittunutta” kuvaa taajuusavaruuden avuin.

Image

Virheellinen kuva taajuusaravuutensa kanssa.

Itse sain jotain aikaan poistamalla pikselirykelmiä, jotka selkeästi poikkesivat alkuperäisestä kuvasta.

Korjailtu kuva

Korjailtu kuva

Kun tehtävän haastavuudesta selvisi, oli se yllättävän hauska; kuvia sai muokattua ihan itse monilla eri tavoin ja tulevaisuudessa muistan kyllä miten matriisifiltterit toimivat.

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