ITN, Norrk¨oping 4 december 2011 Programmering f¨or avl¨asning och avkodning av QR-koder i MATLAB P ROJEKT I AVANCERAD B ILDBEHANDLING OCH B ILDANALYS TNM034 Medlemmar: Henrik B¨acklund Anders Hedblom Niklas Neijman Kontakt: [email protected] [email protected] [email protected] Sammanfattning Anv¨andning av QR-koder blir allt vanligare i v˚art moderna samh¨alle. Idag syns de o¨ verallt och underl¨attar s¨okningsprocesser och informationsh¨amtning f¨or de som b¨ar p˚a en smart phone. QRC st˚ar f¨or Quick Response Code, det vill s¨aga snabbt gensvars-kod. Grundid´en a¨ r att man vill kunna l¨asa av den tv˚adimensionella koden med en kamera och snabbt f˚a ut st¨orre m¨angder information. Bilden m˚aste genomg˚a ett antal procedurer, s˚a som inl¨asning till ett program, tr¨oskling, justering f¨or diverse distorsioner samt avkodning. Det finns givetvis olika s¨att att genomf¨ora detta p˚a. Den h¨ar rapporten tar upp n˚agra av dessa men koncentrerar sig i huvudsak p˚a att beskriva den metod som anv¨andes under ett projekt i kursen Avancerad Bildbehandling och Bildanalys – TNM034, vid Link¨opings Universitet, h¨ostterminen 2011. Programmet som anv¨ants f¨or att l¨osa QRC-projektet a¨ r MATLAB, som l¨ampar sig bra f¨or de flesta typer av kodad bildbehandling. En nackdel med MATLAB a¨ r att det a¨ r ett relativt sl¨ott program i j¨amf¨orelse med exempelvis applikationer som a¨ r kodade i C++. F¨ordelarna o¨ verv¨ager dock – MATLAB’s Image Processing Toolbox inneh˚aller en rad f¨ardiga funktioner som l¨ampar sig ypperligt till detta projekt. Alla f¨ardiga funktioner som har anv¨ants f¨orklaras, men inte i detalj. Den h¨ar rapporten tar upp teori och tillv¨agag˚angss¨att som anv¨ants f¨or att avl¨asa och avkoda QR-koder i godtyckliga omgivningar. Inneh˚allsf¨orteckning 1 Inledning 1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Metod 2.1 Beteckningar . . . . . . . . . . . . . . . . 2.2 Importering av bilder till MATLAB . . . . 2.3 Tr¨oskling och brusreducering . . . . . . . . 2.4 Hitta QR-koden i bilden . . . . . . . . . . . 2.4.1 Hitta referensmarkeringar (FM) . . 2.4.2 Algoritmen . . . . . . . . . . . . . 2.4.3 Hitta uppr¨atningsmarkeringen (AP) 2.5 Transformering . . . . . . . . . . . . . . . 2.6 Morfologiska operationer . . . . . . . . . . 2.7 Avkodning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 3 3 4 7 7 8 10 11 12 13 3 Resultat 15 3.1 Erh˚allen text fr˚an testbilderna . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2 Exempelbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4 Avslutning 16 4.1 Andra metoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2 Diskusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Litteraturf¨orteckning 18 Figurer 1.1 Exempel p˚a bild som skall avkodas. . . . . . . . . . . . . . . . . . . . . . . . 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 Inl¨ast bild. Tydligt f¨orvr¨angd och f¨orst¨ord av brus. . . . . . . . . . . . . . . . . Histogram f¨or hela bilden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Skalad version av histogramet. . . . . . . . . . . . . . . . . . . . . . . . . . . Utj¨amnat histogram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Skalad version av utj¨amnat histogram. . . . . . . . . . . . . . . . . . . . . . . Tr¨osklad version av bilden. H¨ar har alla pixlar v¨ardet noll eller ett. . . . . . . Utseendet p˚a en av de tre referensmarkeringarna. K¨alla: [4]. . . . . . . . . . . Ett m¨ojligt fall av extremt perspektiv . . . . . . . . . . . . . . . . . . . . . . . Hoplagd horisontell och vertikal s¨okning. De r¨oda ringarna a¨ r tillagda efter˚at f¨or att illustrera var det bildas kryss, dvs mittpunkterna f¨or FM. . . . . . . . . Utseende p˚a uppr¨atningmarkering. . . . . . . . . . . . . . . . . . . . . . . . . Bilden visar vilket FM som v¨aljs f¨orst, beroende p˚a rotation. . . . . . . . . . . QR-koden uppr¨attad och transformerad. L¨agg m¨arke till att koden b˚ade roterats och tryckts ihop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bilden har snyggats till med funktionen bwmorph(). . . . . . . . . . . . . . . . Mappad bild. De enstaka mappade pixlarna a¨ r de som kommer att l¨asas av vid avkodningen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 4 5 5 6 7 8 2.10 2.11 2.12 2.13 2.14 3.1 10 10 11 12 13 14 En av de mer f¨orvr¨angda bilderna, mappad och klar. F¨orstoringen a¨ r tillagd i efterhand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Kapitel 1 Inledning QR-kod [1] a¨ r en kodform ursprungligen skapad av Toyota f¨or att p˚a ett snabbt och enkelt s¨att kunna h˚alla reda p˚a sina bilar under tillverkningsprocessen. QR st˚ar f¨or Quick Response och grundar sig i att avl¨asning av den tv˚adimensionella koden snabbt ska ge ett resultat. De a¨ r a¨ ven k¨anda f¨or att inneh˚alla relativt mycket information j¨amf¨ort med den yta de upptar. D˚a det idag n¨astan a¨ r en sj¨alvklarhet att mobiltelefoner har en kamera inbyggd i sig blir QR-koden allt mer vanlig i dagens samh¨alle. QR-koder kan idag hittas i m˚anga situationer. Tidningsannonser a¨ r ett av de omr˚adena d¨ar l¨asaren snabbt och enkelt med mobilens hj¨alp kan ta kort avl¨asa koden och i m˚anga fall bli l¨ankad vidare till ytterligare information om den aktuella annonsen. Ett annat exempel a¨ r bibliotek, som s¨atter en QR-kod p˚a b¨ockernas ram. Man kan d˚a enkelt se hur m˚anga exemplar av boken som finns inne och a¨ ven direkt via mobilen g¨ora en reservation av boken. I denna rapport beskrivs i huvudsak ett tillv¨agag˚angss¨att f¨or att avkoda bilder som inneh˚aller delvis f¨orvr¨angda QR-koder. Andra tillv¨agag˚angss¨att kommer ocks˚a att diskuteras men inte f¨orklaras i detalj. Rapporten b¨orjar med den del som handlar om hur brus reduceras och d¨arefter hur man finner ett bra v¨arde att tr¨oskla bilden med. Detta f¨or att f˚a en bin¨ar bild, d¨ar vita och svarta ”QR-pixlar”¨ar s˚a v¨al uppdelade som m¨ojligt. Med bilden brusreducerad och tr¨osklad beskrivs sedan i rapporten hur man uppt¨acker de s˚a kallade Fiducial Marks och Alignment Pattern (Referens- och uppr¨atningsmarkeringar). Det a¨ r med hj¨alp av dessa som QR-koden kan uppt¨ackas i en r¨orig omgivning. Dessa markeringar a¨ r a¨ ven m¨ojliga att anv¨anda som referenspunkter n¨ar bilden ska transformeras f¨or att f˚a bort eventuella rotationer, skjuvningar och f¨orvr¨angningar. Detta f¨orklaras i avsnittet om transformering. Innan man ger sig in p˚a avkodning bilden s˚a utf¨ors en del morfologiska operationer f¨or att a˚ terst¨alla de delar av meddelandet som eventuellt a¨ r f¨orst¨ort. Det kan handla om pixlar som har hamnat fel eller f˚att felaktigt v¨arde. Efter detta f¨oljer proceduren p˚a hur det faktiska meddelandet utvinns. H¨ar handlar det om att omvandla de svartvita bin¨ara f¨alten till tecken. Rapporten redovisar d¨arefter resultaten som erh˚allits som f¨oljs av en avslutning. H¨ar diskuteras a¨ ven andra metoder f¨or att l¨osa problemet med avl¨asning och avkodning av QR-koder. Detta projekt a¨ r begr¨ansat att endast behandla QR-koder med ett visst antal QR-pixlar. Avkodning sker heller inte enligt standard, utan bit f¨or bit med ASCII-kod. Detaljer hittas i [2]. 1 1.1 Syfte Syftet med denna rapport a¨ r bland annat att: • Visa vad QR-koder kan anv¨andas till • F¨orklara ing˚aende hur man kan avl¨asa och avkoda dessa • Dokumentera f¨or- och nackdelar med den valda metoden • Ge insikt i vilka problem som kan uppst˚a Figur 1.1: Exempel p˚a bild som skall avkodas. 2 Kapitel 2 Metod 2.1 Beteckningar Beteckningar som anv¨ands genom rapporten a¨ r: Skal¨arer – gemener (a), Matriser/Vektorer – versaler (A), Referensmarkeringar (Fiducial Marks) – FM, Uppr¨atningsmarkering (Alignment Pattern) – AP. 2.2 Importering av bilder till MATLAB Importering av Bilder till MATLAB g¨ors enklast med den inbyggda funktionen imread(). Bilderna som anv¨ands i projektet a¨ r tagna fr˚an [3]. F¨or att kunna jobba vidare med bilderna anv¨ands funktionen im2double() f¨or att s¨akerst¨alla att alla pixelv¨arden a¨ r av typen double. Det a¨ r a¨ ven o¨ nskv¨art att kunna hantera b˚ade f¨argbilder och svartvita bilder. Eftersom hantering av dessa tv˚a typer av bilder a¨ r v¨aldigt annorlunda a¨ r det o¨ nskv¨art att konvertera alla f¨argbilder till svartvita s˚adana. Detta g¨ors med en enkel if-sats direkt efter bildinl¨asningen. Om bilden a¨ r en f¨argbild anv¨ands funktionen rgb2gray() som returnerar en gr˚askalebild. Figur 2.1 visar den inl¨asta bilden. Figur 2.1: Inl¨ast bild. Tydligt f¨orvr¨angd och f¨orst¨ord av brus. 3 2.3 Tr¨oskling och brusreducering F¨or att underl¨atta processen att hitta QR-kodens FM beh¨ovs en bild d¨ar informationen i QR-koden a¨ r tydlig. Koden blir tydlig genom att reducera bruset i bilden och d¨arefter tr¨oskla den. Genom att anv¨anda ett medelv¨ardesfilter av storleken 3x3 kan bruset i en bild reduceras. Medelv¨ardesfiltret g¨or att n¨arliggande pixlar f˚ar en mindre variation med avseende p˚a intensitet. N¨ar medelv¨ardesfiltret applicerats och bilden blivit brusreducerad ska bilden tr¨osklas. V¨ardet att tr¨oskla med best¨ams genom att anv¨anda dess histogram. Ett bra tr¨osklingsv¨arde a¨ r ett v¨arde som motsvarar det lokala minimumet mellan de tv˚a o¨ verv¨agande intensitetsk¨allorna, vilket kan ses i mitten av figur 2.2. Figur 2.2: Histogram f¨or hela bilden. Genom att titta p˚a hur derivatan skiftar tecken kan det lokala minimumet hittas. Problemet a¨ r dock att det finns mer a¨ n ett lokalt minimum mellan de tv˚a intensitetsk¨allorna. Detta framg˚ar av figur 2.3, som a¨ r en f¨orstoring av omr˚adet mellan de tv˚a o¨ verv¨agande intensiteterna. F¨or att Figur 2.3: Skalad version av histogramet. g¨ora histogrammet j¨amnare faltas detta med ett normaliserat gaussf¨onster av l¨angden 50. Efter faltningen ser histogrammet ut enligt figur 2.4 4 Figur 2.4: Utj¨amnat histogram. De lokala minimumen har nu reducerats till ett lokalt minimum vid intensiteten som ligger mellan de tv˚a o¨ verv¨agande intensitetsk¨allorna enligt figur 2.5, som a¨ r en f¨orstoring av figur 2.4. Figur 2.5: Skalad version av utj¨amnat histogram. Faltningen med gaussf¨onstret f¨orskjuter signalen. D¨arf¨or subtraheras halva filterl¨angden fr˚an den f¨orskjutna intensiteten f¨or att finna det verkliga tr¨osklingsv¨ardet. Bilden tr¨osklas slutligen med det funna tr¨oskelv¨ardet. Resultatet p˚a den tr¨osklade bilden kan ses i figur 2.6. 5 Figur 2.6: Tr¨osklad version av bilden. H¨ar har alla pixlar v¨ardet noll eller ett. 6 2.4 Hitta QR-koden i bilden Att uppt¨acka en QR-kod i en godtycklig bild a¨ r inte s˚a enkelt som man skulle kunna tro. M¨anniskan a¨ r duktig p˚a att hitta m¨onster och symboler i kaos, men f¨or en dator betyder ingen pixel i en bild mer a¨ n n˚agon annan pixel. En bild kan s¨okas igenom p˚a flera s¨att. Det mest intuitiva a¨ r att titta p˚a pixel f¨or pixel tills man har genoms¨okt hela bilden. Ett s¨att att g¨ora detta p˚a a¨ r att b¨orja uppe i o¨ versta v¨anstra h¨ornet och s¨oka sig a˚ t h¨oger l¨angs med f¨orsta raden. N¨ar radslut n˚as hoppar man ner till raden under f¨or att upprepa r¨orelsen. MATLAB a¨ r optimerat f¨or att arbeta med matrisoperationer. Det vill s¨aga, ist¨allet f¨or att jobba med ett v¨arde i taget kan m˚anga v¨arden i en matris, vilket a¨ r just vad en bild a¨ r, behandlas. D¨aremot kan det vara l¨attare att anv¨anda sig av n¨astlade loopar om det a¨ r o¨ nskv¨art att jobba p˚a ett enda v¨arde i taget. Det vill vi i detta fall. Detta stycke kod visar hur vi kan g˚a igenom bildens alla pixlar f¨or att hitta n˚agonting som liknar en QR-kod. Fr˚agan a¨ r; hur vet vi n¨ar vi st¨oter p˚a en QR-kod om vi bara tittar p˚a en pixel a˚ t g˚angen? Att pixeln a¨ r svart eller vit s¨ager i sig ingenting alls. Det a¨ r f¨oljden av svarta och vita pixlar som a¨ r intressant. 2.4.1 Hitta referensmarkeringar (FM) F¨or att QR-koder ska kunna hittas i godtyckliga omgivningar har de beg˚avats med s˚a kallade fiducial marks. Dessa utm¨arker sig genom att skapa ett visst f¨orh˚allande i svarta och vita pixlar, n¨ar man skannar dem, oavsett i vilken riktning detta sker i. Det spelar heller ingen roll hur stor QR-koden a¨ r i j¨amf¨orelse med sin omgivning. S˚a hur ser d˚a ett FM ut? Det visar figur 2.7. H¨ar visas a¨ ven att det inte spelar n˚agon roll hur markeringen avl¨ases, s˚a l¨ange detta sker i en r¨at linje. Figur 2.7: Utseendet p˚a en av de tre referensmarkeringarna. K¨alla: [4]. Ett f¨orh˚allande, 1 : 1 : 3 : 1 : 1, av svarta och vita pixlar kommer alltid att erh˚allas vid en perfekt skanning. Detta st¨ammer dock inte helt i verkligheten. 7 Eftersom en bild a¨ r uppbyggd av ett finit antal pixlar a¨ r det om¨ojligt att f˚a en perfekt avbildning av en QR-kod, s˚a vida dess sidor inte a¨ r helt lod- och v˚agr¨ata. Detta uppn˚as i princip bara i fall med artificiellt skapade koder – s˚adana som inte a¨ r inl¨asta med hj¨alp av en kamera. Vad det inneb¨ar a¨ r att ett perfekt f¨orh˚allande av olikf¨argade pixlar kommer aldrig att f˚as. D¨arf¨or kr¨avs en viss till˚aten felmarginal hos m¨atningarna. Ett v¨arde som ska vara 1 kan till˚atas att ligga mellan 0.7 och 1.3. Det a¨ r s˚aklart endast i extrema fall som v¨ardena faktiskt kommer att skilja sig s˚a mycket, men det kan intr¨affa. Exempelvis om s¨arskilda morfologiska operationer har utf¨orts p˚a den tr¨osklade bilden f¨or att ta bort avstickande pixlar etc. Ytterligare problem uppst˚ar n¨ar bilden a¨ r f¨orvr¨angd, det vill s¨aga, bildens normal inte a¨ r ortogonal med kamerariktingen. Markeringarna kan d˚a se ut p˚a f¨oljande s¨att: Figur 2.8: Ett m¨ojligt fall av extremt perspektiv N¨ar ett FM ser ut som ovan intr¨affar det problem att en linj¨ar f¨orskjutning av f¨orh˚allandet har skapats. Det kanske nu ist¨allet motsvarar 1.4 : 1.2 : 3 : 0.8 : 0.6. Problemet kan dock l¨osas till viss grad genom att man tittar p˚a f¨orh˚allanden mellan adderade omr˚aden. Vi l¨agger ihop det f¨orsta och andra omr˚adet, det andra och tredje omr˚adet och s˚a vidare. I den perfekta avl¨asningen skulle d˚a f¨orh˚allandet av olikf¨argade pixlar bli 2 : 4 : 4 : 2, vilket a¨ ven a¨ r noterat i figur 2.7. P˚a s˚a vis blir avl¨asningsalgoritmen mycket mindre k¨anslig f¨or st¨orningar. Att anv¨anda dessa metoder f¨or att skapa felmarginaler a¨ r i princip helt n¨odv¨andigt f¨or att kunna hitta och l¨asa av QR-koder i mer komplicerade bilder. 2.4.2 Algoritmen Det a¨ r som tidigare sagt o¨ nskv¨art att finna det magiska f¨orh˚allandet hos ett FM, eller n¨armare best¨amt tre stycken, f¨or att kunna l¨asa av en QR-kod. F¨oljande avsnitt f¨orklarar hur avl¨asningsalgoritmen fungerar. Enligt den n¨astlade for-loopen, i stycket ”Hitta QR-koden”, loopas den valda bildens pixlar igenom, en efter en. Bilden a¨ r sedan tidigare tr¨osklad, s˚a det som kan intr¨affa a¨ r antingen att en pixel har v¨ardet 1 (den a¨ r vit), eller att den har v¨ardet 0 (den a¨ r svart). N¨ar en svart pixel uppt¨acks f¨or f¨orsta g˚angen inneb¨ar detta att vi skulle kunna befinna oss i den yttersta kanten av ett FM. Bilden m˚aste skannas vidare f¨or att vi s¨akert ska veta. Men f¨or att kunna j¨amf¨ora med kommande pixlar beh¨over f¨oreg˚aende pixlar sparas undan i en vektor med fem element. Denna vektor kallas fram¨over f¨or V . Det beh¨oves ocks˚a en variabel p som h˚aller reda p˚a i vilket element i V vi befinner oss. Just nu har alla element i vektorn V , f¨orutom det f¨orsta, v¨ardet noll. Variablen p har v¨ardet ett. I V (p) till¨okas v¨ardet med ett p˚a grund av den svarta pixeln. S˚a l¨ange svarta pixlar forts¨atts att l¨asas h¨ander inget annat a¨ n att v¨ardet i samma position i V o¨ kas p˚a med ett f¨or varje svart pixel som hittas. N¨ar en vit pixel st¨ots p˚a h¨ander nu fler saker. 8 1. Eftersom detta a¨ r i b¨orjan av bilden vet vi att p har v¨ardet ett. Men det skulle ocks˚a ha kunnat r¨ora sig om det vita omr˚adet efter mittensektionen i FM. Vi m˚aste allts˚a kolla, om p = 1||p = 3, d˚a ska p till¨okas med v¨ardet ett. I nuvarande fall hamnar vi i element tv˚a i V . Denna position a¨ r nu redo att fyllas med antalet kommande vita pixlar. 2. Vi m˚aste ocks˚a kolla om p = 5. Om detta a¨ r sant har vektorn V fyllts med varierande svarta och vita pixlar och har uppt¨ackt den f¨orsta vita pixeln utanf¨or ett potentiellt FM. Nu j¨amf¨ors alla v¨arden i V enligt tidigare regler. St¨ammer f¨orh˚allandet mellan v¨ardena har ett FM hittas och positionen sparas (aktuell rad a¨ r k¨and och kolumnen till positionen a¨ r aktuell kolumn − V (5) − V (4) − V (3)/2). Koordinaterna sparas i en 2x3-matris, som i slut¨andan kommer inneh˚alla alla tre FM. Om f¨orh˚allandena st¨ammer m˚aste V ocks˚a nollst¨allas! Proceduren b¨orjar om p˚a nytt vid intilliggande pixel. 3. Om p = 5, men f¨orh˚allandet inte st¨ammer (dvs. ett FM hittades inte), m˚aste alla element propageras tv˚a steg a˚ t v¨anster i V . Det vill s¨aga, position 1 f˚ar v¨ardet fr˚an position 3 och s˚a vidare. V (4) tilldelas ett, eftersom en vit pixel trots allt hittades och V (5) tilldelas noll. Positionen p tilldelas v¨ardet 4 och uppstegandet av vita pixlar i denna position i V forts¨atts. 4. Om fall 1 och 2 a¨ r falska kan v¨ardet i V (p) lugnt o¨ kas p˚a, eftersom p d˚a har v¨ardet tv˚a eller fyra – positionen f¨or vita pixlar. Allm¨ant om en svart pixel uppt¨acks g¨aller: 1. Om p = 2||p = 4, o¨ ka p med ett. 2. Om fall 1 inte a¨ r sant, till¨oka V (p). Hela operationen skulle kunna liknas vid en faltning, d¨ar en fem element stor vektor sveper o¨ ver en stor matris. S¨okningsalgoritmen k¨ors tv˚a g˚anger; en f¨or att g¨ora en avs¨okning i horisotalled och en i vertikalled. Varje anrop kommer att skapa en pixelbild, med samma storlek som originalbilden. D¨ar det eftertraktade f¨orh˚allandet (2 : 4 : 4 : 2) hittas, ritas en vit pixel med v¨ardet ett ut. Det a¨ r det sammanlagda resultatet av dessa tv˚a funktionsanrop som r¨aknas. D¨ar pixlarna fr˚an de b˚ada s¨okningarna adderas ges v¨ardet tv˚a i de koordinater som FM’s mittpunkt befinner sig i. H¨ar a¨ r n¨amligen de enda positioner som pixlarna korsas. Dessa positioner hittas med funktionen f ind() och har ringats in i figur 2.9. 9 Figur 2.9: Hoplagd horisontell och vertikal s¨okning. De r¨oda ringarna a¨ r tillagda efter˚at f¨or att illustrera var det bildas kryss, dvs mittpunkterna f¨or FM. 2.4.3 Hitta uppr¨atningsmarkeringen (AP) F¨orhoppningsvis finns nu en matris med positionerna f¨or alla tre FM; allt som beh¨ovs f¨or att lokalisera QR-koden i bilden. Kommande steg a¨ r att g¨ora en transformation av hela bilden f¨or att korregera distorsioner eller f¨orvr¨angningar i bilden, s˚a som perspektiv, rotation, skevning eller oproportionerlig skalning. F¨or att kunna utf¨ora perspektivtransformation kr¨avs en fj¨arde referenspunkt. Detta brukar kallas f¨or alignment pattern, d˚a det anv¨ands till att r¨ata upp QR-koden till en rak kvadrat. Ett alignment pattern kan se ut som i figur 2.10. Figur 2.10: Utseende p˚a uppr¨atningmarkering. Det skulle vara m¨ojligt att anv¨anda samma metod f¨or att hitta AP som f¨or FM, men det medf¨or vissa problem. Eftersom AP har en mittpunkt p˚a endast en QR-pixels storlek a¨ r det l¨att h¨ant att man hittar ett liknande m¨onster i resterande kod. I det h¨ar projektet l¨ostes problemet genom att anv¨anda en av MATLAB’s inbyggda funktioner; regionprops() [5]. F¨oljande stycke kod visar hur man kan hitta ett AP eller FM genom att hitta ”tyngdpunkten” f¨or ett omr˚ade, som motsvaras av den vita ringen i FM eller den svarta ringen i AP. 10 Eftersom regionprops(image,0 centroid0 ) ger ifr˚an sig fler a¨ n den o¨ nskade punkten m˚aste man avg¨ora vilken som a¨ r den eftertraktade. Eftersom tre FM redan har hittats, kan ungef¨arlig uppskattning om var AP borde ligga g¨oras, med hj¨alp av enkel trigonometri. 2.5 Transformering F¨or att underl¨atta avl¨asningen och mappningen av alla QR-pixlarna kr¨avs det att QR-koden a¨ r korrekt placerad och att den a¨ r kvadratisk. Dvs. det f˚ar inte f¨orekomma n˚agon form av distorsion, av koden, t.ex. att bilden i fr˚aga har fotats fr˚an en vinkel som ger att QR-koden blivit f¨orvr¨angd. Detta kan l¨osas genom att applicera en transformationsmatris p˚a bilden. F¨or att transformationen ska fungera korrekt m˚aste fyra punkter (tre FM och en AP) i QR-koden lokaliseras i den otransformerade bilden, som diskuterades i delkapitel 2.4. Om inte dessa fyra punkter hittas misslyckas hela transformationen. N¨ar punkterna a¨ r lokaliserade, m˚aste rotationen av QR-koden tas till h¨ansyn eftersom f ind() s¨oker kolumnvis. Om bilden a¨ r roterad medurs s˚a kommer punkten som a¨ r i det nedre-v¨anstra h¨ornet att lokaliseras f¨orst, annars lokaliseras punkten i o¨ vre-v¨anstra h¨ornet f¨orst, vilket illustreras i figur 2.11. Figur 2.11: Bilden visar vilket FM som v¨aljs f¨orst, beroende p˚a rotation. Anledningen till det h¨ar a¨ r att punkterna placeras p˚a olika positioner i vektorn som lagrar punkterna och det a¨ r avg¨orande f¨or den slutliga transformationen av QR-koden. Transformationsmatrisen ber¨aknas med hj¨alp av funktionen cp2tf orm() [6]. F¨or att kunna ber¨akna transformationen beh¨ovs tre inparametrar till funktionen; placeringen av FM i den 11 otransformerade bilden, referenspunkter och vilken typ av transform som ska genomf¨oras vilket a¨ r 0 projective0 . Referenspunkterna a¨ r de punkter som best¨ammer hur den slutliga QR-koden/bilden ska transformeras. De avg¨or a¨ ven formen och uppl¨osning/skala p˚a den transformerade QR-koden. Referenspunkterna och FM i den otransformerade bilden sparas i 2x2 matriser, d¨ar elementen i matrisen inneh˚aller koordinaterna f¨or punkterna. Dessa tv˚a matriser anv¨ands sedan som inparameterar till cp2tf orm() tillsammans med transformationsmetoden 0 projective0 . Metoden kan hantera rotationer, skjuvningar, perspektivf¨orvr¨angningar m.m. Detta medf¨or att distorsionen av bilden endast beh¨over l¨osas med hj¨alp av cp2tf orm(), vilket a¨ ven bidrar till minskad ber¨akningstid av den slutliga algoritmen. Den slutliga transformationen sker med funktionen imtransf orm() [7]. Funktionen har f¨oljande inparametrar; transformationsmatrisen fr˚an cpt2tf orm()och bilden som ska transformeras. Slutligen erh˚alls en ny transformerad bild som visas i figur 2.12. Figur 2.12: QR-koden uppr¨attad och transformerad. L¨agg m¨arke till att koden b˚ade roterats och tryckts ihop. 2.6 Morfologiska operationer Ibland kan det vara bra att ta bort eller fylla ut pixlar som har uppst˚att under t.ex. tr¨osklingen. Dessa pixlar tillf¨or falsk information och d¨arav kan f¨orst¨ora det slutliga resultatet. F¨or att reducera/fylla dessa pixlar anv¨ands morfologiska operationer. Det som visas i figur 2.12 a¨ r bilden innan operationerna a¨ r applicerade d¨ar vi kan se att kanterna a¨ r taggiga och oj¨amna. Det finns ett antal morfologiska operationer att v¨alja p˚a f¨or att f¨orb¨attra QR-koden och operationerna som anv¨ands a¨ r o¨ ppning och st¨angning. Dessa tv˚a operationer appliceras p˚a bilden med hj¨alp av funktionen bwmorph() [8]. Funktionen har f¨oljande inparametrar; bilden 12 som operationerna ska appliceras p˚a och vilken typ av operation. Tillbaka ger funktionen en f¨orb¨attrad bild (figur 2.13) som ska mappas f¨or avkodning. Figur 2.13: Bilden har snyggats till med funktionen bwmorph(). Den st¨orsta orsaken till att operationerna anv¨ands a¨ r att fylla igen pixlar s˚a att mappningen kan ske utan st¨orningar. Bl.a. om det f¨orekommer att en svart QR-pixel har n˚agra pixlar som a¨ r vita eller tv¨art om. Mappningen i denna pixel skulle kunna placeras precis p˚a en av de felaktiga pixlarna och d¨arav avkoda till en etta ist¨allet f¨or nolla (och vice versa). 2.7 Avkodning Genom att k¨anna till hur m˚anga bildpixlar som motsvarar en QR-pixel a¨ r det m¨ojligt att hitta en bra startposition f¨or avkodningen. Startkolumnens v¨arde hittas genom att subtrahera tre QR-pixlar fr˚an det o¨ vre v¨anstra FM’s kolumnv¨arde. Startraden hittas p˚a motsvarande s¨att genom att addera fem QR-pixlar till FM’s radv¨arde. D˚a QR-koden alltid inneh˚aller ett fast antal QR-pixlar (1464 st) har denna avkodningsmetod formats f¨or just detta antal. Utifr˚an startpositionen p˚ab¨orjas en iterativ process att kolumnvis (v¨anster till h¨oger) h¨amta information (uppifr˚an och ner) d¨ar varje kolumn- eller radsteg motsvarar en QR-pixel. Metoden a¨ r uppbyggd f¨or att inte h¨amta information fr˚an FM d˚a deras syfte inte a¨ r att b¨ara meddelandeinformation. Innan en avkodning av QR-kodens bitar kan g¨oras utf¨ors en mappning med exakta positioner. H¨ar placeras enstaka pixlar ut i mitten av de olika QR-pixlarna. Om f¨altet a¨ r svartf¨argat s¨atts en vit pixel och vice versa. Detta f¨or att det tydligt ska g˚a att se hur mappningen har gjorts, vilket visas i figur 2.14. 13 Figur 2.14: Mappad bild. De enstaka mappade pixlarna a¨ r de som kommer att l¨asas av vid avkodningen. N¨ar den bin¨ara informationen erh˚allits fr˚an avkodningen a˚ terst˚ar det att utvinna medelandet fr˚an den. Funktionen f¨or att g˚a fr˚an bin¨ar representation av ett tal till ett faktiskt heltal (bin2dec()) enbart accepterar inpararmetrar av datatypen char s˚a anv¨ands funktionen num2str() i just syftet att erh˚alla denna matris av char. D˚a varje tecken i ASCII-kod a¨ r representerat av a˚ tta bitar matas funktionen bin2dec() med just a˚ tta element i taget. Resultatet a¨ r en matris med element inneh˚allande heltal mellan 0−255. Dessa heltal anv¨ands sedan som inparametrar till funktionen char() d¨ar t.ex. inparametern 0 660 resulterar i utparametern 0 B 0 . Slutresultatet blir en l˚ang textstr¨ang. 14 Kapitel 3 Resultat 3.1 Erh˚allen text fr˚an testbilderna Efter att de till projektet tillh¨orande bilderna hade avkodats hittades tv˚a olika meningar: • ”Byggbutiken online! URL: http://www.byggstommar.se” ¨ • ”Typ: Fastigheten Almhult J¨amnhult 1:28. Friliggande villa. Bygg˚ar 1980. Boarea ca 260 2 2 m , biarea ca 70 m . Areauppgifter enligt s¨aljaren. 6 rum, varav 4 sovrum. Tomtarea 4 514 m2 .” D¨ar den f¨orsta avkodas fr˚an alla Bygg X-bilder och den andra fr˚an Hus X-bilderna. 3.2 Exempelbild Figur 3.1: En av de mer f¨orvr¨angda bilderna, mappad och klar. F¨orstoringen a¨ r tillagd i efterhand. 15 Kapitel 4 Avslutning 4.1 Andra metoder Det finns m˚anga s¨att att avl¨asa och avkoda QR-koder, utan tvivel flera som a¨ r b¨attre a¨ n metoden som anv¨ants i detta projekt, b˚ade vad g¨aller snabbhet och precision. Metoden som anv¨ants – att s¨oka igenom hela bilden med for-loopar och leta efter FM’s – kan verka intuitiv och enkel att f¨orst˚a. Men det a¨ r en sl¨o operation som skalar d˚aligt med bildens storlek/uppl¨osning. Eftersom algoritmen s¨oker efter FM inte bara en g˚ang, utan tv˚a (en innan transformation och en efter) kommer ber¨akningstiden att o¨ ka mer a¨ n kvadratiskt med o¨ kad pixelm¨angd. Mer a¨ n, eftersom en relativt tung transformation ocks˚a utf¨ors p˚a bilden, vilken blir jobbigare ju st¨orre bilden a¨ r. S¨ag att bildens bredd och h¨ojd o¨ kas till det dubbla. En fyra g˚anger s˚a stor m¨angd av pixlar erh˚alls d˚a. Det inneb¨ar att vi har tv˚a anrop av ”hitta FM” och en transformation, som alla kommer att ta ungef¨ar fyra g˚anger s˚a l˚angt tid att utf¨ora. L¨agg sedan till o¨ kad tid i ytterligare funktioner, s˚a som histogramber¨akningar, morfologiska operationer och avkodning. Vi kan allts˚a med s¨akerhet s¨aga att denna metod l¨ampar sig b¨ast f¨or mindre bilder om man ska f˚a ett resultat inom rimlig tid. I slutet av projektet lades a¨ ven tid p˚a att implementera en annan metod. MATLAB’s egna funktion regionprops() anv¨andes, som bekant, till att hitta AP. Vi provade att anv¨anda denna p˚a hela bilden, a¨ ven f¨or att hitta FM. Metoden fungerade p˚a f¨oljande vis: Hitta alla centrumpunkter med regionprops() p˚a en tr¨osklad bild. F¨or att veta vilka som a¨ r FM och AP, och inte bara o¨ verfl¨odiga omr˚aden, anv¨andes en algoritm som liknas vid den i kapitel 2.4.2. F¨or alla centrumpunkter skannas omr˚adet b˚ade a˚ t h¨oger och v¨anster. Om ett sammanslaget m¨onster av svarta och vita pixlar, enligt 1 : 1 : 3 : 1 : 1-f¨orh˚allandet, hittas m˚aste detta vara ett FM. P˚a s˚a vis undviker man att skanna majoriteten av bilden och koncentrerar sig p˚a omr˚aden som har potential att vara gynnsamma. H¨ar sparas enorma m¨angder ber¨akningstid. Dock slopades metoden eftersom den verkade instabil och fungerade inte p˚a alla bilder. Problem uppstod t.ex. om ett FM fick tv˚a centrumpunkter. Ytterligare metoder till att l¨osa projektuppgiften p˚a skulle kunna vara att applicera ett Laplace-filter p˚a hela bilden. Vad detta ger a¨ r att a˚ terspegla h¨oga frekvenser i bilden. D¨ar det blir stora f¨or¨andringar, som mellan en svart och vit pixel, blir utslaget maximalt. D¨ar det inte h¨ander s¨arskilt mycket, i resterande bild, ger Laplace-filtret l˚aga utslag. Resultatet blir en i stort sett svart bild d¨ar QR-kodens kanter blir markerade med vita linjer. Grundtanken a¨ r bra, men metoden medger m˚anga problem. Ett fotografi p˚a en QR-kod kommer antagligen inte att a˚ terge denna som helt svart och vit. En bild p˚a en himmel bakom ett hus ger troligtvis en h¨ogre kontrast mellan m¨orkt och ljust. D¨arf¨or kommer man inte att veta 16 vilken intensitet hos pixlar i den Laplace-filtrerade bilden man ska leta efter. Endast i artificiellt skapade bilder med en perfekt svart-vit QR-kod kommer man att erh˚alla fullt vita kanter. Ett annat problem a¨ r att man fortfarande m˚aste lokalisera FM och AP, i den funna QR-koden, vilket leder till algoritmer som liknar tidigare diskuterade. Det blir en aning t˚arta p˚a t˚arta. En annan del som g˚ar att f¨orb¨attra a¨ r avkodningsdelen d¨ar programmet a¨ r programmerat f¨or att endast fungera f¨or ett fast antal QR-pixlar. Vi ger h¨ar efter ett f¨orslag p˚a hur denna begr¨ansning kan undvikas. Ett s¨att att g¨ora programmet mer generellt a¨ r att anv¨anda sig av FM’s bredd och utifr˚an denna bredd f˚a fram hur bred en QR-pixel a¨ r. Med denna information om QR-pixelns storlek a¨ r det enkelt att ta fram hur m˚anga QR-pixlar som finns att avkoda. 4.2 Diskusion Alla bilder som anv¨ants under tr¨aningsfasen har g˚att igenom v˚ar avkodningsalgoritm, som ger text motsvarande det kodade meddelandet. Exemplet i resultatet a¨ r en av de sv˚arare tr¨aningsbilderna att avkoda i och med att bilden a¨ r f¨orvr¨angd p˚a flera olika s¨att, dvs. det a¨ r en kombination av brus, rotation och perspektiv. D˚a avkodningsalgoritmen hanterar dessa sv˚ara kombinationer anser vi att det a¨ r en s¨aker metod. Metoden kan dock inte anses vara perfekt d˚a avkodningsalgoritmen inte hanterar extrema fall av f¨orvr¨angningar, s˚a som kraftigt perspektiv eller r¨orelseosk¨arpa. Dessa sv˚arare fall har valts att bortse fr˚an, d˚a projektet endast a¨ r t¨ankt f¨or att f¨orst˚a grundprincipen av den bildbehandling som beh¨ovs i avl¨asning och avkodning av QR-koder. Avkodningsalgoritmer av kraftfullare typ f¨orekommer ofta i mobiltelefoner och andra handh˚allna enheter. Det a¨ r d˚a m¨ojligt att ta en ny bild med f¨orvr¨angning i mindre skala, samt att ett snabbare programmeringsspr˚ak kan anv¨andas. Tid har inte varit prioritet i detta projekt d˚a MATLAB i allm¨anhet a¨ r en relativt seg programmeringsmilj¨o. Tiden som det tar att avkoda en inl¨ast bild varierar med storlek p˚a bilden. De mindre bilderna tar 1-3 sekunder p˚a sig, medan de h¨oguppl¨osta tar upp emot 10 sekunder. 17 Litteraturf¨orteckning [1] Luiz F. F. Belussi and Nina S. T. Hirata. Fast QR Code Detection in Arbitrarily Acquired Images. Department of Computer Science, Institute of Mathematics and Statistics, University of S˜ao Paulo — S˜ao Paulo, Brazil. Senast h¨amtad 2011-11-20. [2] Bj¨orn Kruse. Advanced Image Processing, TNM034, QR-code processing. Institutionen f¨or teknik och naturvetenskap, Link¨opings universitet. Senast h¨amtad 2011-12-03. [3] Bj¨orn Kruse. http://www.student.itn.liu.se/kursmaterial/TN/M/ TNM034/Training/. Senast h¨amtad 2011-11-25. [4] Chung-Hua Chu, De-Nian Yang, Ya-Lan Pan, Ming-Syan Chen. Stabilization and extraction of 2D barcodes for camera phones. Received: 7 March 2010 / Accepted: 30 c Springer-Verlag 2010 September 2010 / Published online: 21 October 2010 c 1984-2011- The MathWorks, Inc. http://www.mathworks.se/help/ [5] toolbox/images/ref/regionprops.html. Senast h¨amtad 2011-12-04. c 1984-2011- The MathWorks, Inc. http://www.mathworks.se/help/ [6] toolbox/images/ref/cp2tform.html. Senast h¨amtad 2011-12-04. c 1984-2011- The MathWorks, Inc. http://www.mathworks.se/help/ [7] toolbox/images/ref/imtransform.html. Senast h¨amtad 2011-12-04. c 1984-2011- The MathWorks, Inc. http://www.mathworks.se/help/ [8] toolbox/images/ref/bwmorph.html. Senast h¨amtad 2011-12-04. 18
© Copyright 2024