Programmering f¨or avl¨asning och avkodning av QR

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