INF1040 Oblig 3
Bilder, komprimering og tekstgjenkjenning

Bilde av Jan Fredrik - klikk for å forstørre

Bilde av Jan Fredrik. Egenskaper:

Ved å benytte XV til å endre bildets format får vi følgende filstørrelser uten å endre noen parametre (default verdier):

Dette illustrerer godt hvordan ulike billedformat og komresjonsteknikker påvirker et bildes datamengde. Hva skjer så når vi innenfor et og samme format endrer enkeltparametre i kompresjonen, og slik forskyver balansen mellom billedkvalitet og datamengde?





Kompresjonsvariasjoner i .JPEG

Orginalt bilde - klikk for å forstørre Quality=100% - klikk for å forstørre
1. Orginalt bilde (833kB)2. Quality=100% (767kB)
Quality=70% - klikk for å forstørre Quality=40% - klikk for å forstørre
3. Quality=70% (74kB)4. Quality=40% (45kB)
Quality=15% - klikk for å forstørre Quality=1% - klikk for å forstørre
5. Quality=15% (30kB)6. Quality=1% (22kB)

Over kan vi se seks utgaver av, i utgangspunktet, samme bilde. Bilde 1 er vårt orginale bilde. Bilde 2 er lagret med JPEG's Quality-parameter satt lik 100%, noe som skulle medføre maksimum billedkvalitet og minimum kompresjon. Dette bekreftes når vi sammenligner med bilde 1. Det er allikevel verdt å merke seg at vi får noe kompresjon (fra 833kB til 767kB). Testing viser at hvis vi foretar en rekursiv komprimering med Q=100% vil vi få en stadig mindre datamengde, ergo mister vi noe kvalitet selv med Q satt lik 100%!

Reduseres Q til 70% vil vi kunne begynne å se endringer i billedkvaliteten (bilde 3). Ved sammenligning ser vi en noe grovere overgang i bildets fargenyanser, særlig i Jan Fredriks skygge. I bilde 4 (Q=40%) forsterkes dette. Vi ser i tillegg tendenser til forvrengning av ansiktsfargene. Studerer vi plakaten kan vi se at bokstavene begynner å få "skygger". Disse skyggene er enda tydeligere i bilde 5. Her kan vi også tydelig se hvordan kraftig kompresjon (vi er nå nede i 30kB) gjør at vi mister mye oppløsning i bildet fordi enkeltpixler slås sammen til større pixelcluster. Dersom formålet er tekstgjenkjenning vil nok bildet likevel kunne brukes dersom vi benytter intelligent filtrering.

Bilde 6 er derimot ubrukelig til de fleste formål. Vi er nede i Q=1%, og en datamengde lik 22kB. At vi har veldig få farvenyanser igjen er ikke så farlig for vårt formål, men vi ser også at bokstavene på plakaten er delvis forsvunnet/smurt utover. Ingen filtrering vil kunne rette på dette problemet.

Steganografi

Steganografi er en teknikk som benyttes for å skjule meldinger i et objekt. Til forskjell fra kryptering hvor man forsøker å forhindre andre i å få tak meldingen ved å kode den til det ugjenkjennelige, forsøker man gjennom steganografi å skjule meldingen slik at andre parter ikke oppdager at det finnes noen melding i det hele tatt. En vanlig metode for å skjule meldinger på denne måten er å gjemme den i et bilde. Det er også mulig å skjule meldingen i en lydfil. Dette gjøres ved at meldingen legges inn på bestemte steder i bitmønsteret på objekt-filen. Det er et viktig poeng at ikke bitmønsteret blir så endret at det er mulig for en tredjepart å se at objekt-filen er manipulert. Derfor bør meldinger som skjules på denne måten være så korte som mulig.

Vi har brukt programmet "Gifshuffle" for å skjule teksten "Jan Fredrik og Espen" i vår originale bildefil. Denne meldingen inneholder såpass få tegn at det nærmest er umulig for det blotte øyet å se manipuleringen på originalfilen. Resultatet kan du se her:

Link til bilde med skjult tekst....

Tekstgjenkjenning

Vi skal forsøke å gjennomføre en digital tolkning av teksten som finnes i bildet ovenfor. For å gjøre dette har vi først klippet ut teksten i bildet, og gjennomført en terskling til to gråtoner.Resultatet kan du se nedenfor:

