IPLab, Nada, KTH och SU 2002-10-21 sida 1 Tentamen i Text- och bildbehandling (2D1378) måndagen den 21 oktober 2002, kl. 8 13 med lösningsidéer Hjälpmedel: räknedosa Fråga om något verkar oklart. Ange tydligt på omslaget vilken linje (program) du tillhör. Av 52 möjliga poäng ger 24 säkert betyg 3 (G), 34 säkert betyg 4, 38 säkert betyg VG och 43 säkert betyg 5. 1 (6) Förklara följande begrepp (komplettera gärna med exempel) Du ska dels beskriva begreppet, dels avgränsa det från närliggande begrepp. (Varje felaktig eller utelämnad förklaring ger 1 p avdrag. Uppgiften ger dock minst 0 p.) a. anfang b. bindeblank c. cicero d. circumflex e. decimaltabulator f. didoner g. gula fläcken h. histogram i. hängande indrag 2a (3) 2b (3) 3a (3) 3b (2) 4a (3) 4b (2) (Teckenkoder) Hur många tecken rymmer teckenkoden Unicode? Diskutera hur detta antal räcker till för ambitionen att koda alla världens tecken Ge några exempel på att det inte räcker med principen att varje teckenkod står för en glyf (teckenbild) och att glyferna placeras i ordning från vänster till höger (Strängsökning) Redogör för skillnaden mellan»omodifierad» och»modifierad» KMP bl.a. med något lämpligt exempel. Ibland vill man kunna rangordna dokument eller dokumentdelar efter hur väl de överensstämmer med sökkriteriet. Redogör för hur man kan använda»termvektorer» med vikter i sådana fall. (Typografi och skrivregler) Den typografiska utformningen ska ju hjälpa läsaren att uppfatta dokumentets struktur. Vilka typografiregler är viktiga för hur man markerar indelningen i meningar, stycken, avsnitt och kapitel? Hur markerar man citat? 5 (3) (Formatmallar) Det finns många metoder för att beskriva utformningen av dokument så att beskrivningen kan hållas isär från själva innehållet. Beskriv viktiga likheter och skillnader mellan formatmallar i MSWord och CSS för HTML- och XML-dokument. 6a (2) (Postscript) Hur gör man i Postscript motsvarigheter till a = a+4; och x[i] = 16;? 6b (2) I Postscript flyttar man ju aktuellt koordinatsystem genom att använda en transformationsmatris, [a b c d e f], som ger sambandet mellan koordinaterna i det nya koordinatsystemet, (x' y'), och i det gamla koordinatsystemet, (x y), för en punkt som a c e x x b d f y = y 0 0 1 1 1 Förklara och rita hur det nya koordinatsystemet ligger efter transformering av Postscripts initialkoordinatsystem med [1 0 0,8 0,6 250 350]. 7a (4) (Kodning) Komprimering enligt LZW kan beskrivas så här: // hantering av fullt lexikon är utelämnad s = read(); while (not eof()) { t = read(); // låt inlexs( s) testa om strängen s finns i lexikonet if (inlexs( s+t)) { s = s+t; else { write( code( s)); // låt lex( s) lägga in strängen s på nästa lediga plats lex( s+t); s = t;
IPLab, Nada, KTH och SU 2002-10-21 sida 2 7b (3) Om man beskriver dekomprimering så här: s = ""; while (not eof()) { a = read(); // låt seq( i) vara strängen med index i d = seq( a); write( d); b = d; while (b!="") { // låt next() ta bort det första tecknet och returnera det t = b.next(); if (inlexs( s+t)) { s = s+t; else { lex( s+t); s = t; fungerar det på de flesta texter t.ex. "ABCAB" men med vissa texter t.ex. "EEEEE" och "AABABABAA" har man inte hunnit lägga in all information i lexikonet när man behöver den. Modifiera dekomprimeringen så att även sådana fall klaras. Konstruera en Huffmankod för 5 lika sannolika meddelanden. Vilken blir kodordens verkliga resp. optimala medellängd? 8 (4) (Färg) Beskriv färg enligt den vanliga modellen (CIE-modellen) för människans färgseende och hur ett provs färgkoordinater mäts. 9a (3) 9b (3) 10a (4) (Rastrering) Konstruera ett rationellt raster med 26 nivåer och rastervinkeln ungefär 37 grader. Beskriv aperiodisk rastrering. (Bildoperationer) Den geometriska operationen»skalning» kan ju ses som att * approximera den gamla bilden f( x; y) med någon funktion f ( x ; y ) och beräkna varje bildpunkt i den nya bilden gx ( ; y ) som värdet i motsvarande punkt * gx ( ; y ) = f ( Tx ( ; y )). Gör detta för vridning av bilden nedan vinkeln atan(3/4) medurs kring sitt nedre vänstra hörn. (Den nya bilden innehåller fler bildpunkter än den gamla.) 2 1 50 100 150 200 0 0 1 2 10b (2) Vad är»mask» i bildbehandling? Lycka till!
IPLab, Nada, KTH och SU 2002-10-21 sida 3 Denna tenta var tydligen svårare än väntat bl.a. genom att innehålla flera moment än vanligt och därför har betygsgränserna justerats till 21 p för betyg 3, 32 p för betyg 4 och 42 p för betyg 5. 1 a. anfang Dekorativ bokstav som inleder kapitel eller stycke. Den är större än brödtexten, ofta utsirad och ibland nedsänkt några rader. b. bindeblank Specialtecken som används där man vill ha ordmellanrum men där raden inte får brytas. Skapas med alternativ-blank i MSWord och med ~ i TeX. c. cicero Typografisk måttenhet för längd med storleken 12/2660 m 4,51 mm. d. circumflex Det diakritiska tecknet ^ som används i ord som être och i vissa programspråk för»upphöjt till». e. decimaltabulator Horisontell position sådan om det finns ett bråktecken (decimalkomma) i motsvarande kolumn högerställs delen före bråktecknet mot positionen och resten vänsterställs. Om inget bråktecken finns högerställs kolumnens hela innehåll mot denna position. f. didoner Teckensnittsfamilj innehållande bl.a. teckensnitten Didot och Bodoni som alla utmärks av stor kontrast mellan grundstreck och hårstreck och av tunna seriffer. DNs titel och logo använder didoner. g. gula fläcken Området på näthinnan kring ögats optiska axel. Där är tätheten av tappar extra hög och därmed upplösningen och färgseendet extra bra. h. histogram En presentation av ett antal talvärden som andel eller antal i olika intervall. Ett histogram presenteras ofta som ett stapeldiagram. I bildbehandlingssammanhang visar man andelen bildpunkter i olika svärtningsintervall t.ex. (i*16; i*16+16] för i=0 31. En vanlig bildbehandlingsoperation är histogramutjämning som genom lämplig tonförändring gör histogrammet så jämnt som möjligt. i. hängande indrag Formgivning av stycke så att första raden saknar indrag till vänster medan övriga rader har visst och lika vänsterindrag. 2a 2b 3a Unicode är en 16-bitarskod, således med 65 536 tecken. Det finns dock en utbyggnadsmekanism, kallad surrogatpar, där 1 024 koder används som första del och 1 024 andra koder som andra del i par. Med utvidgningen får man alltså 65 536 1 024 1 024+1 024*1 024=1 112 064 tecken. Världens fonetiska skriftsystem (bl.a. vårt eget) har ett 50-tal tecken var, om man skiljer på gemena och versaler, ryms lätt medan bildskriftsystem som det kinesiska där varje ord eller stavelse har eget tecken har många tecken. Vardagsjapanska påstås använda ca 5 000 tecken medan man lär behöva 30 000 tecken för modern skönlitteratur och historiska kinesiska texter. Om man också vill koda matematiska symboler, arkitektsymboler, elektriska symboler osv. kanske koden blir full såsmåningom men det dröjer nog länge. Olika skriftsystem har olika skrivriktningar. Vi skriver vänster till höger, arabiska och hebreiska skrivs höger till vänster, japanska och kinesiska skrivs ofta i kolumner uppifrån och ner med nästa kolumn till vänster och det finns skriftsystem där varannan rad skrivs från vänster och varannan från höger. Accenter placeras ibland över eller under tecknen och i vissa språk finns vokaltecken som placeras på liknande sätt. I vissa skriftsystem beror teckens utseende på sammanhanget. Ligaturerna fi och fl är exempel på detta siksom att bokstaven för s ser olika ut i grkiskan inuti ord och i slutet av ord. De arabiska konsonanterna har olika former för fristående, initial, final och intermediär placering i ordet. Dessutom finns andra skrivregler som skiljer mellan språk. I KMP förbehandlar man mönstret och ställer upp en tabell, next[i], som innehåller den position i mönstret man härnäst ska jämföra med när man hittat första olikheten mellan en position i i mönstret och någon position i texten. Man utnyttjar att man genom jämförelserna känner till de i 1 närmast föregående tecknen i texten. Det kan hända att p[i]=p[next[i]] och då blir det olikhet igen. Det accepterar man i»omodifierad» KMP. I»modifierad» KMP modifierar man next så att man genast flyttar till ett läge där mönstret innehåller ett annat tecken. Med p="ababaa" blir omodifierad next=[0 1 1 2 3 4] och modifierad next=[0 1 0 1 0 4].
IPLab, Nada, KTH och SU 2002-10-21 sida 4 3b 4a 4b Vi vill karaktärisera varje dokument eller dokumentdel genom att för varje icketrivialt ord (bortse från och, eller, på, av o.d) ange en vikt som anger hur karaktäristiskt detta ord är för dokumentet. Ord som är vanliga i dokumentet bör ha stor vikt och större om ordet förekommer i få dokument. Viktsvektorerna bör vara normerade t.ex. så att viktssumman (eller viktskvadratsumman) är 1. Ett sökkriterium är en sådan viktsvektor där man givit hög vikt åt ord man anser vara relevanta i sökningen. Dokumenten kan rangordnas efter skalärprodukterna med sökvektorn. Meningar börjar med versal och slutar med punkt, utropstecken eller frågetecken följt av ett blanktecken. Stycke markeras med indrag av första raden drygt en fyrkant av brödtextens grad med alla indrag lika stora. Man gör inget indrag på första stycket efter rubrik. I vissa sammanhang kan man istället för förstaradsindrag ha extra avstånd över stycken. Kapitel och avsnitt inleds med en rubrik. Rubrikerna sätts i teckensnitt som är mer framträdande än brödtexten och så att rubrikens nivå framgår tydligt genom att man använder större och ev. fetare text till högre nivåer. Man bör inte ha mer än tre nivåer. Om man ändå använder fler, skiljer man inte dessa rubriker typografiskt utan enbart med hierarkisk numrering t.ex. 1.4.15.3 skild från rubrikens text med 1/2 fyrkant mellanrum. Rubriker sätts normalt vänsterställda utan indrag, utan avslutande punkt och inte med enbart versaler. Man kan låta kapitel börja på ny sida eller t.o.m. ny högersida. Man använder i svenskan antingen»» eller som citattecken med för innercitat (dvs. citat i citat). I engelska använder man resp.. Man använder inte tecknen ' eller ". Långa citat sätter man ibland i mindre grad och med indrag både till vänster och till höger. 5 Låt fmsw stå för formatmallar i MSWord. Man kan i stort sett styra samma saker med fmsw och CSS. Med CSS kan man dock t.ex. föreskriva olika format för olika presentationsmedier och fmsw kan specificera vilket språk en dokumentdel ska anses ha (för användning i språkkontrollverktygen). fmsw är inte hierarkiskt eller möjligen hierarkiskt i två nivåer genom att det finns två sorters mallar där styckemallar kan knytas till hela stycken och textmallar kan knytas till en följd tecken (och inte specificera styckeegenskaper). CSS är hierarkiskt genom att knyta mallar till element, som ju är hierarkiska; för ett element gäller formatmallen för detta element och de i denna formatmall inte specificerade egenskaper som är specificerade i formatmallen för närmast omgivande element osv. Utformningen av varje del av ett dokument är specificerad antingen direkt eller via fmsw. fmsw finns i dokumentet men man kan hämta formatmallar från ett annat dokument. Om mottagaren inte har teckensnitt som specificeras i fmsw görs utbyte. För CSS väljer webbläsaren en grundutformning som används om ingen annan utformning specificeras med CSS och man kan specificera en lista av teckensnitt där det första tillgängliga ska användas. CSS är en öppen standard medan fmsw är kommersiellt och Microsoft kan nog närsomhelst ändra mekanismerna. 6a Vi antar att a finns och har något värde. a = a + 4 kan skrivas /a a 4 add def som lägger resultatet i en lokal variabel a eller /a a 4 add store som modifierar den närmast omgivande variabeln a. /a lägger namnet»a» på stacken, en sorts referens till variabeln a. Vi antar vidare att det finns en vektor x och en heltalsvariabel i. Variabeln x kan ha skapats med /x 20 array def. x[i] = 16 kan skrivas x i 16 put. x lägger en referens till vektorn x på stacken.
IPLab, Nada, KTH och SU 2002-10-21 sida 5 6b Vi beräknar koordinaterna i gamla systemet för hörnen i det nya systemets enhetskvadrat och ser att det nya systemet har origo i (250; 350), 1 på x-axeln i (251; 350), 1 på y-axeln i (250,8; 350,6) dvs. samma skala men y-axeln så att den bildar vinkeln atan(0,6/0,8) med x-axeln dvs.: y 1 0 0 1 x 7a Antag att texten är kodad som 8.bitarstecken och att lexikonet från början har 512 platser. "ABCAB" kodas som 65 66 67 256 med AB BC CA på platserna 256 258. "EEEEE" kodas som 69 256 256 med EE EEE på platserna 256 257. "AABABABAA" kodas som 65 65 66 257 259 65 med AA AB BA ABA ABAA på platserna 256 260. Vid uppackning av 65 66 67 256 går det bra. Plats 256 i lexikonet har fått sitt värde innan vi använder det. Vid uppackning av 69 256 256 har plats 256 i lexikonet inte fått något värde när vi vill packa upp 256. Detta kan bara inträffa när nästa kodade följd är senast avkodade följd följd av sitt första tecken. Plats 256 i lexikonet ska ha värdet EE. Vid uppackning av 65 65 66 257 259 65 får vi lätt A A B AB med AA AB BA inlagt på platserna 256 258 men på plats 259 finns inget värde. Värdet där måste vara AB följt av A dvs. ABA. Följden avslutas med 65 dvs. A. Vi får modifiera uppackningen till: s = ""; while (not eof()) { a = read (); // låt inlexi( i) testa om någon sträng med index i finns if (inlexi( a)){ // låt seq( i) vara strängen med index i d = seq( a); else { d = d+d.first(); write( d); b = d; while (b!="") { // låt next() ta bort det första tecknet och returnera det t = b.next(); if (inlexs( s+t)) { s = s+t; else { lex( s+t); s = t; 7b Man inser i det närmaste direkt att det behövs 3 kodord med längd 2 bitar och 2 kodord med längd 3 bitar. Uppställt enligt Huffmans metod blir det: A B C D E 0,2 0,2 0,2 0,2 0,2 B' D' 0,4 0,4 A' 0,6 A'=0 D'=1 A=00 B'=01 B=010 C=011 D=10 E=11 Medelländen är 0,2(2+3+3+2+2)=2,4 Minimala medelländen är 5*0,2*lb(0,2)=1,609/0,693 2,32
IPLab, Nada, KTH och SU 2002-10-21 sida 6 8 Kurvorna r, g och b visar vilka intensiteter av spektrallinjerna 700,0 nm, 546,1 nm resp. 435,8 nm som ska blandas för att resultatet, av en normalbetraktare, ska uppfattas som samma färg som en spektrallinje med en viss våglängd. 0,4 b r 0,2 g 100 80 0,0 60 40 r 20 0 400 500 600 700 [nm] 400 500 600 700 [nm] För ett prov med reflektansen l( λ ) beräknar man R= l( λ) r( λ) dλ G= l( λ) g( λ) dλ B= l( λ) b( λ) dλ och beroende på färgsystem transformerar man detta till någon annan taltrippel reflektans [%] 9a (3) (Rastrering) Konstruera ett rationellt raster med 26 nivåer och rastervinkeln ungefär 37 grader.
IPLab, Nada, KTH och SU 2002-10-21 sida 7 9b Man delar inte in exponeringspunkterna i rasterpunkter (rasterceller) utan hanterar exponeringspunkterna var för sig. Om svärtningen i en bildpunkt är 128 eller större svärtar man motsvarande exponeringspunkt. Då har man antagligen gjort denna punkt för mörk och annars för ljus. Felet sprider man över de bildpunkter i omgivningen som ännu ej har rastrerats. Olika feldiffusionsmolekyler används. Man kan t.ex. sprida felet med 1/3 vardera till bildpunkterna till höger, rakt ner och snett nedåt höger. Bildpunkterna i a ger på detta sätt exponeringspunkterna i b. 100 100 120 100 100 +33 50 50 150 50 +33 50 +34 a 120 100 133 120-41 150 83 84 150-41 -40 100 133 79 83 44 110 +26 0 0 1 0 1 0 b 100 133 79 100 133 79 100 133 79 83 44 +28 136 83 72 68 +24 83 72 92 a 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 b
IPLab, Nada, KTH och SU 2002-10-21 sida 8 10a För varje bildpunkt i den nya bilden som berörs vill vi veta var motsvarande punkt i den gamla bilden ligger. Vi kan se det som att vi lägger nätet av bildpunkter för den nya bilden på den gamla bilden. Vi får följande tabell över koordinaterna i den gamla bilden för de hörn i den nya bilden som ligger i eller omger den gamla bilden. Bildpunkternas värden enligt närmaste granne (NG) anges. y: x: 1 0 1 2 3 2 ( 1,2; 1,6) ( 0,4; 2,2) (0,4; 2,8) NG 0 0 0 1 ( 0,6; 0,8) (0,2; 1,4) (1,0; 2,0) (1,8; 2,6) NG 0 50 100 0 0 ( 0,8; 0,6) (0; 0) (0,8; 0,6) (1,6; 1,2) (2,4; 1,8) NG 0 150 150 100 0 1 ( 0,2; 0,4) (0,6; 0,8) (1,4; 0,2) (2,2; 0,4) NG 0 0 0 0 Man kan som alternativ till närmaste granne använda bilinjär approximation, dvs. approximera den gamla bilden över en bildpunkt med a+bx+cy+dxy så att det stämmer i hörnen. För ( 1; 1) får vi a+b*( 1)+c*( 1)+d*( 1)*( 1)=0 a+b*( 1)+c*(0)+d*( 1)*(0)=0 a+b*(0)+c*( 1)+d*(0)*( 1)=0 a+b*(0)+c*(0)+d*(0)*(0)=150 varav a=150, c=150, b=150 och d= a+b+c=150 varav g( 1; 1)=f*( 0,2; 0,4)=150*(1 0,2 0,4+0,08)=72 Övriga punkter beräknas på motsvarande sätt. Med närmaste granne är arbetet mindre. 50 100 0 50 0 150 200 150 150 100 10b En mask är ursprungligen något som hindrar en del av bilden att bli exponerad. I digital bildbehandling är det något som bestämmer hur stor effekt en bildbehandlingsoperation ska ha. En mask kan ses som en gråbild där svart anger ingen effekt och vitt anger full effekt. I operationen skärpning med oskarp mask adderar man till bilden någon multipel av skillnaden mellan bilden och en lågpassfiltrerad version av bilden. Man kan se det lågpassfiltrerade negativet som en mask som styr effekten av additionen.