nærbilde av navnet, gråtone - klikk for å forstørre tersklet bilde av navnet - klikk for å forstørre
Gråtonebilde av teksten (9kB)Tersklet versjon av teksten (16kB)

Vi kan umiddelbart se faktorer som vil vanskeliggjøre automatisk tegngjenkjennelse:

Alt i alt utgjør dette en rekke faktorer som vi kan forvente vil skape problemer for vår lille øvelse. Vi skal snart se nærmere på hvordan, men først en betraktning rundt datamengder og filstørrelser.

Det er ingen overaskelse at et utsnitt av vårt opprinnelige bilde konvertert til gråtonerutgjør en sterkt redusert datamengde - fra 833kB til 9kB. Det som derimot overasker oss er at filstørrelsen faktisk øker (fra 9kB til 16kB) når vi terskler bildet. Vi ville forvente at et bilde som er filtrert for all støy og som kun inneholder to gråtoner (0 og 255), ville, med JPEG's default settinger, bli mindre enn tilsvarende bilde før filtrering/terskling. En fornuftig forklaring på dette har vi ikke funnet. Vårt resultat er faktisk en kompresjonsrate på 0.56, altså en "negativ" kompresjon. Desto større motivasjon for automatisk tekstgjenkjenning. Et vellykkt utfall av digital tekstgjenkjenning vil kunne redusere vår datamengde til 8bit/chr x 21chrs (uten lf&cr) = 168bit = 21Bytes hvis resultatet lagres i UTF-8.

Vi åpnet derfor programmet Simple OCR for å gjenkjenne bokstavene digitalt. Simple OCR fungerer slik at det først forsøker å finne ut hvor mange objekter (bokstaver) som finnes i bildet. Deretter forsøker programmet å klassifisere hvert objekt, det vil si å gjenkjenne bokstavene som hvert objekt i bildet representerer. Resultatet fra denne prosessen vises i skjermbildet nedenfor:

klikk for å forstørre

Totalt lyktes Simple OCR med å kjenne igjen 3 bokstaver fra bildet, av totalt 19. Dette er en stor feilrate. Vi skal se nærmere på noen av årsakene til dette.

Simple OCR fant 23 objekter i bildet vårt. Teksten i bildet var "JAN FREDRIK STOVELAND". Om vi ikke regner med mellomrom og linjeskift utgjør dette 19 tegn. Simple OCR fant derfor 4 flere objekter enn det egentlig skulle være i bildet. Årsaken til dette er at elementene i noen av bokstavene i bildet ikke er sammenhengende. Det kan vi for eksempel se på bokstaven "T", hvor den horisontale streken ikke henger sammen med den vertikale streken. Simple OCR kjenner derfor igjen dette som to objekter, istedenfor en. Dette problemet gjorde seg gjeldende på 5 av de 19 bokstavene i bildet.

Det neste problemet for Simple OCR var at noen av bokstavene i bildet henger sammen. Dette førte til at Simple OCR noen steder tolket to objekter som ett objekt. Dette kan vi for eksempel se i bokstavene "LA" i "STOVELAND". Programmet tolket disse to bokstavene som en "U". Et liknende tilfelle har vi i tolkningen av "DR" i "FREDRIK". Totalt omfattet dette problemet altså 4 bokstaver.

Det siste feilkilden for Simple OCR var rett og slett at programmet ikke klarte å kjenne igjen håndskriften enkelte steder. Dette kan vi se på bokstaven "J" i "JAN" eller i bokstaven "O" i "STOVELAND". Programmet tolket disse bokstavene som henholdsvis "Q" og "B". Totalt utgjorde dette problemet 7 tilfeller.

Om vi summerer opp antall feiltolkede bokstaver, står vi igjen med 3 bokstaver som programmet lyktes med å gjenkjennene. Dette gjelder bokstavene "A" i "JAN", "I" i "FREDRIK" og "S" i "STOVELAND". Vi hadde nok forventet at programmet skulle klare å kjenne igjen flere bokstaver enn dette, men vi har lært at dersom man ønsker en digital rekonstrusjon av håndskriften i et bilde må man enten skrive pent, eller bygge inn intelligens i programvaren slik at ulike håndskrifter kan læres.

© 2003 - espesko&janfst