Image processing of protein chips for diagnosis of prostate cancer
|
|
- Christian Larsson
- för 9 år sedan
- Visningar:
Transkript
1 Image processing of protein chips for diagnosis of prostate cancer in cooperation with the Department of Electrical Measurements Lund Institute of Technology Emma Fägerlind π03, Marianne Sandin π03, Introduction The development of protein chips for cancer diagnosis is a research field combining medicine and electrical measurements. The aim of the project is to determine whether image processing can speed up the analysis which today is done by hand. 1 Protein chips A protein chip consists of a silicon surface with micro/nanometer sized pores. The silicon surface is hydrophobic and works as a carrier of bio molecules which captures analytes, which for example can indicate cancer. The analytes are labeled with fluorescent molecules to be detectable in a fluorescence microscope. From the fluorescence microscope images with discs for every sample are obtained. 2 Images Images inted to be used for prostate cancer diagnosis are analyzed. A typical image consists of a number of circular areas placed in an approximate grid structure with an angular component. See figure 1. The images have different amounts of noise and the areas of interest are somewhat deformed. The intensity is measured in relation to the background to determine if there is a significant amount of investigated substance in a sample. 3 Approach The approach used to efficiently detect the discs is to use the fact that they are spread according to a grid structure. The thought is to first find the most prominent discs and adapt a grid after those. After this crude sorting, the intersections in the grid without previously detected discs are investigated to look for less obvious samples. 1
2 4 Algorithm The figures mentioned in the text and input-output images for the rest of the material can be seen in appix. If interested, please contact us for MatLab scripts. 4.1 Segmentation Images such as the one seen in figure 1 are used as input. A Gaussian smoothing is preformed to reduce noise which will simplify the initial search for intensity maxima. The edges of the convoluted image are distorted, so only the valid part of the image is used, resulting in an image of smaller size. The Gaussian smoothing for the input image in figure 1 is seen in figure 2. Edge detection with the Sobel method is done to find the outlines of the discs, as seen in figure 2. The found edges are dilated to be connected circles, seen in figure 2 and the discs are filled to obtain a saturated area, as also seen in figure 2. Furthermore every object that cuts the border of the image is removed, as seen in figure 3 and finally the image is eroded to make the edges smoother, also seen in figure Identification In figure 4, the outlines of the found discs are projected onto the original image, with the difference in size between the images compensated for. Having obtained the location of a number of discs, the centers of the discs are located and the mean diameter is calculated. In figure 5 the centers of the discs are plotted in the original image. Using the center coordinates and arctangent, the grid angle is calculated. The image is rotated the acquired angle and the calculations are redone to get the new center coordinates. The rotated image and the new centers can be seen in figure 5. From the new centers, mean gridlines are calculated, these are plotted in figure 5. Subsequently the grid intersections are investigated. If there is a grid center close to an intersection the old coordinates are chosen. The intersection is said to be the center of a disc if the difference between the intersections intensity and the disc mean intensity is less than four standard deviations of the disc mean. In figure 5 all grid intersections are labeled, green as a positive result for a disc and red as negative. Finally a small circle around every disc centre is selected as data for estimating the mean intensity of the disc. The chosen circles and the centrers can be seen in figure 6. 5 Future work The image material, on which the program is based, consists of seven images. Since the material is small it is difficult to determine the efficiency of the algorithm concerning e.g. robustness. For it to be of more practical use it would have to be adapted to more images. As of the moment, the algorithm is quite 2
3 parameter depent, and since the parameters are adapted to a small sample of images, the results may vary. More testing with a larger sample, and a more automated parameterization is required. 6 References A Appix Here images are presented. Figure 1: Original image Figure 2: Segmentation steps 3
4 Figure 3: Segmentation steps Figure 4: Outlined original image 4
5 Figure 5: Identification results Figure 6: Intensity computation 5
6 Figure 7: Example image 1 -input Figure 8: Example image 1 -output Figure 9: Example image 2 -input 6
7 Figure 10: Example image 2 -output Figure 11: Example image 3 -input Figure 12: Example image 3 -output 7
8 Figure 13: Example image 4 -input. The algorithm fails to find any discs in this image. Figure 14: Example image 5 -input Figure 15: Example image 5 -output. 8
9 Segmentation with Level-Sets Erik Ask Abstract A method for segmenting an image is to use an evolving curve, that is drawn to, and stopped at the boundary of the regions one wish to segment. In the level set method the curve is embedded as the zero level set of a higer order function. The boundary is usually based on edges in the image or by properties of regions, and is formulated with functionals minimized when the curve coincides with them. There are no restrictions on the speed function F. The principle can be illustrated by the unit circle, wich can be seen as the zero level set of φ = x2 + y 2 1 = 0, see Figure 1 1 Introduction Level-sets Consider a closed curve (interface), δω, that separates IR 2 into the non-empty subdomains Ω inside and Ω + outside the curve. Now add movement in the normal direction with a speed given by F. The goal is to track the evolution of the curve. One way of doing this is to take δω as the zero-level set of a higher dimensional function φ. The curves position at time t is given by δω = {(x, y) φ( x(t), t) = 0} (1) wich is the zero level set of φ. The equation of motion is obtained by taking the time derivative of φ( x(t), t) = 0, using the chain rule φ t + φ( x(t), t) x (t) = 0 is obtained. The speed in the normal direction is F = x (t) n where n = φ/ φ and the above can be written as φ t + F φ = 0 (2) This is the level-set equation, and was introduced for numerical interface propagation by Stanley Osher and James Sethian, see [4] [3]. There are several advantages to embedding the propagating interface in a higher dimensional function, some are Topological changes are handled naturally, δω need not be a single curve, but can consist of several, that can split and merge. Accurate numerical schemes can be created, using known techniques from the solution of hyperbolic conservation laws. Geometric properties are easy to calculate, i.e. the normal at any point on the curve is given by n = φ φ Figure 1: Embedded curve, with zero level set marked Level set segmentation The level set equation can been used to solve problems in a wide range of fields, such as fluid-mechanics, combustion, solidification, geometry, image restoration, image processing and computer vision. In image segmentation, an initial curve is propagated until a suitable stopping criterion is reached. As equation (2) is solved numerically, a suitable discretisation is needed. Commonly one uses a grid of the same dimensions as the pixelgrid of the digital image that is to be segmented. The speed function F is constructed so that the curve moves towards, and stops at the desired boundary. The discrete time steps are chosen to ensure numerical stability, and their specific size dep on the properties of F, and how the numerical solution is formulated. The purpose of this project is to study how the level set method works for image segmentation, and compare two of popular methods for determining F, both in theory, and in practice on some simple examples.
10 2 Methods For Constructing the Speed Function Edge detector based The classical level set segmentation method uses an edge detector to stop the interface. Let u 0 (x, y) be the Intensity value of the image at point (x, y), C(I) : [0, 1] IR 2 be the parameterized curve, in [2] the functional J 1 (C) = α 1 0 C (s) 2 ds + β 1 0 C (s) ds λ 1 0 u 0(C (s)) 2 ds (3) where α, β and λ are positive parameters, is given. The central term is the last, that will be maximized when the curve lies on the edge, where the gradient has its maximum value. As this term is multplied by λ, the entire functional J 1 (C) is then minimized. The first and second term controls smoothness. Altough equation (3) can be used to create a level set formulation for finding edges, it is not commonly used. A much more popular approach is to define a positive decreasing function, deping on the gradient of the image. A typical example is Region based In [1] the authors propose a different approach to segmentation, that is not based on gradients in the image. The stopping term is instead based on the Mumford-Shah segmentation technique [5]. The Mumford-Shah functional segments an image into piecewise smooth regions, separated by boundaries. Limiting the number of subregions to two, Chan and Vese proposed the following functional E(c 1, c 2, C) = µ length(c) + ν area(c inside ) +λ 1 C in u 0 (x, y) c 1 2 dxdy +λ 1 C out u 0 (x, y) c 2 2 dxdy (7) where c 1 is the average inside C, and c 2 is the average outside. The expression is controlled by the four non-negative parameters µ, ν, λ 1 and λ 2. The minimal value of the sum of the two last terms in Equation (7) corresponds two the curve C lying in the boundary between the two regions with most distinct averages, see Figure 2. The first two terms are g( u 0 ( x)) = G σ u 0 ( x) p (4) where G σ is a gaussion with variance σ, and p 1. This can be used to create a simpler functional (also from [2]) J 2 (C) = 1 0 g( u 0 (s))ds (5) that like the functional J 1 (C) is minimized when the curve C lies on the edge. Note that in both cases, C need not be a single curve, but can consist of several closed curves. Using methods from variational calculus, the gradient descent direction for the functional can be calculated. As moving in this direction will decrease the value of the functional, it is used as the speed function. The level set formulation based on equation 5 is φ t = φ g( u 0 )κ + g( u 0 ) φ (6) where κ is the mean curvature. The first term corresponds to motion in the normal direction equal to the curvature times the edgedetector. The second term is convection in the direction that is the gradient of the edge detector. The edge-detection approach limits the choice of initial curve. If the initial curve exists in regions on both sides of a gradient, they will be segmented together. The construction of an edge detector based level set function can be done in several ways, but most result in expressions similar to that of equation 6. Higher order terms (corresponding to β in Equation (3)) are usually omitted. Figure 2: A)First term > 0; B)Second term > 0; C) Both > 0; D) both 0 reqularizing terms, of wich the area depent term is usually omitted (by setting ν = 0). The µ term is a scale parameter. For example, in the case of a noisy image, the best segmentation with regards to the last two terms would be to break C into a multiple very small curves, including and excluding individual noise artifacts. The total length of C would then become large. Thus including the length depent term at some reasonable scaling, forces the minimum to consist of larger areas. Equation 7 can be rewritten using the heaviside function H(φ), defined as H(φ) = { 1, ifφ > 0 0, ifφ < 0
11 and equation 7 then becomes E(c 1, c 2, φ) = µ δ(φ) φ d x +ν H(φ)d x +λ 1 u0 ( x c 1 2 H(φ)d x +λ 1 u0 ( x c 2 2 (1 H(φ))d x (8) The expressions for c 1 and c 2 are uo ( x)h(φ( x))d x c 1 (φ) = (9) H(φ( x))d x c 2 (φ) = uo ( x)(1 H(φ( x)))d x (1 H(φ( x)))d x (10) The level set equation based on Equation (8) is ( ) φ t = φ µ ν ( φ φ (11) +λ 1 (u 0 c 1 ) 2 + λ 2 (u 0 c 2 ) 2) with c 1 and c 2 as before. This is again obtained by finding the gradient descent direction. The details are given in [1]. Generally the parameters are taken so that λ 1 = λ 2 = 1 and ν = 0, the last parameter is adjusted based on how large/many objects one wants to find. This level set formulation fulfills the ordinary properties in topological flexibility, the curve C can merge and split as it evolves. In addition to this, interior contours can arise. To not supress this property, it is suggested in [1] that a slightly smoothed heaviside function H ɛ should be used instead of H. The modification to Equation (11) is that the term φ is replaced by δ ɛ (φ) = d dφ H ɛ. Its also important to consider that even though this approach is not based on edge-detection, many images segmentable using the edge detector approach can be segmented with the region based approach, with basically the same result. 3 Numerical Solution Signed Distance Function A distance function d( x) is defined as d( x) = min( x x I ) x δω That is the value of the distance funtion at any point x is the distance to the closest point on the curve. The signed distance function is an implicit function φ defined as d( x) x Ω + φ( x) = d( x) = 0 x δω (12) d( x) x Ω The signed distance function has several properties that simplifies the numerical solution of level set problems. Since d( x) is euclidean distance d( x) = φ( x) = 1, the normal is calculated as N = φ, the mean curvature as κ = φ. The signed distance function loses it s properties at points that have multiple closest point on the curve, and at kinks, where the above expressions are undefined. In Figure 1, wich is a signed distance function, the normal, as well as φ and φ are undefined in the point at (x, y) = (0, 0). In practice this is not a problem as these problems generally only develop far from the evolving front, and are subjected to numerical smearing. In most classical numerical schemes for solving level set problems, the function is initialized as the signed distance function, and then subsequenally reinitialized in every (or most) iterations. Time discretization A simple first-order accurate method for solving the level set equation is the forward Euler method given by φ (n+1) φ (n) + f(φ (n) ) = 0 (13) δt where f(φ n ) is the equation for the specific level set equation at time t (n) that one wishes to solve. Discretizing the image into a grid, the equation for updating a gridpoint (i, j)in the image becomes φ (n+1) i,j = φ (n) i,j t f(φ(n) i,j ) (14) This equtaion will most likely involve evaluation of spatial derivatives of φ. In [2] the authors stresses that the approximation of the spatial derivatives should be based solely on information in the direction of motion of φ (n). This approach is called upwind differencing. However, if one initializes φ (0), and reinitializes all φ (n) as the signed distance function, the spatial derivative will be equal (or sufficiently close) in both directions, and no special care has to be taken in approximation. Equation (13) is of course not the only possible numerical scheme. In [1] an implicit scheme is given, that uses spatial derivatives of both φ (n) and φ (n+1), and where reinitialization to the signed distance function is optional. It is also possible to construct higer order accuarate schemes, described in [2] 4 Evaluation Edge-detecting The edge-detecting level set equation, Equation (6), was implemented according to Equation (14). It behaves as expected when applied to a test image, consisting of 2 simple geometric shapes. One unwanted property is the extremely slow propagation of the curve towards the edges. An illustration of the segmentation is shown in Figure 3. The gradient based method is extremely slow, the above segmentation took approximately 10min. One can also note that the curve is located outside the edge, wich is an effect caused by smoothing of the gradient. The curve hasn t completely stopped, but the speed has decreased even further. The most expensive step in the
12 speed. Using a similar starting curve as in the example with gradient based gives in itself a significant speed improvement, approximately by a factor 10. By also exploiting the fact that the curve can be initialized arbitrary, the segmenting is made even faster, as illustrated in Figure 4. The total time was approxi- Figure 3: The initial curve and its propagation using edge-detection. solution of this level-set equation is the reinitialization to the signed distance function. The method is also sensitive to noise, as that introduces false edges scattered around the image. This requires a wide gaussian for smoothing, wich also smooths the true edges. The level set equation 6 from [2] is also based on the assumption that the object is inside the initial curve. If the curve is initialised inside an object, far from any edges, the curvature part of Equation (6) will dominate, and the curve vanish. Chan-Vese The Chan-Vese implementation studied wasn t based on a smoothed heaviside funtion, but was a direct implementation of Equation (11), using the simple forward Euler method from Equation (14). The first difference one notice between the gradient based level set method, and the region based, is the difference in Figure 4: The initial curve and its propagation using Chan-Vese. mately 10 seconds. The result of segmenting an image with more noise is illustrated in Figure (5). This implementation of the Chan-Vese modell is not accurate enough for more complicated problems, and will sometimes miss the global minima. In [1] an implicit numerical method is given, that also uses better approximations of the spatial derivatives. 5 Conclusion The approach to embedd a propagating curve in a higher function can be very useful. It is easy to understand why properties like automatic handling of topological changes are desirable in segmentation problems. Even though both the edge based modell I implemented as the existing region based implementation used simple computational schemes, the tests show that both versions does work well for simple problems. In the test, the same image is segmented using both methods illustrating the differences betweeen them. Most notable is the difference in speed
13 PROCESSING,, Vol. 10, No. 2, pp , February 2001 [2] S. Osher, R. Fedkiw, Level Set Methods and Dynamic Implicit Surfaces, Springer-Verlag Inc, 2003 [3] J.A. Sethian, Level Set Methods and Fast Marching Methods Evolving Interfaces in Computational Geometry, Fluid Mechanics, Computer Vision, and Materials Science, Cambridge Press, 1999 [4] J.A. Sethian, S. Osher, Fronts Propagating with Curvature-Depent Speed: Algorithms Based on Hamilton Jacobi Formulations Journal of Computational Physics, No.79, pp , 1988 Figure 5: Segmenting noisy image. of the propagating curve. To be fair, there are methods for improving the calculation time of the edgedetecting method, that hasn t been used. One is to employ a narrowband method, where the updating only is performed in a band around the evolving curve, another is to employ a technique called fast marching, to propagate the curve until it is in close proximity of the edge, and then use the level-set equations for final adjustments. Both these techniques are described in [3]. When a more accurate numerical modell is used, the Chan-Vese modell can be used for more complicated segmentation problems, like grouping dots, based on their proximity to eachother. This is achieved by tweaking the µ parameter in the Chan- Vese modell. For this to work properly, convergence towards the global minima is required. [5] D. Mumford and J. Shah, Optimal approximation by piecewise smooth functions and associated variational problems Commun. Pure Appl.Math, Vol. 42, pp , Possible Areas for further studies A more detailed study of the Chan-Vese method. Perhaps implementing according to the formulation based on the smoothed heaviside function described in [1]. Studying the variational analysis techniques used in deriving the level-set formulations from functionals. Studying the fast marching method, as well as implementing a more accurate numerical solution. Acknowledgement The implementation of the Chan-Vese level set equation was written by Jan Erik Solem. References [1] T.F Chan, L.A. Vese, Active Contours without Edges IEEE TRANSACTIONS ON IMAGE
14 -Projekt- FMA170- Bildanalys Karl Berggren, Andreas Helgegren, Handledare: Håkan Ardö 30 november 2007
15 1 Projektide Undertexter på DVD-skivor är sparade som fyrfärgsbilder som placeras överfilmennärdenspelasupp.ommanspararendvd-filminågotannat format, t.ex. xvid, för att spara utrymme känns det dock onödigt att spara dessa texter som bilder. Det finns dessutom ett flertal filformat för att spara undertexter som text, vilken sedan kan reras över videoströmmen med valfritt typsnitt. Målet med detta projekt är att skriva ett program som använder textigenkänning på undertextbilderna och sedan sparar dessa som text. Beroe på hur snabbt arbetet fortgår är det även önskvärt att implementera export av texten till ett fungerande format för text-baserade undertexter. För att få bästa möjliga prestanda kommer vi utveckla programmet i programspråket C. Detta medför att all önskadvärd funktionalitet måste implementeras på egen hand. 2 Utförande 2.1 Segmentering Ensubtitlekanfördetotränadeögatenbartbeståavsvartaochvitafärger, dådettainteärfalletutanbeståravhela4färgerharvivaltattstrukturera en färgmatris som innehåller de önskade färgerna. Färgmatrisen skickas med som attribut tillsammans med hela undertextbilden som sedan segmenterasix-ledochy-led.detaviegentligengörärattsummera antalet pixlar som överrensstämmer med färgmatrisen. Envanligundertextkanseutungsåhär: Närvisedanharprojiceratundertexteniy-ledservivaribildensom raderna förhåller sig. 1
16 Projectionen i y-led blir en massa mindre staplar som representerar alla bokstäverna. Denna bilden är utdragen får en av våra debugfunktioner där båda raderna är projiceras samtidigt. I verkligheten är det bara en rad som kommer projiceras. Resultatet blir likt ett stapel-diagram där staplarna representerar var i undertexten bokstäverna befinner sig. För att kunna fånga upp bokstäver såsomåäochöharviimplementeratenlookaheadsomarbetarutefteren flexibel konstant, i dagsläget satt till hela 5 pixlar. Eftersom vi arbetar med segmentring både i x och y-led har vi strukturerat upp en segmenteringsmatris som fungerar för både rad- och bokstavs-segment. Det ända som egentligen kan försvåra segmenteringen är den aktuella fonten. Många undertexter inehåller fonten Italic som förhåller sig aningen sne. Fonter med väldigt små mellanrum mellan bokstäverna kan också ställa till problem då vår segmentering kommer tyda dessa som en ända stor bokstav. En önskvärd implementering skulle vara att segmentera alla bokstäverna med hjälp av 4- eller 8-neighbour principen a b Detta skulle medföra att även överlappade bokstäver skulle kunna segmenteras ut. 2.2 Identifikationsdata För att kunna identifiera bokstäverna i varje segment genererar vi identifikationsdata för olika bokstäver. Vi beräknar följande mätdata: 1. Antalet fyllda pixlar i segmentet. 2
17 2. Masscentrum för segmentet i x-led 3. Masscentrum för segmentet i y-led 4. Antalet vertikala kantpunkter. 5. Antalet horizontala kantpunkter. 6. Antalet hörnpunkter. Vissa av dessa beräkningar tordes vara ganska självklara, nedan följer en genomgång för hur de mer avancerade beräkningarna utförs Masscentrum i x/y-led För denna beräkning utnyttjas projectionsfunktionaliteten som vi skrivit för att lösa segmenteringen. Genom att projecera det aktuella segmentet på respektive-axeln och samtidigt räkna antalet fyllda pixlar i varje index kan man sedan utnyttja en enkel integral för att hitta bilden masscentrum i denna led. genom att summera utmed projectinoen kan man nämligen läsa avvärdetdärsummanuppgårtillomkring 50%avdettotalaantaletpixlar. 2.3 Antal vertikala kantpunkter Förattkunnalösadettaproblemvarvitvugnaattförstimplemeteraen funktionfördiskretfaltiningic.förattfåframdevertikalakanternai bilden använde vi sedan faltiningsfiltret [1 1] vartefter de kvarståe pixlarna kunde summeras. 2.4 Antal horizontella kantpunkter Förattfåframdehorizontellakanternaibildenvifaltiningsfiltret [1 1] T vartefter de kvarståe pixlarna kunde summeras. 2.5 Antalhörnpunkter Genom att använda följande faltningsfilter plockade vi fram hörnpunkter ur segmentet. [ ] Summan av dessa pixlar utgjorde sedan vårt sista igenkänningsfeature. 3
18 3 Resultat En första observation är att vårt program uppfyller de mål på prestanda som vi haft som med projektet. Jämfört med motsvarande matlabimplementation märker man en avsevärt förbättring. Igenkännigen fungerar tillfredställande för enklare subtitles där extravaganser som italic fonts och liknande saknas. Eftersom vi inte hunnit färdigställa inläsning av subtitles direkt från PES paket har vi dock inte kunnat genomföra några storskaliga tester. 4
19 Språkidentifiering Bildanalys, projekt 3 hp Pia Haage, Sophia Holmström Handledare: Karl Åström
20 Pia Haage Sophia Holmström Språkidentifiering Bildanalys, projekt 3 hp Innehåll Inledning... 2 Metod... 2 Utförande... 2 Frågeställningar... 2 Arbetsgång... 3 Problem under arbetsgången... 7 Sammanfattning... 7 Bilaga Matlabkod... 8 lang_seg.m... 8 segment.m... 9 harris.m features.m train_classify.m huvudprogram.m benchmark.m my_classify.m
21 Pia Haage Sophia Holmström Inledning Målet med projektet är att kunna klassificera olika texter efter det språk de är skrivna på. Vi kommer att utgå från sex stycken språk där vissa är inom samma språkfamilj. Vi har tänkt utveckla och använda oss av en metod där vi klassificerar texter genom att titta på histogram över utklippta textrutors klustertillhörigheter. Detta är inte en för oss känd metod och ett delsyfte i projektet är därför att undersöka om metoden kan vara lämplig för just språkklassificering. Vi kommer att använda algoritmen K-means för att klustra segment av bilden vilka vi tar fram genom en hörndetektor. Vi kommer att använda oss av beräkningsprogrammet Matlab för skapandet och utvärderingen av metoden. Metod En kortfattad punktlista över metoden vi använde oss av ses nedan. 1. Inläsning av inlärningsbilder till klassificeraren 2. Hittar 180 signifikanta hörnor i varje bild m.h.a. Harris hörndetektor. 3. Klipper ut n n rutor kring de signifikanta hörnen i varje bild, där n är den valda storleken på rutan, och kolonnstaplar dessa rutor i vektorer. 4. Lagrar vektorerna i en matris. 5. Klustrar rutorna till 100 kluster m.h.a. K-means. 6. Tar för varje språk fram ett histogram över klustertillhörigheten för rutorna i språkets textbild. 7. Lagrar histogrammen i en matris. 8. Tränar en klassificerare för användning av klassificeringsmetoden Nearest neighbour. 9. Läser in bilder för utvärdering och skapar histogramvektorer m.h.a. Harris och histogram. 10. Klassificerar bilderna m.h.a. Nearest neighbour och våra inlärningsbilders histogram. 11. Kör Benchmark för utvärdering av programmet. Utförande Frågeställningar Vid projektets start uppkom några frågeställningar som var tvungna att besvaras innan vi kunde börja. Dessa definierar och ramar in projektet och visar också på vad som är varierbart i metoden och kan modifieras för en eventuell förbättring. Vilka språk ska programmet kunna identifiera? Arabiska, engelska, finska, ryska, svenska och tyska. Vilken hörndetektor ska vi använda? Harris hörndetektor. Hur stora rutor ska klippas ut runt de signifikanta hörnen? 7 7 rutor. 2
22 Pia Haage Sophia Holmström Hur många olika kluster ska vi använda och hur många iterationer ska vi köra i K-means? 100 kluster och 50 iterationer. Vilken klassificeringsmetod ska vi använda? Nearest neighbour. Arbetsgång Vi började med att ta fram sex stycken lika stora bilder (1100 px 400 px) på de valda språken som skulle användas för att träna klassificeraren. Några språk var markant olika t.ex. arabiska och svenska och några språk var relativt lika t.ex. tyska och engelska. Detta för att testa hur väl metoden skulle fungera. Vi valde inte fler språk p.g.a. projektets storlek. En av inlärningsbilderna ses i figur 1. Figur 1 - Inlärningsbild för arabiska. Utifrån dessa inlärningsbilder skulle vårt program alltså kunna identifiera andra textbilder. Bilderna vi använde oss av skapade vi genom att ta screenshots av texter vi fann på Internet. Texterna vi hittade bearbetade vi först i Word för att normera teckenstorlek (14 pt) och typsnitt (Times New Roman). Detta är en av begränsningarna med vårt program, men också en förutsättning för att kunna göra en bra utvärdering av metoden. Utan normerade texter hade det varit svårt att dra slutsatser om varför metoden skulle fungera eller ej. Som hörndetektor valdes Harris hörndetektor som vi hämtade från Matlabs scriptsamling på Internet, Denna modifierades något för att passa in i vårt program. 180 signifikanta hörnpunkter valdes för att vi ansåg detta var en lagom mängd punkter med hänsyn till bildstorleken. Hörnpunkter för en av språkbilderna ses i figur 2. 3
23 Pia Haage Sophia Holmström Figur 2 - Visar de signifikanta hörnen för en del av en inlärningsbild. Hörnen är inramade i gråa rutor. Hörnpunkterna representerades som koordinater i en vektor. Runt dessa punkter togs sedan 7 7-rutor ut och kolonnstaplades i vektorer. Meningen med rutorna är att olika språk ska ha olika signifikanta rutor. Ett exempel på en ruta ses i figur 3. Figur 3 - En utklippt 7 7-ruta. Alla rutvektorer för samtliga språk lagrades sedan i en matris, se figur 4. Figur 4 - Matris med kolonnstaplade rutor för alla språk 4
24 Pia Haage Sophia Holmström Vi ville nu klustra alla rutor m.h.a. K-means. Vi använde Matlabs inbyggda script för K-means. 100 klustercentra valdes för att rutor från samma bokstav idealt skulle hamna i samma kluster. Det gjordes även 50 iterationer av K-means för att minimera det lokala minimumet. Klustercentrumen för det bästa resultatet sparades. Histogram skapades sedan utifrån inlärningsbilderna. Histogrammen bestod av en vektor där t.ex. plats 1 representerar hur många rutor i ett visst språk som tillhör kluster 1. En principskiss för detta visas i figur 5. Figur 5 - Principskiss för skapandet av histogrammen. Ett histogram skapades för varje språk. Dessa ses i figur 6. Figur 6 - Histogram för varje inlärningsbild. I figur 6 ser man att t.ex. arabiska skiljer sig mycket från de latinska språken vilket borde göra arabiska lätt att identifiera. 5
25 Pia Haage Sophia Holmström Vi tränade sedan en klassificerare utifrån våra inlärningsbilders histogram. Det skapades en matris T utifrån matrisen X med alla histogram, d.v.s. featurevektorerna, och vektorn Y med siffror motsvarande de olika språken, se figur 7. Figur 7 - Träning av klassificeraren. Klassificeraren skulle använda sig av metoden Nearest neighbour, d.v.s. den jämför andra bilders histogram med matrisen med inlärningsbildernas featurevektorer. Vi testade nu vår metod med några olika bilder, även bilder med varierande storlek och typsnitt. Med samma metod som ovan skapade vi histogram som sedan klassificerades. I klassificeringen märkte vi att arabiska var lätt att identifiera medan de latinska språken ofta förväxlades. Detta var förväntat då arabiska har ett helt annat alfabet och de latinska språken är ganska lika varandra. Vi gjorde även en utvärdering (benchmark) på systemet, där hitrate innebär antal rätt klassificerade bilder genom totalt antal klassificerade bilder. Vi skickade här in två bilder från varje språk, totalt 12 bilder, som var normerade på samma sätt som inlärningsbilderna. Resultatet från utvärderingen ses i figur 8. Figur 8 - Hitrate blev cirka 67% för våra testbilder. Man kan dock ej dra så stora slutsatser av vårt resultat då vi hade få testbilder. Vi provade även att ändra rutstorleken för att se hur detta påverkade hitrate. Resultatet ses i tabell 1. Tabell 1 - Hitrate för olika rutstorlek. Rutstorlek Hitrate % % % 6
26 Pia Haage Sophia Holmström P.g.a. tidsbrist hann vi inte testa andra parametervariationer, men om tid funnits hade vi utvärderat följande: Antalet klustercentra Antalet signifikanta hörn Annan klassificeringsmetod Vi hade även velat titta på andra språk och utöka antalet testbilder. Problem under arbetsgången Det största problemet var att hitta textbilder över olika språk som alla hade samma typsnitt och storlek. Detta löste vi genom att kopiera texter från Internet till Word och där välja typsnitt och teckenstorlek. Vi hade även problem med K-means då det i varje iteration skapades tomma kluster. Vi använde då en inställning i K-means som skapade ett nytt kluster utifrån en av punkterna. Sammanfattning Vi har testat en metod för språkklassifikation som baseras på utklipp av textbilden runt signifikanta punkter. Dessa jämfördes med kluster från inlästa bilders textutklipp för att bestämma textens språk. Det är svårt att avgöra om metoden skulle fungera då det inte fanns tillräckligt med tid att testa den fullt ut. Den skulle eventuellt kunna användas för att identifiera olika språkgrupper då vår metod är bra på att identifiera språk med olika alfabet och skrivsätt. För identifiering inom en speciell språkgrupp tror vi att en annan metod bör användas, t.ex. OCR. 7
27 Pia Haage Sophia Holmström Bilaga Matlabkod lang_seg.m % Segmentera olika språkbilder och lagra i en matris (49,1080). Varje % kolumn är en kolonnstaplad 7*7 bild runt ett detekterat hörn. datadir = '../projektbilder/jpg'; rutarea = 49; allsegment = zeros(rutarea,(180*6)); bilder = {'a_learn','e_learn','f_learn','r_learn','s_learn','t_learn'}; k = 0; for i = 1:length(bilder) file = char(bilder(i)); fnamebild = [datadir filesep file '.jpg']; bild = imread(fnamebild); frame = rgb2gray(bild); utsegment = segment(frame); for j = 1:180 allsegment(:,k+j) = utsegment{j}; k = k+180; % Klustring av segmenten mha k-means: allsegment = allsegment'; IDX=0; C=0; min_sumd=inf; for i=1:50 [IDX2,C2,sumd2] = kmeans(allsegment,100,'emptyaction','singleton','display','final','replicat es',1); if sum(sumd2)<min_sumd min_sumd = sum(sumd2); IDX = IDX2; C = C2; save C C; save IDX IDX; save min_sumd min_sumd; % Skapar featurevektorer genom att göra ett histogram. X = zeros(6,100); for i = 1:6 8
28 Pia Haage Sophia Holmström file = char(bilder(i)); fnamebild = [datadir filesep file '.jpg']; bild = imread(fnamebild); frame = rgb2gray(bild); X(i,:) = features(frame,c); %Returnerar histogram Y = [1;2;3;4;5;6]; %Vilket språk X tillhör. 1=Arabiska, 2=Engelska, 3=Finska, 4=Ryska, 5=Svenska, 6=Tyska. T = train_classify(x,y); save T T; figure(2) subplot(2,3,1); plot(x(1,:)); title('arabiska'); subplot(2,3,2); plot(x(2,:)); title('engelska'); subplot(2,3,3); plot(x(3,:)); title('finska'); subplot(2,3,4); plot(x(4,:)); title('ryska'); subplot(2,3,5); plot(x(5,:)); title('svenska'); subplot(2,3,6); plot(x(6,:)); title('tyska'); segment.m function utsegment = segment(frame) [m,n] = size(frame); % Gör bilden svartvit for i = 1:m for j = 1:n if frame(i,j) > 180 frame(i,j) = 255; else frame(i,j) = 0; save frame frame PIP=Harris(frame); utsegment = cell(1,180); rutarea = 49; for i = 1:180 %Tar ut de 180 första punkterna för att garantera samma vektor längd. ruta = zeros(rutarea,1); index = 1; while index < rutarea + 1 for col = (PIP(i,2)-3):(PIP(i,2)+3) for row = (PIP(i,1)-3):(PIP(i,1)+3) ruta(index)=frame(row,col); index = index + 1; utsegment{i} = ruta; 9
29 Pia Haage Sophia Holmström harris.m % Harris detector % The code calculates % the Harris Feature Points(FP) % % When u execute the code, the test image file opened % and u have to select by the mouse the region where u % want to find the Harris points, % then the code will print out and display the feature % points in the selected region. % You can select the number of FPs by changing the variables % max_n & min_n % A. Ganoun function PIP=Harris(Imag) load frame; Imag = frame; I =double(frame); %**************************** % imshow(frame); % k = waitforbuttonpress; % point1 = get(gca,'currentpoint'); %button down detected % rectregion = rbbox; %%%return figure units % point2 = get(gca,'currentpoint');%%%%button up detected % point1 = point1(1,1:2); %%% extract col/row min and maxs % point2 = point2(1,1:2); % lowerleft = min(point1, point2); % upperright = max(point1, point2); % ymin = round(lowerleft(1)); %%% arrondissement aux nombrs les plus proches % ymax = round(upperright(1)); % xmin = round(lowerleft(2)); % xmax = round(upperright(2)); %*********************************** % Aj=6; [m,n] = size(frame); cmin=1; cmax=m; rmin=1; rmax=n; min_n=180;max_n=200; %%%%%%%%%%%%%%Intrest Points %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sigma=2; Thrshold=20; r=6; disp=1; dx = [-1 0 1; ; ]; % The Mask dy = dx'; %%%%%% Ix = conv2(i(cmin:cmax,rmin:rmax), dx, 'same'); Iy = conv2(i(cmin:cmax,rmin:rmax), dy, 'same'); g = fspecial('gaussian',max(1,fix(6*sigma)), sigma); %%%%%% Gaussien Filter %%%%% Ix2 = conv2(ix.^2, g, 'same'); Iy2 = conv2(iy.^2, g, 'same'); 10
30 Pia Haage Sophia Holmström Ixy = conv2(ix.*iy, g,'same'); %%%%%%%%%%%%%% k = 0.04; R11 = (Ix2.*Iy2 - Ixy.^2) - k*(ix2 + Iy2).^2; R11=(1000/max(max(R11)))*R11; R=R11; ma=max(max(r)); sze = 2*r+1; MX = ordfilt2(r,sze^2,ones(sze)); R11 = (R==MX)&(R>Thrshold); count=sum(sum(r11(5:size(r11,1)-5,5:size(r11,2)-5))); loop=0; while (((count<min_n) (count>max_n))&(loop<30)) if count>max_n Thrshold=Thrshold*1.5; elseif count < min_n Thrshold=Thrshold*0.5; R11 = (R==MX)&(R>Thrshold); count=sum(sum(r11(5:size(r11,1)-5,5:size(r11,2)-5))); loop=loop+1; 5); R=R*0; R(5:size(R11,1)-5,5:size(R11,2)-5)=R11(5:size(R11,1)-5,5:size(R11,2)- [r1,c1] = find(r); PIP=[r1+cmin,c1+rmin];%% IP %keyboard; %%%%%%%%%%%%%%%%%%%% Display Size_PI=size(PIP,1); for r=1: Size_PI I(PIP(r,1)-2:PIP(r,1)+2,PIP(r,2)-2)=200; I(PIP(r,1)-2:PIP(r,1)+2,PIP(r,2)+2)=200; I(PIP(r,1)-2,PIP(r,2)-2:PIP(r,2)+2)=200; I(PIP(r,1)+2,PIP(r,2)-2:PIP(r,2)+2)=200; % imshow(uint8(i)) features.m function histo = features(im,centra); %Skickar med bild och klustercentra utsegment = segment(im); %Cell 1,180 med vektorer m längd 49,1 histo = zeros(1,100); 11
31 Pia Haage Sophia Holmström for i = 1:180 mindist = Inf; k = 0; for j = 1:100 if sum(abs(utsegment{i}'-centra(j,:))) < mindist klustercenter utsegment ligger närmast mindist = sum(abs(utsegment{i}'-centra(j,:))); k = j; histo(k) = histo(k) + 1; %Fyller ut histogrammet %Kollar vilket train_classify.m function T = train_classify(x,y) T = [X,Y]; huvudprogram.m datadir = '../projektbilder/jpg/test/'; myclassify = 'my_classify'; % Ange namnet på din ocr-rutin. load T; hitrate=benchmark(myclassify,datadir,t); disp(['using method ' myclassify ' on dataset ' datadir ' I obtained a hitrate of ' num2str(hitrate) '.']); benchmark.m function hitrate=benchmark(my_classify,datadir,t); thispath = pwd; eval(['cd ' datadir]); nbr_correct = 0; nbr_char = 0; a = dir; for ii=1:length(a); [path,name,ext,ver] = fileparts(a(ii).name); if strcmp(ext,'.jpg'), % Hittat en bild fname = name; fid = fopen([fname '.txt'],'r'); facit = fgetl(fid); fclose(fid); im = imread([fname ext]); 12
32 Pia Haage Sophia Holmström eval(['cd ' thispath]); guess = feval(my_classify,im,t); eval(['cd ' datadir]); thisres = guess(1:length(facit))==facit; nbr_correct = nbr_correct+sum(thisres); nbr_char = nbr_char + length(facit);,, hitrate = nbr_correct/nbr_char; cd(thispath); my_classify.m function my_classify=my_classify(im,t); rutarea = 49; allsegment = zeros(rutarea,180); % k = 0; utsegment = segment(im); for j = 1:180 allsegment(:,j) = utsegment{j}; % k = k+180; X_classify = zeros(1,100); load C; %Klustercentra X_classify(1,:) = features(im,c); %Returnerar histogram my_classify = classify(t,x_classify(1,:)); 13
33 Språkigenkänning en tillämpning av OCR system och klassificering Projekt i Bildanalys Anna Lindholm Eskil Jönsson
34 Anna Lindholm Eskil Jönsson Introduktion Syftet med projektet är att undersöka möjligheterna att känna igen vilket språk en text är skriven på med utgångspunkt från en bild på en text. Målet är att hitta ett bra OCR-system för igenkänning av bokstäverna i bilderna och därefter en bra klassificeringsmetod för språken. Två klassificeringsmetoder undersöks här, klassificering genom att identifiera speciella tecken och ord för språken och klassificering genom jämförelse av histogram för den okända texten med en känd exempeltext. I detta projekt undersöktes igenkänning av språken engelska, franska, spanska, tyska och svenska. 2
35 1. Val av OCR system Anna Lindholm Eskil Jönsson Som första steg i projektet undersöktes möjligheten att hitta bra gratis OCR-program på internet som fungerar tillräckligt bra. Två alternativ som hittades var gocr och FreeOCR. Dessa program testades med exempeltexter tagna från boken Languages of the world av Kenneth Katzner samt med lite mer modernt skrivna texter från Wikipedia och det visade sig att FreeOCR var det program som bäst lämpade sig för projektet eftersom det har stöd för alla våra valda språk utom svenska. För bilderna med de svenska texterna användes den tyska klassificeringen eftersom detta ansågs vara det språk som var mest likt teckenmässigt. Att ha med ett språk som OCR-systemet troligen inte klarar så bra ansågs vara intressant för att se hur bra språkigenkänningen fungerar på en text som inte är helt korrekt. Några korta exempel på hur bra FreeOCR fungerar för de olika språken visas nedan: Engelska, original: Image analysis is the extraction of meaningful information from images; mainly from digital images by means of digital image processing techniques. Engelska, OCR: Image analysis is the extraction of meaningful information from images; mainly from digital images by means of digital image processing techniques. Franska, original: L'analyse d'image est l'extraction d'information signicative des images ; principalement des images numériques au moyen de techniques de traitement d'image numérique. Franska, OCR: L analyse d image est l extraction d infonnation signicative des images ; principalement des images numeriques au moyen de techniques de traitement d image numerique. Spanska, original: El análisis de imagen es la extracción de la información significativa de imágenes; principalmente de imágenes digitales por medio de técnicas de proceso de imagen digital. Spanska, OCR: El analisis de imagen es la extracción de la infonnación signiíicativa de imágenes; principalmente de imagenes digitales por medio de tecnicas de proceso de imagen digital. Tyska, original: Bildanalyse ist die Extraktion der sinnvollen Informationen von den Bildern; hauptsächlich von den digitalisierten Bildern mittels der Verfahrenstechniken des digitalisierten Bildes. Tyska, OCR: Bildanalyse ist die Extraktion der sinnvollen Infonnationen von den Bildern; hauptsächlich von den digitalisierten Bildern mittels der Verfahrenstechniken des digitalisierten Bildes. Svenska, original: Bildanalys syftar till förståelse och kategorisering av bilder. Svenska, OCR: Bildanalys syftar till förstäelse och kategorisering av bilder. (Källa: Uppslagsord Image Analysis från Wikipedia) Som synes fungerar FreeOCR mycket bra för de stödda språken, det händer att accenter eller prickar försvinner men annars klassificeras bokstäverna i princip perfekt. För svenska blir det något sämre eftersom programmet inte stödjer å (och därmed klassificerar det som ä eller a istället) men texten är fortfarande helt läsbar. 3
36 2. Klassificering Anna Lindholm Eskil Jönsson Bilder genererades på texter tagna från Wikipedia genom att skriva en textfil till pdf och därefter konvertera till jpeg. FreeOCR användes på alla bilder med texter på olika språk och resultatet sparades som textfiler (.txt) som sedan kunde läsas in i Matlab Klassificering genom igenkänning av bokstäver och ord För denna klassificering skrevs Matlab-programmen reader och identifier. I reader läses en text in från en textfil och därefter används identifier för att bestämma vilket språk texten är skriven på. idenfifier innehåller en mängd kännetecken för de olika språken, dels vilka ovanliga bokstäver som kan förekomma, dels några vanliga ord som nästan alltid förekommer i en text skriven på det givna språket. Vägledning för hur man ska välja kännetecken för de olika språken har erhållits från boken Languages of the world av Kenneth Katzner. De kännetecken som använts listas nedan: Engelska: the, are Franska: â, ê, î, que, dans Spanska: ñ, ó, á, que, y Svenska: ä, ö, och, i Tyska: ä, ö, ü, ß En text skriven på ett okänt språk läses in och gås igenom bokstav för bokstav. Då ett kännetecken för ett visst språk hittas i texten adderas en etta till platsen för detta språk i en vektor och efter att ha gått igenom hela texten klassificeras språket som det språk vars plats i vektorn har störst belopp, det vill säga det språk där flest kännetecken i den okända texten har hittats. Utskriften då programmet körts visas i figur 1 nedan. Figur 1: Körning av reader.m 4
37 Anna Lindholm Eskil Jönsson Klassificering genom jämförelse av histogram I detta fall undersöktes fördelningen av tecken hos de olika språken. Inläsningen av en exempeltext för vart och ett av de fem språken görs i Matlab-programmet language_train. Ett histogram ritas för vart och ett av de fem språken (se figur 2) och förekomsten av alla ASCIItecken representerat som en vektor, normerad med antalet tecken i den inlästa texten, räknas ut för varje språk. De fem genererade vektorerna används som typexempel för fördelningen för bokstäverna i respektive språk. Då programmet körs skrivs även de fem vanligaste tecknen för varje språk ut (se figur 3). Figur 2: Histogram för de fem valda språken 5
38 Anna Lindholm Eskil Jönsson Figur 3: Körning av language_train.m För att ta reda på vilket språk en text är skriven på används sedan programmet language_test, där en text läses in och en histogram-vektor genereras på samma sätt som i language_train. Vektorn jämförs sedan med typvektorerna för de fem språken som genererades i language_train och språket klassificeras som det språk där typvektorn är mest lik vektorn för texten skriven på det okända språket (där medelvärdet av det absoluta felet hos vektorerna är minst). Utskriften vid körning av language_test visas i figur 4 nedan. Figur 4: Körning av language_test.m 6
39 Anna Lindholm Eskil Jönsson Diskussion Klassificering av språk med hjälp av den ganska primitiva metoden att leta efter speciella bokstäver och ord fungerar förvånansvärt bra; för de bilder med text vi har genererat har språket blivit korrekt klassificerat alla gånger. Då antalet kännetecken för de olika språken ökas kan troligen klassificeringen bli ännu säkrare men programmet kommer då också att bli mer tidskrävande. En nackdel med denna metod är att den bygger på att vissa speciella tecken och ord används i texten, annars är metoden värdelös, men å andra sidan är det i princip omöjligt att skriva en text utan att använda ord som att, i, och (på respektive språk) och liknande. Metoden med histogram fungerar inte fullt så bra, men klarar att klassificera de flesta texter rätt. Denna metod skulle med största säkerhet kunna förbättras avsevärt genom att läsa in längre (och kanske mer typiska) träningstexter. Ett sätt att göra klassificeringen ännu bättre skulle vara att även titta på förekomsten av bokstavsföljder, vilket gör att metoden alltmer liknar den tidigare beskrivna metoden med kännetecken, men med fördelen att man inte själv behöver genererar dessa kännetecken. 7
40 FMA170 Project:Normalized cuts Johan Lorentzon November 27,
41 Contents 1 The description of the problem 3 2 The objective 3 3 Physcial intepretation 3 4 Definition of the problem The loss function, Ncut The weight function, for gray images Implementation Sparsity and MATLAB Algorithm ways cut K-ways cut Experiments The initial parameter settings The Ncutoff in 2-way cut The feature of the second eigenvector K-way cut Comparision between different segmentation Discussion 11 7 The code goldensearch create affinity handin way cuts k-way cuts
42 1 The description of the problem The segmentation of a picture is a vital problem, there exist no reason to assume there is one correct solution, a simplistic model is therefore only valid under rigid prequisities, a statistical approach is preferable, as Markov, Baysian and EM algorithm, w/o using groundtruth data [3]. A more balanced and reasonable method would be a hiearchial method, this reflect the need to adapt the method to given data/enviroment. The similarity between different pixels at distant r can be described as a function of their relative intensities, relative colour, relative position of pixels. The set of all w i j describes the connectivity between each pixels, denoted as affinity graph, or in matrix notation, W matrix. The segmentation can in the terms of this W be formulated as a partition that minimize the loss of edges in the graph. A minimzation problem in a high order space. But what is a correct split? A segmentation is called a correct split if given affinity matrix after partition, the total sum of loss in edges is minimized global. This problem is NP-complete, that is, there exist no determinics polynomial solution that defines the complexity of the effiency, for the proof se appix of [1]. Although there exist efficient exact as well approximative graph theoretical algorithm, the global minima is beyond the ability of the methods. This defines the cut(a, B) = i A,j B w ij as our loss function. However this loss function has one major flaw, the existence of local minima where isolated points are favored before more suitable split. 2 The objective The normalized cut is a spectral method that allows to efficiently segment a picture in a robust fashion within a computational feasible time using sparse matrix formulation and the Lanczos eigenvalues method to extract a few of the lowest eigenvectors used to partition the figure. The method are discussed both from a theoretical point of view and experiments are performed to evaluate the effiency of the method. The study is limited to gray images. 3 Physcial intepretation As described elsewhere, the generalized eigenvalue system solves the system of connected spring-mass system. The stiffness matrix is analogue to the W matrix, the fundamental modes, that is the eigenvectors of the vibrational model, describes the displacement from the steady state whose energy values gives the energy loaded in the vibration. The connectivity between the pixels describes the spring constant, shaking the picture, will stretch the nodes with weakest connectivity. 3
43 4 Definition of the problem 4.1 The loss function, Ncut The normalized cut, Ncuts using the cut(a, B) and assoc(a, V ) = i A,j V w ij, where V is the total set, A and B a partition, cut(a,b) assoc(a,v ) + cut(b,a) x i <0 d i x i >0 d i Ncut(A, B) = assoc(b,v ) = cut(a, B)( 1 ( x i <0,x j >0 w 1 1 ijx i x j )( + ). assoc(a,v ) + 1 assoc(b,v ) ) = The optimal solution cannot be isolated points in the partition. The critera is thus for normalized cuts to minimize the disassociation between the groups (cuts) and to maximize the association within the groups (assoc). Using d(i) = j V w ij, D diagonal matrix with D(i, i) = d(i), rewriting the Ncuts in matrix formulation, define a vector x with x(i) = {1, 1} wether in A or B (known as indication vector), it can be showned [1] that the optimal solution can be defined as, y min x Ncut(x) = min t (D W )y y y t Dy. This can be identified as a Rayleight quotient, and hence assuming solution y, to be a real value solution, this problem is a solution to a well known generalized eigenvalue system, described in ground course of algebra for simultaneous diagonalization of matrices, although here D is already a positive definite diagonal matrix. To this equation there is two conditions, y t D1 = 0, which has eigenvale 0, since 1 t (D W )1 = 0 per definition of D. Further, x i >0 d i the condition that y(i) {2, 2b}, b =, which follows from the indication vecctor x are not general satisifed, hence the real value solution is d(i) i considered as an approximate solution. The second eigenvalue vector solves thus the otherwise NP-problem approximately in well defined system. 4.2 The weight function, for gray images The weight function shall reflect the likelihood that two pixels belongs to one object, this is a similar argument when disussion prior and likelihood for MRF [3], hence the choice of a gaussian like weigth function is plausible, but the choice can be formalized by creating an artifical situation, in this case, a set of random variable, with different spread around two points and hence motivate for a split into two well defined partitions, the algorithm applied with different cut function as described both in [2], chapter 14.5, and [1], the best cuts is with using sharp decreasing but still smooth function, w ij = e dist(i,j) 2 σ d e (I(i) I(j))2 σ i, by setting w = 0 if dist(i, j) > δ, a relative sparse matrix is obtained. 4
44 4.3 Implementation 4.4 Sparsity and MATLAB As pointed out in the article [1] the matrix W with sharp decreasing weigth function, the matrix is sparse, the wiegth function is divided between a spatial and topological similarity function, deping wether colour, intensity or other measure is chosen as pattern. The computational cost in one matrix-vector multiplication is hence of order (nm), but weight function used in this study the sparsity become 95%, allowing a fast convergence in Lanczos method. MATLAB provides efficient sparse matix multiplications, providing a variant of Lanczos method, ARPACK distribution, called eigs. Kmeans implemented in MATLAB was used, 4.5 Algorithm According to the article [1] there is two major approaches in solving the partition/split, either one solve the eigenvalue system and repeat the algorithm for each partition separate iterative, a recursion, called 2-ways cut, or by choosing more than than eigenvector, with the motivation that more eigenvectors contain more partition information and that highly oscillating eigenvector prevent a separation, in practice giving one sole area, noise picture is a classical example ways cut Create affinity matrix based upon the weight function. Solve the generalized eigenvalue problem, use only 2 last eigenvectors. Use the eigenvector to find the optimized cut value by goldensearch. bipartion each subset with steps above, s at given criteria on partition K-ways cut Create affinity matrix based upon the weight function. Solve the generalized eigenvalue problem, use only n last eigenvectors. Using kmeans on the set of eigenvctors, create a blind partition of k elements. Combine the partition from kmeans, such that the new partition with m classes, minimize the Ncut. 5
45 5 Experiments 5.1 The initial parameter settings The σ i = 0.1,σ d = 4,δ = 5 where taken from the article, the spy function gave the infrmation of 95% as predicted [1]. The depth of the tree in 2-way cut was chosen in accordance with how many splits we seek. 5.2 The Ncutoff in 2-way cut The figure 1, illustrate the influence of Ncutoff, the time is 5-7 seconds using depth=4, that is 2 4 possible splits. As one can see artificial splits appears, and more important, the cut do have degenerate solutions, the Ncutoff=0.06, could give a result with the small rectangles on upper half, but under no circumstance elsewhere. The stability in the cuts was investigated, with the Original picture Ncutoff= Ncutoff=0.06 Ncutoff= Figure 1: The effect off Ncuttoff result of unchanged split in the range depth=4-6. This figure illustrates the figure 9 in the article, the poisson distribution where straight lines and boxes appear, this is a favorable split in a logical sense. Further the distance function handles to separate targets of same intensities, as the letter and left corner. The coloring scheme show in which order they was classified in the algorithm, dark first to white last. 5.3 The feature of the second eigenvector As a key argument, the feature vector has to have a clear cut, this implies no continous which imply many different possible split, but the 2-way cuts 6
46 breaks down in the high oscillatory case. The is illustrated below on a satellite map, whose original picture presented in next subsection. There was depth=4, Ncutoff= Eigenvector whose split was accepted !0.01!0.02! depth=4, Ncutoff= Eigenvector whose split was accepted ! Figure 2: The effect off oscillation in eigenvector in the split in the rejected split case with highly oscillating vectors, giving large Ncut values. The noise is homogienzied and no desirable segmentation is possible. 5.4 K-way cut The breakdown in the 2-way cut model with highly oscillating vectors is solved by the K-way cut. The model is sensitive to the parameter settings, and the choice of the eigenvectors, a clear picture of a automatic procedure could not be presented and more likely out of the scope for the project, but by trial and error, it turned out that some combination of eigenvectors created edges as figure illustrates below. The procedure was to plot the eigenvalues for the lowest eigenvectors, and then take the lowest of the same order, but it turned out that for many cases, one more of higher energy was required, this was noted in the article by that by plotting the eigenvector, one could with eye confirmation determined which contained usefule information, which contradict with the purpose of creating a robust segmentation model. One striking feature is that K-way cut loose the spatial part in similarity, and hence classify the sky which are more than 5 pixel apart, further, the method is alot more demanding, the kmeans takes about 50% of the computational effort and is almost 20 times slower compare to 2-way cut. As illustrated above, the high oscillating eigenvector or continous creates ambigious cuts which is unfavorable, this apply to noise images, like satellite pictures. The following case study aims to illustrates the effect of choosing different class and the importance in the choosing right parameter. The first figure with the parameters from above figures, created something that is better than 2-way cut but not similar to the original picture, but by trial and 7
47 original picture 2!way cut with depth=4, Ncutoff= eigenvector in kwaycut 3 eigenvector in kwaycut Figure 3: The difference between the methods applied on aircraft error σ i = 0.01 turned out to give a reasonable noise picture (the same used in [1] on weather charts), then comes the question of similarity, if looking at EM, the class 4 is small, hence assuming 3 classes more likely and at this point we can find a original similarity, however this cannot be compared to EM picture since the pixel information is 4 times larger using 6 channels, but it is evident that k-way cut due to similarity in procedure is similar, instead as in EM, use kmeans to separate into known classes using groundtruth, one can segment after pixel and then ask, which is which, using same information. The similarity between these method are lies in the underlying classindex plot of all four class original picture 4 segmentation class, sigmai= segmentation class, sigmai= segmentation class, sigmai= Figure 4: The difference between EM methods and K-way cut assumptions, the same choice of weightfunction, the isotropy of spatial part, the prior related to toplogical part of wieghtfunction in k-waycut. There is Markov models from very basic ideas, creatings segmentation models. 8
48 5.5 Comparision between different segmentation The following methods are applied to three pictures, the parameters was optimized such to give the best visual segmentation. The average association method, [2], W y = λy, largest eigenvalues. Find cut value throught histogram, automatic procedure. 2-way cut, procedure, choose [?] recommed settings of parameter, depth=argmin x (2 x > objects). k-way cut, procedure, plot the lowest 10 eigenvalues, choose those vectors of same energetic order, choose number of classes- The course picture clearly illustrates the crucial difference between 2-waycut and k-way cut, the spatial part is lost, the handin3 routine, can be used in a recursive manner as 2-way cut but the next figure illustrates the drawback with this method, the k-way cut has several disadvantageous, as efficiency and accuracy in prediciting the splits. The source of the error is the kmeans inability to find the right clusters. If two objects get too close it comes original picture handin3 cut, 0.8 sec, 2 classes k!way cut, 22 sec, 2 classes 2!way cut, 9 sec, 3 classes Figure 5: The difference between methods, applied on course picture classified as one, irrespective of the choice of the parameters, this will occurs for handin3 as well, the k-way cuts is slow converged requiring far more clusters and more detailed analysis than eigenvalue plot. At this point it was realized that K-way method suffers from a inefficient coding, the code can be estimated 3 times faster if instead of current Greedy on pixel scale are working with a projected affinity matrix on cluster scale. Second aspect 9
49 original picture handin3, 2 sec !way cut, 15 sec K!way cut using 2 eigenvector, 75 sec Figure 6: The difference between methods, applied upon 2 object picture is that current Kmeans suffers from slow convergence, this could be altered using different seed, current is cluster, for pictures it seems more adequate to use uniform. The handin3 fails to identify the clouds, it seeks the major original picture handin3, sigmai=0.007, sigmar=15, delta=10, 3 sec !way cut, sigmai=0.007, sigmar=15,delta=10, 50 sec k!way cut, 30 cluster, 2 segment, 150 sec Figure 7: The difference between methods, weather chart area of similar feature. This prevents this model to be used with bipartition model. 10
50 6 Discussion As pointed out in , a good cluster x is when its is strongly associated through the affinity matrix, hence keep the sum of pixels in each group maximized, x t W x, however, there is a natural condition, using scaling limit, in other words, normalized, this lead to the eigenvalue equation W x = λx, the associated measure, where the maximum eigenvector are telling which part of the picture that is strongly associated. This t to maximize area, large clusters, as clearly illustrated on the weather chart. On other hand, instead of study the tightly associated, we seek in the normalized cuts that is weak links and cut them, that is partition. This without normalization creates unfavored partitions similar to the satellite image for 2-way cuts ( Note however, the reason for this is the highly oscillating eigenvector, another troublemaker in our way). The second approach is to normalize the clusters with its associated strength and minimized the resulting cut sum, in this way we cannot achieve such segmentation under the given circumstances that the second condition for generalized eigenvalue system is satisfied. This implies particularly that a good partition require an eigenvector which has a clear cut between the domains, a continous or highly oscillating will cause the model to break down. The proper coice of weight function ensure this. The K-way cuts is a work around that works for this situation under circumstance that the model converge, in this study, it is plausible that better result could be achieved with better starting value and optimized parameter for the method. The handin3 show fast convergence and robust but unpredictable regarding weather chart test. Note however, segmentation techniques as blunt as thresholding a given picture with random points creating holes in the domain is unpreferable, but neither segmentation methods can ensure that this wont will be the cause but the great benefit of these that they are robust regarding to the choice of parameter, whereas threshold is depant on the situation, as for in the threshold example, using same value before or after a filter is applied is a severe consideration. Similar regarding the number of objects, using the weight function to ensure that certain properties are considered as vital, makes the study of the affinity matrix a valuable tool, but it doesnt require spectral method. The point in using spectral method lies in the sparsity of the affinity matrix, ensured by the weight function, secondly, the spectral method gives an answer within a deterministic polynomial time, as contrary that the exact solution to the problem is, namely NP-complete. As shown above, not correct threshold for 2-way cuts gives artificial splits, similar does wrong seed give wrong picture in k-way means, the weakest part is knowing which eigenvector to be used. 11
51 7 Appix: The Code 7.1 goldensearch function [lambda, iter]=goldensearch(f,handle,a,b,tol,k) alpha=(sqrt(5)-1)/2; v=2*tol; iter=0; mu=a+alpha*(b-a); lambda=a+(1-alpha)*(b-a); fm=f(mu,handle); fl=f(lambda,handle); while(tol<v && iter<k ) if fl < fm b=mu; mu=lambda; fm=fl; lambda=a+(1-alpha)*(b-a); fl=f(lambda,handle); else a=lambda; lambda=mu; fl=fm; mu=a+alpha*(b-a); fm=f(mu,handle); v=abs(a-b); iter=iter+1; 7.2 create affinity function [ut sz]=create_affinity(orig) load variables sz=size(orig); X=repmat((1:sz(1)),1,sz(2)); Y=repmat(1:sz(2),sz(1),1); XREP=repmat(X(:),1,numel(X(:))); 12
52 YREP=repmat(Y(:),1,numel(Y(:))); PICT=repmat(double(orig(:)/max(double(orig(:)))),1,numel(orig(:))); % affinity matrix isigd2=1/sigd; isigi2=1/sigi; DIST=isigd2*((XREP-XREP ).^2+(YREP-YREP ).^2); ut=exp(-dist).*exp(-isigi2*(pict-pict ).^2).*(DIST<isigd2*cutoff^2); ut=sparse(ut); 7.3 handin3 function map=handin3(orig,sigi,sigd,cutoff,threshold) % affinity matrix save variables sigi sigd cutoff [ut sz]=create_affinity(orig); % power iteration eps=1e-6; lambdaold=0; diff=2*eps; X=rand(size(ut,1),1); while diff>eps y=(ut*x)/(x *X); lambda=(x *y); diff=abs(lambda-lambdaold); lambdaold=lambda; X=y; X=X/sqrt(X *X); h=hist(log(x),-20:1:-2) i=min(find(h==0)); I=X>exp(-i(1)-2); map=reshape(i,size(orig)); % way cuts function [cl_index Ncut]=twowaycut(orig,depth,sigi,sigd,cutoff,Ncutoff) % default values taken from article if nargin<2 depth=2;sigi=0.1;sigd=4;cutoff=25;ncutoff=0.06; elseif nargin<3 sigi=0.1;sigd=4;cutoff=25;ncutoff=0.06; elseif nargin<6 13
53 Ncutoff=0.06; save variables sigi sigd cutoff % setup matrix equation [ut sz]=create_affinity(orig); D=sqrt(sum(ut)); M=sparse(diag(1./D)*(diag(D.^2)-ut)*diag(1./D)); save affinity sz ut M D depth Ncutoff; % J=ones(sz(1)*sz(2),1); J=find(J==1); cl_index=segment(j,0); % for i=1:size(cl_index,2) X0=find(cl_index(:,i)>0);X1=find(cl_index(:,i)==0); Ncut(i)=sum(sum(ut(X0,X1)))*(1/sum(D(X0).^2)+1/sum(D(X1).^2)); function cl_index=segment(j,k) load affinity cl_index=[]; k=k+1; if depth>=k && numel(j)>1 % solve problem opts.disp=0; [Vector EigVal]=eigs(M(J,J),2, SM,opts); % find cut I=Vector(:,2); handle={ I J }; [lambda, iter ]=goldensearch(@f,handle,min(i),max(i),0.25*ncutoff,25); % Segmentation cl_left=segment(j(find(i>lambda)),k); if cl_left==0 cl_left=zeros(sz(1)*sz(2),1); cl_left(j(find(i>lambda)))=1; cl_index=[cl_index cl_left]; J=J(find(I<=lambda)); cl_right=segment(j,k); if cl_right==0 cl_right=zeros(sz(1)*sz(2),1); cl_right(j)=1; 14
54 if f(lambda,handle)>ncutoff && (size(cl_left,2)+size(cl_right,2))==2 cl_index=cl_index+cl_right; else cl_index=[cl_index cl_right]; else cl_index=0; % function Ncut=f(t,handle); load affinity [ I J]=unload(handle); X=I>t; Ncut=sum(sum(ut(J(X),J(~X))))*(1/sum(D(J(X)).^2)+1/sum(D(J(~X)).^2)); function [I J]=unload(handle) I=handle{1}; J=handle{2}; 7.5 k-way cuts function cl_index=kwaycut(orig,groups,k,ksegment,sigi,sigd,cutoff) % default values taken from article if nargin<5 sigi=0.1;sigd=4;cutoff=5; save variables sigi sigd cutoff groups k ksegment % setup matrix equation [ut sz]=create_affinity(orig); D=sqrt(sum(ut)); M=sparse(diag(1./D)*(diag(D.^2)-ut)*diag(1./D)); save affinity sz ut M D; % cl_index=kmean_segment(); function cl_index=kmean_segment() load affinity load variables % calculate k eigenvectors [Vector EigVal]=eigs(M,k+1, SM ); 15
55 disp( Eigs... Done! ) % create groups clusters cl=kmeans(vector(:,2:),groups, rep,100, EmptyAction, drop, start, cluster ); disp( kmeans... Done! ) % k partition clusters such that Ncut is minimized J=ones(groups,1); cl_index=zeros(numel(cl),ksegment); for i=1:sum(j) Ncut(i)=Greedy(cl==i); [ dummy I] = sort(full(ncut),2, asc ); for i=1:ksegment cl_index(:,i)=cl_index(:,i)+(cl==i(i)); J(I(i))=0; disp( Initialize k-waycut... Done! ) % while(sum(j)>=ksegment) for j=1:ksegment Ncut=[]; I=find(J>0); for i=1:sum(j) Ncut(i)=Greedy(cl_index(:,j)+(cl==I(i))); [ dummy i] = min(full(ncut)); if(sum(j)>0) cl_index(:,j)=cl_index(:,j)+(cl==i(i)); J(I(i))=0; disp([ Iteration... Done! num2str(sum(j)) clusters left! ]) function Ncut=Greedy(J); load affinity Ncut=sum(sum(ut(find(J==1),find(J==0))))/sum(D(find(J==1)).^2); 16
56 References [1] Jianbo Shi and Jitra Malik: IEEE Transactions on Patter Analysis and Machine -intelligence, vol.22 No.8, august 2000 [2] Forsyth and Ponce, Computer vision - A modern approach, and other material in FMA170. [3] Finn Lindgren, Statistical Image analysis and modeling. and other material in FMS150. [4] Optimization, m-script used in FMA
57 3D Model Reconstruction Using Structured Light Joan Sandberg, Niclas Svensson, Can Xu Image Analysis November 30, 2007 Abstract This report presents the results of a 3D model reconstruction using a laser line as the structured light. The work was done as a project (3 credits) in the course Image Analysis given by the University of Lund, Faculty of Engineering, fall The report reviews the theory needed briefly. But the report is focused on presenting the results obtained from the measurements, and to discuss the possibilities of using the presented method for obtaining 3D data. Keywords: 3D model reconstruction; image analysis; computer vision 1 Introduction 3D reconstruction using minimal equipment is, and has always been an interesting area of study. For example, a particular relevant field of study is trying to obtain a tomography image through fluorescence within an organism. However, in order to predict the origins of the fluorescence photons, one needs to have detailed geometrical information about the surface of the object. Thus, needing some kind of 3D scanner. 3 Theory and Model In order to reconstruct an object in 3D, one needs a way to obtain the height information. In this study the information is obtained by simply observing the studied object from an angle while sweeping the object with a laser line. From geometry, it is known that if the laser line is on a surface with a height difference, the laser line would appear like it has been displaced when viewed from an angle. This property is what has been exploited here. Even though the idea is simple, several issues has to be resolved first. 2 Equipment The equipment used for this particular study consists of one small class IIIa diode laser, a cylindrical lens, a webcam and a white A4 paper. The object was placed on the A4 paper, which acted as a reference to the coordinate system in the real world. 3.1 Projection of Displacements The light source is approximated to be located at an infinite height, perpicular to a planar surface where the studied object is situated. In order to be able to project a displacement from a point down on a plane in a reasonable manner, a point, Q, at minus infinity is needed. This point is determined by calibrating the setup through an ob- 1
58 4.2 Model Reconstruction 4 METHOD ject with vertical edges. The crossing of the edges is taken to be point Q. The line through the displacement point and Q is called L. The projection point is then the crossing of L and the plane. 3.2 Estimating the Homography Between Points Since everything is viewed from an angle, it means that the projection of the reality would always be skewed. This can seriously destroy any attempt of a reconstruction if it is not accounted for. It can be shown that given at least four points in a skewed image, it can be projected back onto a plane that has the four points predefined. By choosing the four points correctly the skewing can effectively be removed.[1] A script that does exactly this was provided by the Mathematical Imaging Group. For this study, the four points were chosen to be the four corners of the A4 paper were the object rests on. Later, it will be discussed how this script also is especially handy for a more precise reconstruction of an object by merging footage from several directions. Due to the nature of beams, no matter how well the lens or the light source is made, there will always be a certain degree of divergence due to diffraction, giving rise to a broad line instead of an optimal narrow one. For a good estimation, first a straight line was fit by using total least square on the parts of the laser line that were not displaced, i.e. did not hit the object. In reality this consisted of inputting two coordinates, and everything outside of them was considered to be outside of the object. See figure 1(b). The broad laser line inside the boundaries was further consolidated into one narrow line at the center. This was done by taking the center of mass in the vertical direction. For better accuracy, the center of mass should be calculated in a direction from the point Q, corresponding to minus infinity in the real world, to the actual point. But if the scanning is done in a good direction, the method used here should not contribute any significant errors to the reconstruction. With both the fitted line and the center line at hand, calculating the displacement was an easy task using the euclidian norm. 4 Method Originally, the anticipation was to construct a system that enabled a real time model reconstruction. But due to the lack of proper hardwares and interfaces, a real time acquisition of data was not possible. Another obstacle was the lack of CPU power, as a benchmark typically yielded 5 10 processed frames per second. Note that the computer used was a quite old laptop with very limited memory capacity. Thus, the only feasible way to proceed was to record uncompressed sequences and then work through the data. 4.1 Detecting the Laser Line Since the setup is stationary, a simple but effective method to extract the laser line was to remove the first frame from all the subsequent frames. This gave a higher contrast and even enabled the setup to be ran in dim light. After a small threshold, the only thing visible in most of the frames was the laser, as shown in figure 1(a). 4.2 Model Reconstruction As stated above, using the displacement of the line yielded the possibility to reconstruct a 3D model. To enhance the quality of the reconstructed model, an average of the data at every coordinate was taken, and missing points were obtained using interpolation Utilizing Multiple Views Since the homography gives a one-to-one correspondence between the view of the camera and a coordinate system representing the real world, there is a possibility of utilising data from several different camera viewpoints. However, the height information is different for different views, which means one new calibration for every view. Due to the geometry, points further away from the camera will appear to have a smaller height. The effect was approximated to be linear. 2
59 6 CONCLUSION (a) (b) Figure 1: (a) The raw image acquired from the setup after removing the first frame. (b) The fitting on the outlying parts of the laser line using total least squares method Figure 2: A frame from the movie sequence of the sun glasses case. 5 Results The studied object was a sun glasses case. The sun glasses case had a quite odd shape, which remind of a very short and thick banana, see figure 2. This made it an interesting challenge to see if the setup really could handle odd shapes. 6 Conclusion The results presented above gave a hint of the capabilities of this method. They clearly show that it is possible to reconstruct a 3D model, but they also showed some limitation. One general issue with all measurements was reflections. They did not only originate from the surfaces of the objects, but also from the white paper, and could be quite strong when they are close to edges of the object. Although a lot of the reflections could be eliminated by using proper thresholding they still gave rise to some errors. Another issue is the impossibility to reconstruct the bottom of an object for obvious reasons. But it is believed that this can be worked around in one way or the other by using correspondance and merge the data to get a true 3D model. After all, considering the limited resources, the results are still quite satisfactory. With more hardware a real time reconstruction could be attempted, with most likely higher performance as less data need to be kept in the memory. The quality could also be increased overall with a faster and more highly resolved camera. Since the case was quite tall, more views were needed to get enough data for the 3D reconstruction. In total, footage from four different views were recorded. Unfortunately, two of the views turned out to be quite poor with a lot of noise from reflections. But the model of the case could still be reconstructed and is shown in figure 3. Acknowledgement The authors would like to thank Karl Åström, the supervisor for providing a webcam, and Stefan Andersson-Engels of the Atomic Physics Department for providing the cylindrical lens. 3
60 6 CONCLUSION (a) (b) Figure 3: The reconstructed model using four views. The model is shown from two different angles. 4
61 REFERENCES REFERENCES References [1] D.A. Forsyth and J. Ponce Computer Vision: A Modern Approach, Prentice Hall, New Jersey
62 Ò ÐÝ Ò ËÓÖ Ø ¼ÆÓÚ Ñ Ö¾¼¼ Ë Ø ÒÆ Ð ÓÒ π04, ÙÖ½ ÓÖ Ø ½
63 Ñ Û Ö Ø ÓØ Ú ÖÝÙ ÙÐ Ò ÝØÓÖ ÓÖ ÓÛØ Ñ ÔÖÓ º Ñ ÓÒ Ø Ó Ø ÖØ Ò ÔÓ Ø ÓÒÓÒ ÕÙ Ö Ó Ö ÖÓÑÛ ØÛÓÔÐ Ý Ö Ø ÒØ ØÙÖÒ ØÓÑ ÑÓÚ ÓÒØ Ó Ö º ØÖ Ø Ì ÑÓÚ Ò Ö ÓÖ Ò Ø ÝØÓ Ú Ò ÙÖ Ø Ö ÔØ ÓÒÓ Ø ÑºË Ò Ø Ø ÖØ Ò ÔÓ Ø ÓÒ ÐÛ Ý Ø Ñ Ø Ð Ó ÝØÓÖ ÔÐ Ý Ø Ñ Û Ø ÓØ ÖÔ ÓÔÐ Ò ØÓÓÐÐ ØØ Ñ Ò Ø Ø ÝÒ ØÓ Ö ÓÖ Ò Ñ Ú ÖØÙ ÐÐÝ ÐÐ Ó Ö Ú ÒÙÑ Ö Ò ÓÒØ Ø Û Ø Ú Ö ÐÑ ÐÐ ÓÒ Ñ º Ò Ü ÑÔÐ Ó Ø ÑÔÓÖØ Ò Ó Ó Ø Ó Ö ÓÖ Ó ÛÖ Ø Ò ÓÛÒÑÓÚ ºÀÓÛ Ú Ö ØÓ Ð ØÓ Ö Ø Ñ Ø ÖÛ Ö º ÐÑÓ Ø ÐÐ Ñ Ö Ö ÓÖ Ò Ø Ö Ö ÓÑÔÙØ Ö Ó Ò Ø Ó Ý ÒÒ Ò Ø ÓÖ Ø Ò Ù Ò Ð ÓÖ Ø ÑØ Ø Ø Ð ºÆÓÖÑ ÐÐÝØ ÓÒ Ø Ö ÝÑ ÒÙ ÐÐÝ ÒØ Ö Ò Ø ÑÓÚ Ò ÀÓÛ Ú Ö Ø Ò ÓØ Ø Ñ ¹ÓÒ ÙÑ Ò Ò Ø ÓÙ ÝÓÙ Ú Ñ ÒÝ ÓÖ Ø ºÌ ÔÖÓ ØØÖ ØÓ ÓÛØ Ø Ø ÕÙ Ø ÔÓ Ð ØÓ Ú ÔÖÓ Ö ÑÓÖ ÝÖ Ø Ò Ð Ø ØØ ÔÖÓ Ö Ñ ÒÖ º ½ à ÝÛÓÖ ÒØ ÖÔÖ Ø Ø ÛÖ ØØ ÒÑÓÚ Ò Ò Ñ ÓÒØ ÓÖ Øº ¾ ÓÖ Ø Ò ÛÖ Ø Ò ÔÖ ÓÖ Ñ ØÐ Ö Ø ÖÖ Ó Ò Ø ÓÒ ÌÓ Ð ØÓ Ù Ð Ò Ð ÓÖ Ø ÑØ Ø ÒØ ÖÔÖ Ø Ø ÓÖ Ø Û Ú ØÓ Û ØÛ Û ÐÐÔÙØ Ò Ò Û ØÛ Û ÒØØÓ ØÓÙØº ÓÖ Ø ÐÛ Ý ÓÒ Ø Ó ØÛÓÔ ÖØ ÔÖ ¹ÔÖ ÒØ ÑÓ ÐÛ Ø ÑÔØÝ Ô ÓÖÒ Ñ Ö Ø Ò ÁÒØÖÓ ÙØ ÓÒ Ö ÒØ Ö Ø ÒºÌÓ Ø Ø Û Ò ØÓ ÒÓÛÛ Ö Ø ÛÖ ØØ Ò Ò Ø Ò Ð ÐÙ Ø Ò Ø ÑÓÚ ºÌ ÓØ ÖÔ ÖØ Ø Ò ¹ÛÖ ØØ ÒØ ÜØ ÝØ ÔÐ Ý Ö ÛÖ Ø Ò Ø ÓÖ ØºÁÒÖ Ð ØÝ Ø Ø ÓÒ Ô ÖØÓ Ò ÓÖÑ Ø ÓÒØ ØÛ Ó Ø Ú Ò ÓÖ ØØÓ ÒÓÛÛ Ö Ø ÑÔÓÖØ ÒØ Ò ÓÖÑ Ø ÓÒ ÛÖ ØØ ÒºÌÓ ØÓ ÒØ ÖÔÖ Ø ØºÌÓ ÒÓÛÛ Ö Ø ÛÖ ØØ Ò Ø Ð ÓÖ Ø Ñ Ù Ø ÑÔÐ Ø Ø Ö ÒØÐ Ð ÓÓ ÓÖ ØØÓ Ú Ò Ö Ø ÖºÌ Ò Ø Ñ Ð Ø ØÓ ÒØ ÝØ Ò Ñ ÓÐÐ Ø ÓÒÓ ÔÐ Ý ÖÒ Ñ ÒÙ º ÓÖØ ÑÓÚ Ò Ð ÓÖ Ø Ñ ÒÓÒ ØÖÙØ Ø Ø Ô Ö Ø Ö ÒØÐ ØØ Ö ÐÐ ÙÒØ ÓÒØ ØÔÖ ÒØ ØÙ Ò Ø Ø Ò Ö ÒÓØ Ø ÓÒ ÓÖÑ Ø È ÆµØÓ ÑÓÚ Ò Ø Ø Ø ÑÓÚ Ð ÐÓÖÒÓØºÁ Ø ÑÓÚ Ð Ð Ø Ô Ö ÓÖÑ º Ð ºØ Ð ÒØ Ò ÓÔ Ò Ý ÓÖ Ü ÑÔÐ Ø Ø Ò Ö ÔÖÓ Ö Ñ ºÁÒØ ÓÐÐÓÛ Ò Ø ÜØ Ø Û ÒÓØ Ø ÓÒ ÓÖØ Ô Ò Ù Ã ÓÖÃ Ò ÓÖÕÙ Ò Ì ÓÖÖÓÓ Ä ÓÖ ÓÔ Ò Ë ÓÖ Ò Øº Ì Ð ÓÖ Ø Ñ Ô ØÖ Ó Ø ÔÓ Ø ÓÒ Ò Ø ÒÖ ØÙÖÒ Ø Ò ÓÖÑ Ø ÓÒØÓ Ë Ò Û ÓÒÐÝ Ú Û ÝÑ ÓÐ ØÓ ÔØÖ Ó Ø ÔÖÓ Ð Ñ ÓÙÐ Ö Ø Ò ÒÓÖÑ ÐÔÐ Ò Ö Ø ÖÖ Ó Ò Ø ÓÒÔÖÓ Ð Ñº ÙÖØ ÖÑÓÖ Ò Ø Ö Ñ ÝÓÒÐÝ ÛÔÓ Ð ÑÓÚ Ø Ò Ø ÒØ Ø Ð Ð ÓÓ Ó ÒØ ÖÔÖ Ø Ò Å Ø Ó ¾
64 Ø ÑÓÖÖ ØÐÝ ÓÙÐ ÒÖ ÐÓØºØ Ö Ö ÓÑ Ò Ö Ó Û ÒØ Ö Ö ØÓ ÔÔ Ö ÓÙÔÐ Ó ÑÓÚ Ð Ø Ö ÓÖ Ü ÑÔÐ Ë ÔÖÓ ÐÝ Ó Ò³Ø Ú Û Ø ÒÔÐ Ý ÓÖ ºÀÓÛ Ú Ö Ø ÔÖÓ Ð Ñ Ñ Ú Ö ÐÑÓÚ ÔÓ Ð Ø Ø Ö ÕÙ Ø Ñ Ð Ö ÓÖ Ü ÑÔÐ ÓÒÑÓÚ ÓÒ Û Ò Ø ØÑ ÒÝÔÓ Ð Ñ Ð ÖÑÓÚ Ñ Ý Ò Ø Ò Ð Ó ÓØÓ Ò ÕÙ Ò Ô ÖØÓ Ø ÔÖÓ Ø Ö Ø ÖÖ Ó Ò Ø ÓÒºÌ ÐÐÝ ÓÒ ÓÐÐÓÛ Ò ÓØÓ ÙØ Ø Ø ÐÐ ÖÐ Ð ÐÝØÓÑ ÒØ ÖÔÖ ØØ µº ÛÓÖ Ø Ö Ø ÖÖ Ó Ò Ø ÓÒ Ò Ø Ø Ø Ò Ó ÔÓ Ð ÑÓÚ ºÌ Ú Ø Ð À Ú Ô ØÙÖ Ó ÓÑ Ò Ð Ö Ø Ö Ø ØÝÓÙ ÒÓÛÛ ØØ Ý Ö º ÓÒ ÓÑ ÑÔÓÖØ ÒØ Ö Ø Ö Ø Ó Ø ÝÑ ÓÐ Ò Ø Ò ÓÖÑ Ø ÓÒÓ Ø Ú Ò ÁØ Ð Ó ÔÔÖÓÔÖ Ø ØÓ Ù ÓÛØ ØÛÓÑ ÒÔ ÖØ Ó Ø ÔÖÓ Ö Ñ Ô ØÙÖ ºÌ Ò Ú Ø Ò ÓÖÑ Ø ÓÒ Ò ÓØ ÓÖ Ú Ö Ð Ö Ø Ö ºÌ Ò ØÓ ÒØ ÖÔÖ Ø Ò ÛÔ ØÙÖ Ô Ö Ø ÝÑ ÓÐ ÒØÓ Ò Ð ÙÒ ØºÌÓ ÒØ ÖÔÖ Ø ÝÑ ÓÐ ÓÑÔ Ö ØØÓØ Ò ÓÖÑ Ø ÓÒÓ Ø ÐÖ Ý Ú Ö Ø Ö ºÌ Ì Ò ÓÖÑ Ø ÓÒ ÐÝ ØÓÖ Ò Ú ØÓÖ Ù Ù ÐÐÝÖ ÖÖ ØÓ ØÙÖ Ö Ø ÖÛ Ø Ø ÑÓ Ø Ñ Ð Ö Ò ÓÖÑ Ø ÓÒ Ð ÐÝØÓ Ø Ñ Ö Ø Öº Ú ØÓÖ µºáòóùö Ø Ö Ø ÖÖ Ó Ò Ø ÓÒ ÓÒØÛÓ ÙÒØ ÓÒ µ Ó Ø Ñ Ò Ø Ó Û Ø Ñ Ð Ö ØÙÖ Ú ØÓÖ ºË Ò ÒÓØ ÐÐÑÓÚ Û ÐÐ Ú ØÓÖ Ò Ø Ò Ø ÝÑ ÓÐ ÒØ ÖÔÖ Ø Ò ÓÖÔÖÓ ÐÝ Ò Ñ¾ Ñ ÒØ µ Ò Ñ ÒØ¾ ØÙÖ µº Ѿ Ñ ÒØ µø Ò Ñ Ò Ñ ÒØ Ø ÒØÓ Ö ÒØ Ö Ø Ö ºË Ñ ÒØ¾ ØÙÖ µø ÒØ Ú ÖÝ ØÙÖÒÓÙØØ ØÛ ÒÓÛØ Ø Ø Ø ÛÖÓÒ ÝÑ ÓÐ Ì Ø Ø Ò Ó ÔÓ Ð Ð Ð Û Ò ØÓ Ú ÑÓÖ Ø ÒÓÒ ÝÑ ÓÐ Ò ÓÑÔ Ö ÓÒ ØÑ Ý Ñ ÒØ Ò Ú Ø ØÙÖ Ú ØÓÖºÌ Ú ØÓÖ Ø ÒÓÑÔ Ö ØÓØ ÑÓÚ Ð Ð ÓÒ Ò ØÓ ÓÙÔÐ Ó Ö ÒØØ Ò Ô Ò Ò ÑÓÚ Ò ØÛÓØ Ò Ó Ö Ò ÑÓÚ ºÌ Ø ÖØ Ò ÔÓ Ø ÓÒÓ Ø Ó Ö ÒÓÛÒ Ò Ø Ò Ô ÑÔÐÝÑÓÚ Û Ò ÑÓÚ Ñ ºÌÓ ÓÒÛ Ø Ò Ó ÑÓÚ Ø ºÌ Ø Ò Ö ÕÙ Ø ÐÓ Ð Ò ÓÑ ÖÓÑØ ÖÙÐ Ó º Ì Ð ÓÖ Ø Ñ ÛÖ ØØ Ò ÒÑ ØÐ ÓÖØ Ó ÑÔÐ ØÝ Ú ÒØÓ½ ÔÖ Ø Ø ÓÒ Ð ØÖ Ò µø Ø Ù ÓÖ ÓÖØ Ð ÓÖ Ø ÑØÓÔÖ Ø ÙÔÓÒ Ö ÒØÔ ÖØ ºÌ Ö Ö ØÛÓÔ ÖØ Ø Ø Ö ÒÓØ ÒÚÓÐÚ ÒØ ØÙ Ð ÒØ Ö¹ ÈÖÓ ÙÖ Ò Ð ÌÖ Ò Ò Ø Ø µø ØØÖ Ò Ø Ð ÓÖ Ø Ñ Ò Ò Ð Ó Ø Ø Ø ØÖ Ò Ø Ö Ø ÖÓÖÖ ØºÌ ÔÖÓ Ö Ñ Ð ÓÓÒ Ø Ó Ð Ø ¹ Ð Û Ö ØÙÖ Ú ØÓÖ Ò ØÓÖ ÓÖÐ Ø ÖÙ ºÌ ÓÑÑ ÒØ ÒØ ÓÙÖ Ø ÝÛÓÙÐ ÓØ ÖÚ Ø ÓÙØ ¼Ô º Ñ ÐÐÔ ÖØÓ Ø Ð Ö ÓÛÒ Ò ÙÒ ÑÔÓÖØ ÒØÔ ÖØ Ö Ú ÖÝÓÑÔÖ Ó Ö ÛÖ ØØ Ò Ò Û ÙØØ Ó ÓÙÐ ÕÙ Ø Ð ¹ ÜÔÐ Ò ØÓÖݺÇÒÐÝ ÙÒØ ÓÒ Ð Ø Ð ØÖ Ò µ ±Ð Ø ÐÐ ¾ ½µ ± Ö Ð Ø ÙØ± Ð Ø ß¾Ð Ð Ø ß¾Ð ÐÓ Ð Ø Ð Ø ß½Ð Ð Ø ß½Ð Ð Ø ß½Ð Ð Ø ß¾Ð ± ÐÐÐ Ø ÒØ Ö Ò ÒÒ
65 Ø Ø Ø Ð ÓÖ Ø ÑºÌ Ò Ñ Ó Ø ÒÒ Ñ ÓÙÐ Ú ÒØÓ Ü ÙØ Ì Ñ ÒÔÖÓ Ö ÑÓÒ Ø Ó Ø ÖØÙÔ Ð Ü ÙØ Ø Ø Ò ÖÙÒØÓ Ò ¹ ÙÖ¾ Ì Ð ÓÖ Ø Ñ Ð ÑÖ ³ Ñ º Ô ³µ ± Ü ÙØ ºÑ Ò ØÛ ÐÐ ÓÒÚ ÖØ ÒØÓ Ð Ö Ñ ØÖ ܺ ÐÓ ³Ð Ø Ò Ñ ³ ÐÓ Ð Ø ³ÔÖÓØÓ ÓÐкØÜس Ö Ð Ð Ø Ð Ø Ò Ñ µ ÒÔÙØµºÌ Ö¹ ÙÒØ ÓÒ Ø Ñ ÒÔ ÖØÓ Ø Ð ÓÖ Ø Ñ Ò ÓÒ ØÖÙØ Ó Ö Ú ØÓÖµ Û ÐÐ ÐÐ Ò Ò Ò ÓØ Ö ÙÒØ ÓÒ º ÙÒØ ÓÒ Ö Á Ð Ø ÑÓÚ Ð Ø Ò Ñ µ Ì Ü ÙØ ¹ Ð Ø Ò ÐÐ Ö Û Ø Ø Ñ Ò ÔÖ Ú ÓÙ ÐÝ Ú Ø ÔÖÓØÓ ÓÐÐ Ò Ó Ò Ñ Û Ó ¼ ±Û Ó Ö¼ ÖÚ ØÓ ½ Ö Ú ÖØ Ó Ö ½ ½ ½½½ ½ ½ ½¾½ ¾½ººº ½ ¾ ½ ¾ ±Ú ØÃ ÌÌÄÄËË Ú ÖØÃ ÌÌÄÄËË ½ ½½ ½ ½ ¾½ ý ØÆ Ñ Áµ ±Ø ÖÖ ÔÒ ÑÒ Ô ÐÓÖØÓ Ú ÓÖØ ½ Ð Ò Ø Ã½µ Ѿ Ñ ÒØ ýµ ÓÖÙ ½ Ð Ò Ø µ Ü Ñ ÒØ¾ ØÙÖ ßÙе
66 Ò Ò Ò Ó Ò Ó Ò Ñ Ò Ñ Ò Ñ Ð ÝÒ Ñ Ü Ð Ø Ò Ñ µ à ٠ÔÖ ÓÖ Áµ ÓÖØ ½ Ð Ò Ø Ãµ Ñ Ó Ö Û Ó ÑÓÚ ÃßØÐ Ó Ö Ð Ø ÑÓÚ Û Ó µ Û Ó ½±Ú Ø ÖÔÖ ÓÖØ ØØ Ö Ò Ð ÔÖÓØÓ ÓÐÐ ÔÖÓØÓ ÓÐг³Ñ³³ Ò ÔÖÓØÓ ÓÐÐ ÔÖÓØÓ ÓÐÐ ÔÖ ÒØ ³± ³ Ø ½µ»¾µ³º³Ñ Ô ÖØ Ó Ø ÓÖ Øº ÔÖÓØÓ ÓÐÐÛÖ Ø Ò ÔÖÓØÓ ÓÐÐ Ò Ñ µ ÙÒØ ÓÒý ØÆ Ñ Áµ ±Ö ØÙÖÒ Ô Ô ÖØÓ Ø Ñ ØÖ Ü Ñ ÐÐ ÖÑ ØÖ Ò Ú ØÓÖ ÁØ Ø ÖØ Ó Ý ÐÐ Ò ØÆ Ñ ÁÑ µº ØÆ Ñ µö ØÙÖÒ ÐÐÛ Ø Ñ ÐÐ Ô ½ Ô½ Ô Ô½ Ô¾ Ô Ô Ô Ô Ô Ô Ã½ ÐÐ ½ ½¼µ ±ººº Ö ÑÓÚ ÓÖ Ó Ö Ò µ ¾¼ ¾¼ ½¼ ¾ ¼ ¾ ÓÖ ½ ½¼ ÓÖÝ Ô ½µ Ô µ Ò Ì Ô ÖØ ÓÖÖ ÔÓÒ ØÓ ÒÓÖ Ö Û Ø ÔÐ Ý Ö³ Ò Ñ Û Ø ÔÐ Ý Ö³ ÓÖÜ Ô ¾µ Ô µ Ã½ß Ð Ü¹Ô ¾µ ½ Ý¹Ô ½µ ½µ Á Ü Ýµ ÐÓ Ð ÔÐ Ý Ö³ Ò Ñ Ð ÔÐ Ý Ö³ ÐÓ ØÓÙÖÒ Ñ ÒØÒ Ñ Ø ÖÓÙÒ Ò Ö ÙÐØº Ø ÒÓØØ ÓÙ Ó Ø ÔÖÓ Ø ÓÒÐÝ Ø Ó Ò Ñ ØÓÙÖÒ Ñ ÒØ Ú ÒÙ ØÓ Ø Ò Ñ ºÁÒÖ ÐÐ Ø Ñ ÝÛ ÐÐÒÓØ ÒÓÙ º Ú ÒØ Ñ ØÖ Û Ö Ø Ø Ö ÐÓ Ø Ñ¾ Ñ ÒØ µ Ò Ö Ø ÖÖ Ó Ò Ø ÓÒÔ ÖØº ÙÒØ ÓÒË Ñ¾ Ñ ÒØ Áµ ÒØ Ð ¼ Ñ ÒØ¾ ØÙÖ µ Ö Ø Ò ÐÐ ºÌ ÙÒØ ÓÒ Ö Ú Ø ÐÔ ÖØÓ Ø Á Á ½ ¼µ ÁÒÙÑ ÛÐ Ð Áµ ÓÖ ½ ÒÙÑ Õ ÙÑ ÙÑ Á µµ ± Ö Ò Ö Ô ÜÐ Ö ÙÖ Ò¹ Ú Ö ÓÑ ØÖ ÖÙ Õ ½¼± ÒØ ÖÙ Ò ÒØ Ð ÒØ Ð ½
67 Ë ÐÐ ½ ÒØ е ±Ð Ö ÓÐ Ó ØÚ ÖÒ ÓÐ ÐÐ Ö ÓÖ ½ ÒØ Ð Õ ½¼± ÒØ ÖÙ Ò Ò ÙÒØ ÓÒÜ Ñ ÒØ¾ ØÙÖ µ Ò Ëß Ð Á µ ± ÖÙÒ ÒÖ Ò Ó Ø Ú ± Ò Ö Ò ÔÐ Ü Ö Ö Ô ÙÖÑ ÜÑ Ò ÓÐÓÒÒ ÑÒ Þ µ ± Ö ØØÒÓÖÑ Ö Ö Ò ÒÓ Ð ÒÒÓÖÑ Ö Ø Ðо Ô ÜÐ Ö ± ÒØÔ ÜÐ Ö ÒÚ Ð Ñ Ó Ò Ð ÒÒ ØÑ Ò Ø Ö ÔÐ Ø Ö Ñ Ð ÖØÓÐ ÝÑÓÚ µ Ò Û ÐÐÒÓØ ÓÛÒµºÌ Û ÐÐØ Ò ÓÔ ÙÐÐÝ Ö ØÙÖÒ ÓÖÖ Ø Ù ÓÒØ Ò ÓÖÑ Ø ÓÒ ÒØ Ø º ÙÒØ ÓÒ Ý Ó Ø Ú Ý Ø Ð ÝÑÓÚ Ü Ð Ø µ Ø ÖØ ØÙÖ Ú ØÓÖ ÒÓÒ ØÖÙØ Ð ÝÒ Ñ µ ÐÐ ÒÑ Þ µ Ô ¼ Ý Ø Ý Ó Ø Ú ÓÖ ½ Ñ Ö Ð Ø ß¾Ð Ð Ø ß½Ð ± ØÙÖ Ú ØÓÖ Ö Ö ØÖ Ø ÓÖ ½ ± Ó ØÚ Ö Ö ØÖ Ø Ò Ý Ø ÔÝ Ø Ý Ó Ø Ú Ö µý Ó Ø Ú Ô ¼ Ô Ô Ü µ¹ µµ»ü µ Ò Ý Ø ÓÖ ÓÖØ Ý Øµ Ý Ó Ø Ú Ý Ó Ø Ú ÓÖ µ ÑÓÚ Ó Ø Ñ ºÙ ÔÖ ÓÖ µ ÐÐ ØÓÖ ØÙÖÒÔ ÖØ Ó Ø Ñ ØÖ ÜÛ Ö ÑÓÚ Ö Ñ ÐÐÓ Ð Ò Ø ÒÙÑ ÖÓ ÑÓÚ Ñ µº ÙÒØ ÓÒ Ã Ù ÔÖ ÓÖ Áµ±Ö ØÙÖÒ Ô Ô ÖØÓ Ø Ñ ØÖ Ü Ñ ÐÐ ÖÑ ØÖ Ø ÖØ Ò ÓÖÑ Ø ÓÒ Ú ÒÔÖÓ Ø Ø Ñ ØÓ ÐÛ Ø Ø ºººº ±Ö ÑÓÚ ÓÖ Ó Ö Ò ÔÙÖÔÓ µ Ñ ¼ à ÐÐ ½ ¼µ ѽ Ñ Ñ½ Ѿ Ñ Ñ Ñ Ñ Ñ Ñ Ñ ºººººº Ñ Ñ Ñ Ñ Ñ ¼ ¾ ½ ¾ ½ ½ ÓÖ ½ ¼ ÓÖÝ Ñ ½µ Ñ µ ½ ¾ Ò Ò Ò ÓÖÜ Ñ ¾µ Ñ µ Ãß Ð Ü¹Ñ ¾µ ½ Ý¹Ñ ½µ ½µ Á Ü Ýµ
68 ÑÓÚ µº ÙÒØ ÓÒ ÑÓÚ Ò Û Ó Ö Û Ó ÑÓÚ Ö Ó Ö Ð Ø ÑÓÚ Û Ó µ Ѿ Ñ ÒØ Ö µ ± Ð ÖÙÔÔ Ö Ø Ó ØÚ Öº Ì Ò ÓÖØ ÒÙÑ ÖÓ ÑÓÚ Ñ Ø ÙÒØ ÓÒÑÓÚ µ ÐÐ ÒÔÙØ Ö½ ÖÖ ÓÖ ½ Ð Ò Ø µ Ò ÔÕ Ð ÝÑÓÚ Ü Ð Ø ÑÓÚ µ ± Ö Ò ÖØ Ò ØÖÓÐ Ø ÓÖ Ò Ò Ö½ Ö½ Ô ÖÖ ÖÖ Õ Ü Ñ ÒØ¾ ØÙÖ ß Ðµ ± Ö Ò Ö ØÙÖ ¹Ú ØÓÖ Ö Ó Ø Úº Ò ½ Ø ØÑÓÚ ÐÐ ½ Ð Ò Ø µµ ± ÓÖØ Ö ÓÖ Ò Ò Ò Ö ÙÖÚ Ø Ø Ö ÖÓ Ò Ô Ð Ø Ú ØÖ ÐÐ ÖØÚØ Ò Ð Ò Ø µ ¾±Ò Ø Ò ÑÑ ÖÐ Ò Ø µ Ó Ñ Ò ÓÖØØ Ò ÖÔÐ Ø ÙØÖÝÑÑ ÓÖ ½ ÓÖ ½ Ø ØÑÓÚ ß Ò Ð ½µ Ö½ ½ µ ÖÖÓÖ Ò µ ÖÖ ½ µ ÖÖ ¾ µ Ò Ò Ò Ø ØÑÓÚ ß Ò Ð ¾µ Ö½ ¾ µ ÖÖÓÖ ÓÖ ÓÖØ ÖÖÓÖµ Ò Ò ½ ½ ÔÓ Ð ¼ ÑÓÚ Û Ð ÔÓ Ð ¼²² Ò Ø ØÑÓÚ Ø ØÑÓÚ ßÓÖ Ð ½ ÔÓ Ð ½ ÔÓ Ð Ò Û Ó Ö ÔÓ Ð ÑÓÚ Ø ØÑÓÚ ß Ð Ó Ö Û Ó µ Ò Ì ÙÒØ ÓÒ Ø ÖØ Ý ÔÐ ØØ Ò ÙÔØ ÑÓÚ ÒØÓ Ö Ø Ö ºÁØØ Ò ÐÙ¹ Û Ó ÑÓ Û Ó ½µ ¾µ ÑÓÚ Ø ØÑÓÚ ß ¹½Ð Ð Ø Ø ØÙÖ Ú ØÓÖ Ò Ð Ø ÑºÀÓÛ Ú Ö Ò Û Û ÐÐ Ð ØÓ Ø ÔÓ Ð ÑÓÚ Ø ÒÓØÓÒÐÝØ Ø ØØ Ø Ð Ø ÙØÖ Ø Ö Ú Ø ÓÒ ÖÓÑØ ÓÖ Ò ÐÔ ØÙÖ Ö Ð Ø Ò ÔÐ Ò Ðк ÒÓØ Ö ÐÐÓÑ Ò Ø ÓÒ Ó Ø Ø Ö Ö Ø Ö Ö ÐÙÐ Ø ºÌ ÓÒ Û Ø Ø Ð Ø ÓÖÒÓØ Ô Ò Ò ÓÒ ÓÛØ ÙÖÖ ÒØÔÓ Ø ÓÒÐÓÓ Ð ºÁ ÑÓÚ ÔÓ Ð ÙÒØ ÓÒÔÓ Ð ÑÓÚ µ ÐÐ ºÈÓ Ð ÑÓÚ µû ÐÐ ÑÓÚ Ð Ð ±Ö Ö ØÑ Ð Ø ÙØ Ö ØÓ Ô Ö Ø ÒÒ Ö ÒØ ÙÒØ ÓÒ ÔÓ Ð Ó Ö ÔÓ Ð ÑÓÚ ÑÓÚ Ó Ö Û Ó µ ± ÔÓ Ð ÑÓÚ Ø ÒÔÓ Ð ½ Ø Ó Ö Û ÐÐ Ò Ò Ø ÑÓÚ Û ÐÐ Ö ØÙÖÒ º ± Ó Ò ÓÖØØ Ò Ö ÖÒ ÖÐÒ Øº
69 ±Ñ ¾Ú ØÚ ØØ ØÖ ØØ ÓÒ Ö ±ÁÔÖ Ò Ô ÒÒ Ø ÝÖ ÐÐ Ð Ò Ø ÑÓÚ µ ¾ ÐÐ Ö º ± Ô ÐÖ Ð Ö ÖÔÖÓÑÓÚ Ö Ò Ó ¾ Ø ÖÒÖ ¾Ö ÔÖ µº ± ÓÒ Ö Ö Ò ÓÑ Ð Ö ÔÖ Ò Ô ÐÐØÑ ÐÐ ÒÚ ØÓ Ú ÖØ ± ØØ ÓÑÓÚ ÒÑ Ò ÓÐÐ ØØ Ø ÒÒ ÒÔ ØØØ ±ÐÒ ÝÖ ÖËÜ ÐÐ ÖÜ Ø Ü ÒÓÑ Ö ÔÐ Ò Ò ±ÐÒ ØÖ Ö Ø Ô ÓÑ ÐÝØØ Ö ÓÐÐ Ú Ð ÒÔ ØÖÓ ÐÝØØ ÓÑ Ø Ö ± Ò ÖÒ ÖÖÓÐ Ðеº ÓÒÚ ÖØÄ ØØ Ö µóòú ÖØ Ð ØØ Ö ÒØÓ ÒÙÑ Ö ½ ¾ººº µ ÓÖ Ó Ö Ö Ò Ø Ó Ö ÓÒ ØÖÙØ Û Ø ÕÙ Ö ½½¹ µ Ò ØÆ Ö µö ØÙÖÒ Ú ÒÚ ÐÙ Ó ÒÙÑ ÖÛ Ò Ø Ò Ú Ò Ö Ø Öº ÈÓ Ð ÑÓÚ µù ØÛÓ ÐÔ ÙÒØ ÓÒ ÓÒÚ ÖØÄ ØØ Ö µ Ò ØÆ Ö µº ÙÒØ ÓÒÔÖÓØÓ ÓÐÐÛÖ Ø Ò ÔÖÓØÓ ÓÐÐ Ò Ó µ ÓÖÑ ØØ Ø Ø Ò ÓÔ Ò ÝÓØ ÖÔÖÓ Ö Ñ ÔÖÓ Ö Ñ ÓÖ Ü ÑÔÐ µº ÐÐ Û ÛÖ Ø Ø Ú Ò Ò ÓÖÑ Ø ÓÒØÓ Ð ºÌ Ð ÛÖ ØØ Ò Ò Ù Ï Ò ÐÐÓ Ø ÑÓÚ Ú ÒÖ Ø Ö Ø ÙÒØ ÓÒÔÖÓØÓ ÓÐÐÛÖ Ø Ò µ Ò Ó ½ ³ Ï Ø Ò Ó߽Р³ ººº± ÓÖØØ Ò ÙÖÔÐ Ø ÝÒÔÙÒ Ø Ò Ó ³ Ê ÙÐØ Ò Óß Ð ³ Ò ÓÖÑ Ò Ó Ò Ó Ò Ó Ò Ó ½ Ò Ó Ò Ó ¾ Ò Ó Ò Ó ÓÔ Ò ³ ³µ ÔÖ ÒØ ³ Ò³ Ò ÓÖѵ ÔÖ ÒØ Ò ÓÖѵ ÔÖ ÒØ ÔÖÓØÓ ÓÐе ÐÓ µ Û ØÓ ÑÔÐÝÐÓ Ø Ö Ø ÖÖ Ó Ò Ø ÓÒÔ ÖØÓ Ø Ð ÓÖ Ø ÑÛ Ø Ø ÌÓ Ø Ð ÓÖ Ø ÑÛÓÖ Ú Ö ÐØ Ø Ú ÒÔ Ö ÓÖÑ ºÌ Ö ØØ Ø Ø Ø Ò Ø ½¾ Ò Ø ÒØÓØ Ø ØÓÒ ÒÓØ Ö Ñ Û Ø Ø Ì Ø Ò ÛÖ Ø Ò ºÁÒØ Ø ØÖ Ø ÖÓ ØÓ Ò ÔØ Ð ½± ½ ÓÙØÓ ½ µº ÙÖØ ÖÑÓÖ Ø ÓÒ Ù ÓÒÑÓ ØÐÝÛ ØÛ ÒÐ ØØ Ö Ò ÒÙÑ Ö ¾ Ò ½ µóöö غÌÓÓÙÒØ ÖØ Ò ÛØ ØÛ Ô Ö ÓÖÑ Û Ø ØÑÓÖ Ò Ø ÌÓ ÒÛ Ø Ø Ý Ð ÕÙ Ø Ö ÙÐØ Û Ø ØÖ Ø Ó ¼± ÓÙØÓ Ø ÜØ ½¾ ÓÖ Ò Ü ÑÔÐ Ó Ñ Ð Ö Ø ÙÖ Ò µº Ò µºàóû Ú Ö ÓÒ Ù ÓÒ ØÛ Ò Ð ØØ Ö Ò ÒÙÑ Ö Ó ØÙ ÐÐÝÒÓØ Ø ØÙ Ø ÓÒ Ñ Ö Ø ÖÑ Ò Ð ºÀÓÛ Ú Ö Ø Ñ ÕÙ Ø Ö ØÓ Ú ØÓÛÖ Ø Ü ØÐÝØ Ñ Û Ý Ú ÖÝØ Ñ º Ñ ØØ Ö Ì Ù Ó Ø Ò ÓÖÑ Ø ÓÒ ÙÖÖÓÙÒ Ò Ø ÓÖ ØºËÓ ÈÓÖØ Ð Ñ ÒÓØ Ø ÓÒ Ø Ø Ò Ö Û ÝÓ Ö ÓÖ Ò ÓÖ ØºÁØÖ ÓÖ ÓØ Ø ÑÓÚ Ò Ö Ð Ø Ø Ù Ò Ñ ÔÐ Ò Ø ºÁØ Ò Ý ÓÖÑ ØØÓÙ Ø Ú ÖÝ Ð Ø Ò ÛÖ ØØ Ò Ý ÑÔÐ ÛÓÖ ÔÖÓ ÓÖ È Æ ÓÖÑ Ø Ø ØÙ Ø ÓÖÑ ØºÈ Æ Ý ÓÖ ÙÑ Ò ØÓÖ Ò ØÛÓ Ö ÒØ
70 ÙÖ Ü ÑÔÐ Ó ØÖ Ò Ò Ø ÓÖÑ Ø ºÌ ØÖ Ø ÜÔÓÖØ Ò ÓÖÑ ØÛ Ø Û ÝØ Ø Ö Ø Ø Ð Ò ÑÓÖ Ð Ü ÑÔÓÖØ ÓÖÑ ØØ Ø ÒÑÓÖ ÐÝ ÛÖ ØØ Ò Ý ÙÑ Ò º ÙÖ Ü ÑÔÐ Ó Ø Ø Ñ À Ö Ø Ø Ú Ò ÓÐÐÓÛ ÝØ Ò ÓÖÑ Ø ÓÒÓÒ ÖÒ Ò Ø Ø º ÓÖ Ü¹ Ø ÓÖÑ Ø ÔØ ÓÑ Ñ ÒÓÖÑ Ø ÒØ Ô Ò Ð º ÑÔÐ Ï Ø Ë Ø ÒÆ Ð ÓÒ º Ø ÖØ Ò ÓÖÑ Ø ÓÒ ÓÐÐÓÛ Ø ÑÓÚ Ò Ø ÒØ Ö ÙÐØÓ Ø Ñ º Ì Ô Ò Ð Ú ÒØÓØÛÓÔ ÖØ º Ö ØÓ ÐÐ Ø ÓÒÛ Ø Ì Ô Ö º Ú ÒØ ËÅ Ø ¾¼¼ º¼ º½¾ ÊÓÙÒ ½¾ Ï Ø Ë Ø ÒÆ Ð ÓÒ Ð Ì ÓÑ Å ÖØØ Ð Ê ÙÐØ ½»¾¹½»¾ Ï Ø ÐÓ ¾¾ Ð ÐÓ ¾¾ ½ Ê ÙÐØ ½»¾¹½»¾ ½ºË ¾º º º ¾ Ü º Ü º ¾Ä º Ë ºÄ ¾Ë º Ë ½¼ºË ½½ºËÜ Ü ½¾ºÌ½Ä ½ º ½ ºÄ Ü ½ ºÄÜ Ë ½ ºÄ Ë ½ ºÃ ¾Ã ½ ºÄ ½ º ¾¼º ½»¾¹½»¾ Ì ÔÖÓ Ö Ñ Ð ØÓÓÖÖ ØÐÝ Ò ÐÝ Ò ÓÒÚ ÖØ ÓÖ ØØÓ Ô Ò¹ Ð ºÀÓÛ Ú Ö Û Ò ÙÖ Ò Ø ÛÖ Ø Ò Ó Ø Ð ÓÖ Ø Ñ Ú ÒØ Ð Ø Ø Ò ÒØ Û Ý Ð ØØ Ö ÛÖ ØØ ÒÐ ØÓ Ø ØÖÓÔ Ý Ò Ø Ê ÙÐØ
71 ÔÖÓ Ö ÑØ Ö ÓÖ ÒÓØ Ø Ð Ú ÐÛ Ö Ø ÔÖ Ø ÐÙ ºÁØ Ð ÓÕÙ Ø Ø ÓÙ ØÓ Ò Ò ÐÓØÓ ÓÖ Ø»ØÖ Ò Ò Ø º ÓÒÐÙ ÓÒ ÙÖ Û Ø Ù Ø Û ÝÑ ÓÐ ØÓ Ó ØÛ Òº ÓÖ Ø Ò ÒØ ÖÔÖ Ø ÁØ ÒÓØ ÝØÓÓÒ ØÖÙØ Ò Ð ÓÖ Ø ÑØ Ø Ò ÒØ ÖÔÖ Ø Ò ÛÖ Ø Ò Û ÐÐ Ú Ò Ë ÓÒ ÐÝ Ì ÓÖ Ø Ø ÐÐ ØÓ Ò Ø Ò ÒÒÓØÓÒØ Ò Ö Ð Ò Ö ØÓ ÐÐ Ø Ô Ö ÓÒÛÖ Ø Ò Ø ÓÖ Ø ØÓ Ú ÒÖ ØÖ Ø ÒØ Ò ÛÖ Ø Ò Ø ÓÖ ÓØ ØØ ÔÖÓ Ö Ñ ÒÖ Ó Ò Þ ÝÑ ÓÐ º Ø ÐÐÝ ÙØ ÓÖ ØØÓÛÓÖ Û Ø Ø Ð ÓÖ Ø Ñµ ØÖ ÕÙ Ö ÖØ ÒÔÖ Ö ÕÙ Ø ÖÓ Ò ÓÚ Ö º ÙÖØ ÖÑÓÖ Ø ÒÒÓØ ÖÓÒ ÓÙ Ø ÔÖÓ Ö ÑÛ ÐÐÒÓØ Ð ØÓ ÐÛ Ø Ñ ÓÖÛÖÓÒ ÑÓÚ µºàóû Ú Ö Ø Ñ Ø Ø Ú ÒØ ÔÖÓ Ð Ñ Ö ÕÙ Ø Ñ Ò Ð Ò Ø ÔÖÓ Ö Ñ Ò Ñ ÑÓÖ ÖÓ Ù Ø Ý Ò Ò ÓÑÔ ÖØ Ù Û Ø ÝÑ ÓÐ Ò ÑÓÚ Ò Û Ø Ö Ù Ø Ö Ò ÓÑ Ò ºÌ ÒÒÓÛ Ý ØÖ Ú Ð ØÝ ÙØ Ø Ó ÑØ ÓÖ Ø ÐÐÝÔÓ Ð ØÓ Ù Ð ÓÓ ÓÑÑ Ö Ð ÓÖ Ø Ò ÐÝ ÖºÁØ Ð ÓÑ Ý ÔÓ Ð ØÓ ÛÖ Ø Ò Ð ÓÖ Ø ÑØ Ø Ó ÒÓØÒ ØÓ Ú ÔÖ ÔÖÓ Ö ÑÑ Ø ÑÔÐ Ø ÙØ Ø Ø Ò Ø Ð ÒØ ÝØ Ö ÒØÔ ÖØ ºÀÓÛ Ú Ö Ø Ó ÑÚ ÖÝ ÙÐØ Ò ÕÙ Ø ÙÒÒ ÖÝ Ø Ö Ö ÓÒÐÝ Ð Ñ Ø ÑÓÙÒØÓ Ö ÒØ ÓÖ Ø Ø ÑÔÐ Ø Ò Ø Ý Ò ÐÝ Ø ÐÓ Ù º Ù Ò ÒÓØÚ ÖÝ ÝØÓ ÑÔÐ Ñ ÒØº ÔÓ ÐØÝ ØÓÙ ÓÑ ÓÖØÓ Ô ÒØ ÖÔÖ Ø Ò Ò ÛÖ Ø Ò ÛÓÙÐ ÐÔØÖ Ñ Ò ÓÙ ÐݺÀÓÛ Ú Ö Ø ÙÐØ Ì Ö Ö ÒÙÑ ÖÓ Û Ý ØÓ ÑÔÖÓÚ Ø Ð ÓÖ Ø Ñº Ö ØÐÝ ØØ ÖÛ ÝÓ ÙØÙÖ ÛÓÖ Ø Ø ÓÒ Ø ÓÒ Ó Ø Ö Ø Ö Ø ÓÖ Ð ØØ Ö»ÒÙÑ ÖºÌ Ö Ö ÓÑ Ó ØÛ Ö ÓÖ Ò ÛÖ Ø Ò ÓÒØ Ñ Ö Ø Ò ÝÓÔÝ Ò» Ò ÐÝ Ò Ø Ñ Ø Ð ÓÖ Ø ÑÓÙÐ ÙÖ ÐÝ ÑÔÖÓÚ º ½¼
72 ÛÖ Ø Ò Ò Ù Ú Ö ÐØ ÑÔÐ Ø ÓÖØ Ö ÒØÐ ØØ Ö Ò Ö ÒØ ÓÖ ¹ ÒÓØ Ø ÓÒ Ù Ø ÑÔÐÝ Ý ÒØ ÖÔÖ Ø Ò ÓÖ Ü ÑÔÐ Ê ÖÓÓ µ Ì ØÓÖÒµµº Ø Ù Ø ÑÔÐÝÑÓÖ ØÓÖ Ò ÓÖÑ Ø ÓÒµºÌ Ñ ÕÙ Ø ÝØÓ ÑÔÐ Ñ ÒØ ÙØÑ Ý ÒÓØÚ ÖÝÙ ÙкÁØÛÓÙÐ Ð Ó ÔÓ Ð ØÓ ÐÐÓÛ ÓÖ Ü ÑÔÐ Ò Ð ÙÖØ ÖÑÓÖ Ø Ð ÓÖ Ø ÑÓÙÐ ØÖ Ò ØÓÙ Ö ÒØÔ ÓÔÐ Ò ¹ Ô Ò ØÖ Ó Ø Ð Ð ÓÓ Ó ÔÓ Ð ÑÓÚ Ò Ø Ó Ù Ø ÓÓ Ò Ø ØµºÌ ÛÓÙÐ Ñ Ò ÐÓØÑÓÖ ÓÑÔÙØ Ø ÓÒ ÙØÛÓÙÐ Ú Ö Ø Ö Ò Ó ØØ Ò Ø ÓÖÖ ØÑÓÚ º ÒÓØ ÖÔÓ Ð ØÝ ÑÔÐ Ú Ö ÓÒÓ Ú Ø Ö µ Ø Ø Ø Ö Ö ØÛÓÑÓÚ Ø Ø Ö ÓØ ÖÓÙ ÐÝ ÕÙ ÐÐÝÐ ÐÝ Ø ÌÓ ÑÔÖÓÚ Ò Ó Ù Î Ø Ö Ð ÓÖ Ø ÑÓÙÐ ÑÔÐ Ñ ÒØ ÔÖÓ Ö Ñ Ô Ø Ñ ÓØ ÒÑ ÑÓÖÝ Ò Û Ø Ô Ò Ð Ø ÖÓÒºÌ ÓÙÐ Ú ÒÓÙ Ò ÓÖÑ Ø ÓÒØÓØ ÔÖÓ Ö ÑØÓÐ Ø Ö Ð ØÓ Û Û Ø ÓÖÖ ØÑÓÚ ÖÐ ÖºÌ ÑÔÖÓÚÑ ÒØ ÛÓÙÐ ÐÐÓÛ ÓÖ ÐÓÔÔ Ö Ò ÛÖ Ø Ò º Ì Ò ØÓà ÐÐ ØÖ Ñ ÓÖ Ù Ò Ò ØÓØ ÓÑÑÙÒ ØÝ ÓÖÔÖÓ¹ ÒÓÛÐ Ñ ÒØ Ú Ò Ù Ò ÒØ Ö Ø Ò Ñ º ½½
73 Förslag till metod av pussellösning Petra Käck f03 och Linda Näslund f03 11/29/2007
74 Inledning Projektet går ut på att man utifrån fotografier av pusselbitar ska kunna lägga ett pussel. Instruktionerna för hur detta skulle utföras var inte så utförliga så det var upp till oss själva att komma på ett tillvägagångssätt genom att tillämpa kunskaperna från bildanalyskursen. Givet i uppgiften var att pusslet skulle fotograferas, samt att de olika pusselbitarna skulle segmenteras och slutligen skulle pusslet lösas så långt som möjligt. Metod En bild av de roterade pusselbitarna och en på hela pusslet lästes in så de kunde arbetas med i MathLab. Här efter bestod uppgiften huvudsakligen i två delar, för det första detekterades de olika pusselbitarna och plockades ut ur den ursprungliga bilden. Därefter skulle de olika bitarna pusslas ihop så att de resulterade i den ursprungliga bilden. Segmenteringen av pusselbitarna löstes genom att tröska igenom bilden och leta efter pixlar som inte var bakgrund. Därefter har vi utgått från bilden av det färdiga pusslet för att kunna fortsätta. Genom att varje pusselbits särdrag jämfördes med den ursprungliga bildens kunde vi sedan någorlunda passa ihop rätt bit till rätt plats i pusslet. Utförande och Resultat Fotografering Projektet inleddes genom inhandlandet av ett lämpligt sex bitars pussel. För att underlätta arbetet valdes ett pussel med så få bitar som möjligt och ett tydligt samt detaljrikt motiv. Nästa steg var att fotografera pusslet. Till att börja med fotograferades en pusselbit i taget på olika bakgrunder, se figur 1. Figur 1: Fotograferade pusselbitar med olika bakgrund.
75 Bilderna lästes sen in i MathLab för att se vilken typ av bakgrund som var lättast att arbeta med. Vi valde den svarta bakgrunden för att underlätta tröslkingen då den vita såg blåaktig ut och därför liknade himlen på bilden för mycket. Efter lite trixande med reflektioner i bilderna av lampor och blixt etc. kom vi fram till att fotografering utomhus gav bäst och jämnast ljus över bilderna. Slutligen togs alltså bilderna utomhus på ett bord med svart bakgrund. Bilderna vi kom att arbeta med var en bild på hela pusslet när det var lagt samt en bild på alla pusselbitarna roterade och i oordning. Figur 2: Den inlästa hela bilden och de olika roterade pusselbitarna. Bildhantering i MathLab Då bilderna lästs in i MathLab gjordes de först om från RGB format till gråskala, se figur 2. Därefter gjorde vi om den svarta bakgrunden i bilden till vit genom att sätta alla pixlar som hade ett värde under 20 (svart) till 255 (vitt), se figur 3. Problem som uppstod då var att kanterna på pusselbitarna inte blev så fina, samt att vissa pixlar i bilden trösklats bort. Där fanns även pixlar utanför pusselbitarna som hade ett värde som var större än 20 och därför inte blivit vita. Figur 3: Hela bilden och de roterade pusselbitarna med vit bakgrund.
76 Efter lite diskussion med handledaren om detta fick vi tipset att använda funktioner i MathLab som heter dilate och erode. Genom att börja med att använda MathLab funktionen dilate skapade vi en cirkel med en radie på tre pixlar som fördes över bilden. För varje placering på cirkeln sattes alla pixlar innanför cirkeln till vita om cirkeln innehöll en eller fler vita pixlar. Detta gjorde att ensamma svarta prickar i bakgrunden försvann samt att kanterna på pusselbitarna skalades ner, varje pusselbit förminskades alltså en aning, se figur 4. Figur 4: De olika pusselbitarna efter dilate. Genom att därefter göra erode på bilden kunde vi återskapa lite av informationen vi plockat bort, se figur 5. Till skillnad från dilate får vi nu ett värde på alla pixlar inom cirkeln om minst en pixel inte är bakgrund (vit). Pusselbiten förstoras alltså något igen och vi blir av med eventuella hål i bilden som uppstod med dilate. Detta resulterade alltså i bilder med väldefinierade kanter av pusselbitarna med en fin vit bakgrund. Figur 5: Hela bilden och de olika pusselbitarna efter
77 Segmentering av Pusselbitar Vid segmenteringen av pusselbitarna, innan tipset från handledaren på dilate och erode, försökte vi först göra filter som deriverade i x och y led för att få fram kanterna. Detta var ganska misslyckat då de flesta kanterna hittades inne i bilden. Derivatafiltret skrevs då om så att det deriverade radvis för att sen bryta och gå på nästa rad när första höga derivatan (= kant) hittats. Genom att sen även göra detta kolonnvis fick vi ganska väldefinierade kanter. Problemet uppstod då vi fick för oss att anpassa någon typ av funktion efter kanterna och på så vis plocka ut bitarna. Vi insåg snabbt att detta inte var någon bra metod om vi ville bli klara med pusslet i år och gick istället tillbaka till trösklingen och enklare metoder. Segmenteringen av pusselbitarna underlättades av att trösklingen till slut blev bra. Eftersom pusselbitarna var placerade i tre kolonner med två pusselbitar i varje gjordes en sökning efter kolonner helt utan pixlar som var del av pusselbit, när sådana rader hittats bröt vi och skapade en ny bild innehållande en kolonn med pusselbitar, se figur 6. Figur 6: Två pusselbitar efter tröskling kolonnvis.
78 På så vis delades bilden in kolonnvis i tre bilder med två pusselbitar i varje bild. Därefter gjordes samma sak radvis vilket resulterade i sex bilder med en pusselbit i varje, se figur 7. Figur 7: En pusselbit efter tröskling först kolonnvis sen radvis. För att bli av med all överflödig vit bakgrund i den hela bilden som pusselbitarna skulle jämföras med plockades tomma (= helt vita) rader och kolonner bort. Detta gjordes genom att rader och kolonner som innehöll pussel placerades i en ny matrs, se figur 8. Tomma rader och kolonner definierades på så vis att de inte fick innehålla mer än tio pixlar som inte var vita. Figur 8: Hela bilden efter trösklat bort den vita bakgrunden.
79 Särdrag i pusselbitarna Eftersom vi hade valt att lägga pusslet genom att jämföra pusselbitarna med den ursprungliga bilden var vi huvudsakligen intresserade av information inne i varje pusselbit. Hade vi till exempel valt att passa pusselbitarna med varandra hade det varit informationen i kanterna som hade varit intressant för jämförelse. Då särdrag skulle plockas ut provades först Harrisfiltret, men detta hittade främst kanterna på pusselbitarna och inte så mycket information inne i bilden. Efter ytterligare diskussion av handledare gavs tipset om ett SIFT filter, (Scale invariant feature transform). Filtret är inget som vi hade tid att skriva själva så vi fick m filerna av handledaren och läste på om dess funktion. Precis som det vi eftersökte så plockar SIFT ut särdrag från en bild, där särdragen representerar ställen i bilden med mycket information. Genom att på olika sätt beskriva ett område i bilden gör SIFT filtret särdragen oberoe av faktorer som skala, rotation och förändring av belysning. Detta var speciellt lämpligt för identifiering av pusselbitar eftersom bitarna var roterade och i annan skala än den ursprungliga bilden. Det funktionen returnerar var en matris, features, som bland annat angav koordinaterna var varje särdrag samt en matris, keys, med en vektor för varje särdrag som beskrev området kring särdraget genom sex tal. Det var alltså dessa sex tal för varje särdrag som var intressanta för oss då pusselbitarnas särdrag skulle jämföras med de i den ursprungliga bilden. SIFT filtret tillämpades alltså på alla pusselbitarna så att varje pusselbit fick en tillhörande matris med keys. För att underlätta beräkningarna letade vi features ast inom en mindre urklippt del av bilden av pusselbiten, och inte på hela biten, se figur 9, 10 & 11. Då SIFT skulle göras på hela bilden stötte vi på problem. Eftersom bilden är ganska stor och SIFT beräkningarna var relativt omfattande fick vi felmeddelandet att MathLab inte hade tillräckligt med minne för att arbeta. Vi jobbade en hel del med att ta bort alla sparade matriser och få fram mer minne. Vi försökte även köra programmet från olika, snabbare datorer, men fick fortfarande samma meddelande. För att undkomma detta problemet delades även den hela bilden in i sex mindre delar, och då gick det bra att få fram särdrag även från den. Resultatet av detta steg blev alltså sex matriser med keys, en för varje pusselbit, samt sex matriser med keys för delarna av den hela bilden. Figur 9: Pusselbitarna 1 och 4 med olika särdrag utmarkerade.
80 Figur 10: Pusselbitarna 6 och 3 med olika särdrag utmarkerade. Figur 11: Pusselbitarna 2 och 5 med olika särdrag utmarkerade. Jämförelse av varje pusselbit med delarna av hela bilden Efter att ha fått fram alla särdrag i alla pusselbitarna och i den hela bilden återstod bara att jämföra dem med varandra. Om man då tänker sig att man börjar med att titta på vektorn som beskriver ett särdrag ur den första pusselbiten. Det särdraget borde passa bäst med det särdrag i hela bilden där avståndet mellan vektorerna blir minst. Avståndet mellan vektorerna som representerar särdragen ges alltså av ekvation 1; norm( v ) 2 v1 Ekvation 1 där 2 v är en 1*6 vektor som beskriver ett särdrag ur den ursprungliga bilden och 1 v är en 1*6 vektor som beskriver ett särdrag ur en pusselbit. Genom att då för ett särdrag ur en pusselbit beräkna avståndet till alla särdragen i en del av den ursprungliga bilden passar särdraget bäst där avståndet är minst, så det minsta värdet sparas undan. Därefter görs likadant för resterande särdrag i pusselbiten. Då fås slutligen
81 en vektor med det minsta avståndet för varje särdrag i pusselbiten till särdraget i bilden där det passar bäst. Genom ta medelvärdet på dessa minsta avstånd fås ett mått på hur bra pusselbiten passar ihop med just den delen av hela bilden. Såhär gick vi alltså tillväga för alla pusselbitarna och fick på så vis ett värde på hur väl varje pusselbit passade med varje del av bilden, se figur 12, 13 & 14 och tabell 1. Figur 12: Hela bilds bitarna 1 och 2 med olika särdrag. Figur 13: Hela bilds bitarna 3 och 4 med olika särdrag.
82 Figur 14: Hela bilds bitarna 5 och 6 med olika särdrag. Pusselbit1 Pusselbit2 Pusselbit3 Pusselbit4 Pusselbit5 Pusselbit Tabell 1: Den första kolonnen i varje tabell visar medelvärdet av alla minsta avstånd och den andra kolonnen visar motsvarande placering i hela bilden Som då kan utläsas verkar de flesta av pusselbitarna passa bäst med del tre av hela bilden. Eftersom detta inte är möjligt tillät vi den pusselbit med minst avstånd till del tre att passa dit. På så vis fortsatte vi med resten av bitarna, de placerades alltså på den plats i hela bilden där avståndet var minst, om inte någon annan pusselbit, som inte redan var placerad, passade bättre där. Det slutliga resultatet över vilken pusselbit som passade bäst till de olika bitarna av hela bilden kan ses i tabell 2. Passar bäst Tabell 2: Den första kolonnen visar det minsta avståndet och den andra kolonnen visar vilken plats i den hela bilden. Slutligen så visar den tredje kolonnen vilken pusselbit detta motsvarar.
83 Finputsandet Då alla pusselbitarna identifierats med en position i bilden hade vi fortfarande en del pusslande kvar. Först och främst skulle bitarna roteras så de var rättvända. Efter att ha provat oss fram med olika typer av rotationsmatriser fick vi tipset från handledaren att roteringen smidigt kunde göras genom MathLabfunktionen imtransform. För att rotera pusselbiten behöver man koordinaterna för tre punkter i bilden samt koordinaterna för korresponderade punkter i hela bilden som man ville att punkterna i pusselbiten skulle roteras till. Detta hade vi tänkt göra lite snyggt genom att rotera dem efter koordinaterna giva för särdragen i matriserna features. Eftersom tiden inte riktigt räckte till gick vi istället in och tittade på figurerna som MathLab ritat av pusselbitarna och plockade ut koordinaterna för tre hörn på bitarna manuellt. Eftersom vi redan vet var pusselbitarna hörde hemma plockades även koordinaterna de skulle rotera till ut manuellt. Som en liten finputsning av bilderna av de roterade pusselbitarna plockade vi, precis som tidigare, bort överflödiga tomma rader och kolonner, se figur 15. Slutligen så försökte vi med lite olika metoder att pussla ihop de tre pusselbitarna som matchade rätt med hela bilden men på grund av tidsbrist och att skalorna på de olika pusselbitarna inte stämde överens blev detta lite svårt. Figur 16 visar i varje fall hur det slutliga pusslet skulle ha blivit. Figur 15: Två pusselbitar som är rätt roterade och trösklade Figur 16: De rättroterade pusselbitarna enligt vårt resultat på var i pusslet de ska vara i det slutliga pusslet.
84 Slutsats Resultatet av pusslandet blev inte riktigt så bra som vi hade velat, men vi är ändå nöjda. Anledningen till att de nedre pusselbitarna inte riktigt hamnade på rätt plats kan mycket väl vara rutmönstret på filten i bilden. Eftersom samma rutmönster finns på alla bitarna och rutorna är ställen där SIFT filtret hittar särdrag, är avstånden mellan dessa särdragsvektorer väldigt små och det är svårt att avgöra vilka särdrag som överensstämmer. De övre pusselbitarna hamnar ju på rätt plats och de bitarna skiljer sig lite mer från varandra. Vi är dessutom lite missnöjda med att det blev lite för mycket manuellt trixande på slutet, men tiden räckte inte riktigt till. Vissa moment under utförandet hade man kunnat lägga hur mycket tid som hälst på att förfina. Vi fastnade nog lite för mycket vid hanteringen och funktionen av SIFT för att få ut särdragen och fick på så vis för lite tid kvar till att lägga pusselbitarna på rätt plats på ett smidigt sätt. Vårt pusslande kan även vara svårt att tillämpa på andra och större pussel. Det krävs en del förfiningar och ändringar i koden i så fall. Dessutom bygger segmenteringen av pusselbitarna på att bitarna är uppradade kolonnvis och trösklingen inför segmenteringen bygger på en fin svart bakgrund. Som slutsats kan vi konstatera att vi har under väldigt optimerade förhållanden bara lyckats hitta rätt plats för tre av sex pusselbitar. Med mer tid kan man säkert utveckla det till något mer generellt, men med vårt program går det betydligt fortare att lägga pusslet för hand. Bilagor Bilaga 1 är m filen till vårt pussel projekt.
85 Bilaga 1, m filen BAllr=imread('allabitarrot.jpg'); HelBild=imread('helbild.jpg'); %Läser in bild med roterade puselbitar. %Läser in hela pusslet. BAllgr=rgb2gray(BAllr); HelBildg=rgb2gray(HelBild); % TRÖSKLAR %Hela Bilden for i=1:size(helbildg,1) for j=1:size(helbildg,2) if HelBildg(i,j)<20 HelBildg(i,j)=255; %Alla Bitar roterade for i=1:size(ballgr,1) for j=1:size(ballgr,2) if BAllgr(i,j)<40 BAllgr(i,j)=255;
86 % figure % colormap(gray) % imagesc(helbildg) % figure % colormap(gray) % imagesc(ballgr) % Dilate/Erode %Tar bort pixlar utanför pusselbiten = förminskar biten något se3 = strel('disk',3); %använder cirkel med radie=3 pixlar BAllgrd=imdilate(BAllgr,se3); HelBildgd=imdilate(HelBildg,se3); %Lägger till pixlar där det fattas, =förtorar bilden igen BAllgre=imerode(BAllgrd,se3); HelBildge=imerode(HelBildgd,se3); % figure % colormap(gray) % imagesc(ballgre) % figure % colormap(gray) % imagesc(helbildge)
87 % Hitta bitarna kolumner=[]; PusselBitar=cell(1,6); %in: Pusselbitar{1}=matrisen, ut: pusselbitar{1} %Delar in bilden kolonnvis i tre celler med två pusselbitar i varje cell for j=1:size(ballgre,2) %Räknar tomma vita kolonner k=0; for i=1:size(ballgre,1) if BAllgre(i,j)==255 k=k+1; if k>1910 %Helt tom kolunm kolumner=[kolumner;j]; bryt=[]; for i=2:size(kolumner) %HIttar brytpunkten =stort hopp mellan indexen a=kolumner(i); b=kolumner(i 1); c=a b; if c>10 bryt=[bryt;kolumner(i)];
88 %Placerar de tre bilderna i trebitar, varje bild visar två bitar trebitar=cell(1,3); trebitar{1}=ballgre(:,(1:bryt(1))); trebitar{2}=ballgre(:,(bryt(1):bryt(2))); trebitar{3}=ballgre(:,(bryt(2):bryt(3))); % figure % colormap(gray) % imagesc(trebitar{1}) %Delar på bilderna med två bitar så vi får en cell av varje bit. rader=[]; index=1; for v=1:3 for i=1:size(trebitar{v},1) %Räknar tomma vita rader k=0; for j=1:size(trebitar{v},2) if trebitar{v}(i,j)==255 k=k+1; if k>=(size(trebitar{v},2) 10) %Helt tom rad
89 rader=[rader;i]; bryt2=[]; for i=2:size(rader) %HIttar brytpunkten =stort hopp mellan indexen d=rader(i); e=rader(i 1); f=d e; if f>10 bryt2=[bryt2;rader(i)]; PusselBitar{index}=trebitar{v}((1:bryt2(index)),:); PusselBitar{index+1}=trebitar{v}((bryt2(1):bryt2(index+1)),:); index=index+2; % Skalar bort överflödigt vitt %Hela Bilden TempBild=[]; for j=1:size(helbildge,2) %Räknar tomma vita kolonner k=0; for i=1:size(helbildge,1)
90 if HelBildge(i,j)==255 k=k+1; if k<size(helbildge,1) 10 %Kolumn med pusselbit i TempBild=[TempBild HelBildge(:,j)]; NyHelBild=[]; for i=1:size(tempbild,1) %Räknar tomma vita rader k=0; for j=1:size(tempbild,2) if TempBild(i,j)==255 k=k+1; if k<size(tempbild,2) 10 %Rad med pusselbit i NyHelBild=[NyHelBild;TempBild(i,:)]; % figure % colormap(gray)
91 % imagesc(nyhelbild) % Plockar ut features som överensstämmer %Vill ha kvadratiska bilder för att kunna köra features, även ute efter %mindre kant så vi får featursen inne i bilden KvadratBilder=cell(1,6); KvadratBilder{1}=PusselBitar{1}((400:900),(200:700)); %Bit1 KvadratBilder{2}=PusselBitar{2}((300:800),(300:800)); %Bit2 KvadratBilder{3}=PusselBitar{3}((200:700),(200:700)); %Bit3 KvadratBilder{4}=PusselBitar{4}((200:700),(200:700)); %Bit4 KvadratBilder{5}=PusselBitar{5}((300:800),(200:700)); %Bit5 KvadratBilder{6}=PusselBitar{6}((400:900),(200:700)); %Bit6 %features för roterade bitarna Bitfeatures=cell(6,2); for i=1:6 if i==1 [f,pyr,imp,k] = detect_features(kvadratbilder{i}, 1.5, 0,2, 4, 4, 4, 0.04, 5); elseif i==2 [f,pyr,imp,k] = detect_features(kvadratbilder{i}, 1.5, 0,2, 4, 4, 4, 0.04, 5); elseif i==3 [f,pyr,imp,k] = detect_features(kvadratbilder{i}, 1.5, 0,2, 4, 4, 4, 0.04, 5); else [f,pyr,imp,k] = detect_features(kvadratbilder{i});
92 [features,keys] = eliminate_edges(f,k); Bitfeatures{i,1}=features; Bitfeatures{i,2}=keys; %showfeatures(features,kvadratbilder{i}); %Måste dela upp HelBild då den verkar vara för stor att ta features på breddpusselbit=size(nyhelbild,2)/3; hightpusselbit=size(nyhelbild,1)/2; BitavHelbild=cell(1,6); Coord=zeros(6,4); k=0; m=0; for i=1:6 BitavHelbild{i}=NyHelBild((m+1:hightPusselbit+m),(k+1:breddPusselbit+k)); Coord(i,:)=[m+1 hightpusselbit+m k+1 breddpusselbit+k]; k=k+breddpusselbit; if k==size(nyhelbild,2) m=m+hightpusselbit; k=0; %trean funkade inte Allafeatures=cell(6,2); %första kolonnerna med celler=features, 2:a = keys
93 k=1; for i=1:6 if i==3 [f2,pyr,imp,k2] = detect_features(bitavhelbild{i}, 1.5, 0,2, 4, 4, 4, 0.04, 5); else [f2,pyr2,imp2,k2] = detect_features(bitavhelbild{i}); [features2,keys2] = eliminate_edges(f2,k2); %figure %showfeatures(features2,bitavhelbild{i}) Allafeatures{i,1}=features2; Allafeatures{i,2}=keys2; % Jämför bitar med hela pusslet %Bit 1, vill ha passar = 4. OK!!! passar=cell(6,1); temp=[]; for pusselbit=1:6 medelavst=[]; for bild=1:6 minavst=[]; for k1=10:size(bitfeatures{pusselbit,2},1) avst=[]; for k2=10:size(allafeatures{bild,2},1)
94 dist1=norm((bitfeatures{pusselbit,2}(k1,:)) (Allafeatures{bild,2}(k2,:))); avst=[avst; dist1 k1 k2 bild]; avst=sortrows(avst); minavst=[minavst; [avst(1,1) bild]]; %minavst från en feature i pusselbbiten till den som passar bäst i bilden medelavst=[medelavst; mean(minavst(:,1)) bild]; %medel av alla avstånden mellan en pussselbit och en bild medelavst=sortrows(medelavst); passar{pusselbit}=medelavst; temp=[temp;passar{pusselbit}(1,:) pusselbit]; temp=sortrows(temp); passarbest=temp(1,:); %placerar första biten passar1=[passarbest]; %[värdet plats i hela pilden vilken pusselbit] %placerar andra biten; min=[]; for i=1:6 %index som går igenom pusselbitar if passar{i}(1,2)==3 min=[min;passar{i}(2,:) i]; else
95 min=[min;passar{i}(1,:) i]; min=sortrows(min); for i=1:2 if min(1,3)~=3 passar2=[min(1,:)]; else passar2=[min(2,:)]; %placerar tredje biten; min=[]; for i=1:6 if i~=2 if i~=3 if passar{i}(1,2)~=3&&passar{i}(1,2)~=1 min=[min;passar{i}(1,:) i]; elseif passar{i}(2,2)~=3&&passar{i}(2,2)~=1 min=[min;passar{i}(2,:) i]; else min=[min;passar{i}(3,:) i];
96 min=sortrows(min); for i=1:3 if min(1,3)~=3&&min(1,3)~=1 passar3=[min(1,:)]; elseif min(2,3)~=3&&min(2,3)~=1 passar3=[min(2,:)]; else passar3=[min(2,:)]; %placerar fjärde biten; min=[]; for i=1:6 if i~=2 if i~=3 if i~=5 if passar{i}(1,2)~=3&&passar{i}(1,2)~=1&&passar{i}(1,2)~=4 min=[min;passar{i}(1,:) i]; elseif passar{i}(2,2)~=3&&passar{i}(2,2)~=1&&passar{i}(2,2)~=4 min=[min;passar{i}(2,:) i]; elseif passar{i}(3,2)~=3&&passar{i}(2,2)~=1&&passar{i}(3,2)~=4 min=[min;passar{i}(3,:) i];
97 else min=[min;passar{i}(4,:) i]; min=sortrows(min); for i=1:4 if min(1,3)~=3&&min(1,3)~=2&&min(1,3)~=5 passar4=[min(1,:)]; elseif min(2,3)~=3&&min(2,3)~=5&&min(2,3)~=2 passar4=[min(2,:)]; elseif min(3,3)~=3&&min(3,3)~=5&&min(3,3)~=2 passar4=[min(3,:)]; else passar4=[min(4,:)]; %5e och 6e kvar, som ovan men förenklar för vår egen skull min = sortrows([passar{4}(5,:) 4;passar{4}(2,:) 4;passar{1}(2,:) 1;passar{1}(6,:) 1]); passar5=min(1,:); for i=2:4
98 if min(i,2)~=passar5(2) if min(i,3)~=1 passar6=min(i,:); passarny=[]; %minvärdet bildplats pusselbitens nummer passarny=[passar5;passar2;passar1;passar6;passar3;passar4]; % %PLottar tillhörade efter varndra för att kolla % figure % colormap(gray) % imagesc(pusselbitar{passar1(3)}) % figure % colormap(gray) % imagesc(bitavhelbild{passar1(2)}) % % figure % colormap(gray) % imagesc(pusselbitar{passar2(3)}) % figure % colormap(gray) % imagesc(bitavhelbild{passar2(2)}) %
99 % figure % colormap(gray) % imagesc(pusselbitar{passar3(3)}) % figure % colormap(gray) % imagesc(bitavhelbild{passar3(2)}) % Roterar pusselbitarna T1=maketform('affin',[ ; ; ],[ ;730 8;24 22]); %1:a bitens koord rotbild1=imtransform(pusselbitar{2},t1); %roterar den 1:a pusselbiten T2=maketform('affin',[ ; ;90 820],[ ; ;730 8]); koordinater %andra bitens rotbild2=imtransform(pusselbitar{1},t2); %roterar den 2:a pusselbiten T3=maketform('affin',[ ; ; ],[ ; ; ]); %3:e bitens koordinater rotbild3=imtransform(pusselbitar{3},t3); %roterar den 3:e pusselbiten T4=maketform('affin',[ ; ; ],[ ; ;10 843]); rotbild4=imtransform(pusselbitar{6},t4); %roterar den 4:e pusselbiten T5=maketform('affin',[ ; ; ],[ ; ; ]); rotbild5=imtransform(pusselbitar{4},t5); %roterar den 5:e pusselbiten T6=maketform('affin',[ ; ; ],[ ; ; ]); rotbild6=imtransform(pusselbitar{5},t6); %roterar den 6:e pusselbiten % figure % colormap(gray) % imagesc(rotbild1)
100 % figure % colormap(gray) % imagesc(rotbild2) % figure % colormap(gray) % imagesc(rotbild3) % figure % colormap(gray) % imagesc(rotbild4) % figure % colormap(gray) % imagesc(rotbild5) % figure % colormap(gray) % imagesc(rotbild6) rotbild=[]; NyrotBilder=cell(1,6); for index=1:6 str1='rotbild=rotbild'; eval([str1 num2str(index) ';']) S=size(rotbild); TempBit=[]; for j=1:s(2) %Räknar tomma vita kolonner k=0;
101 for i=1:s(1) if rotbild(i,j)<10 rotbild(i,j)=255; if rotbild(i,j)==255 k=k+1 ; if k<s(1) 40 TempBit=[TempBit rotbild(:,j)];%kolumn med pusselbit i S2=size(TempBit); Nyrotbild=[]; for i=1:s2(1) %Räknar tomma vita rader k=0; for j=1:s2(2) if TempBit(i,j)==255 k=k+1; if k<s2(2) 80 Nyrotbild=[Nyrotbild;TempBit(i,:)];%Rad med pusselbit i
102 NyrotBilder{index}=Nyrotbild; figure colormap(gray) imagesc(nyrotbilder{1}) figure colormap(gray) imagesc(nyrotbilder{2}) figure colormap(gray) imagesc(nyrotbilder{3}) figure colormap(gray) imagesc(nyrotbilder{4}) figure colormap(gray) imagesc(nyrotbilder{5}) figure colormap(gray) imagesc(nyrotbilder{6})
103
104
105
106
107
108 Fortsättning på OCR-systemet FMA175 Bildanalys Projektdel, 3 hp Handledare: Olof Barr Louise Funke F03 30 november 2007 Abstract This project is a further development of the OCR-system created in the course Image Analysis (FMA170) at Lund s Institute of Technology in This OCR-system is developed to handle letters of different font sizes, as well as different fonts and styles (regular, bold, italic). The project focuses in the choices of features and classifier. Different algorithms are tested as well as different features. The results are compared.
109 1. INLEDNING OCR-SYSTEMET FEATURES KLASSIFICERINGSALGORITMER Nearest Neighbour, nn k-nearest Neighbour, knn Bayes klassificerare, MAP Minimering av residualen RESULTAT DISKUSSION SLUTSATSER KÄLLOR Inledning Klassificering av handskriven text är av stor betydelse idag, och ett flertal algoritmer för mönsterigenkänning (eng. pattern recognition) finns tillgängliga. I den här rapporten fokuserar jag på bokstäver i två olika typsnitt, valda så att en är med serifer och en utan. Projektets syfte är att vidareutveckla det OCR-system som påbörjades i kursen Bildanalys (FMA170) genom att låta systemet klara av bokstäver som varierar i storlek, typsnitt samt mellan fet, kursiv eller vanlig stil, se figur 1. I indata används bokstäver av storlek 10 och 14 punkter samt typsnitten Times New Roman och Arial. Figur 1: Exempel på indata till systemet med varierande format på bokstäverna. Projektet fokuserar på vilket val av features som ska användas för att ge ett så högt antal korrekt klassificerade bokstäver som möjligt, samt även klassificerarnas betydelse för systemet. 2. OCR-systemet Bokstäverna ligger representerade i jpeg-bilder, i grupper om 10, se figur 2. OCR-systemet har samma uppbyggnad som det som skapades i kursen Bildanalys (FMA170). Programmet läser in en mängd bilder för att ha dem som träningsdata. Bilderna segmenteras och varje enskild bokstav lagras i en matris. Ur denna matris fås bokstavens features, vektorn x1 y1 x i som tillsammans med facit, y i, lagras i en stor matris classdata=. xn y n De okända bokstäverna, z i, i testdata läses in på samma sätt och med hjälp av en klassificerare bestäms vilken bokstav det är. Denna jämförs sedan mot ett facit och därmed kan man bestämma hur många procent av de okända bokstäverna som systemet har klassificerat rätt. 1
110 Figur 2: Indatas struktur Features I rapporten testas 18 features för att se vilka som är av betydelse för OCR-systemets klassificeringsförmåga, se tabell 1. Alla features är normerade så att de antar ett värde mellan 0 och 1, detta för att kunna jämföra bilder av olika storlek. Feature, nr: Egenskap 1 Andelen av pixlar i bilden som bokstaven består av i jämförelse med hela bilden. 2 Förhållandet mellan bredd och höjd. 3, 4 Symmetri kring den horisontella respektive den vertikala axeln, beräknat som andelen pixlar som skiljer mellan den speglade bilden och originalbilden. 5 Summan av singulärvärdena till bilden. 6 Andelen pixlar längs den övre kanten. 7 Andelen pixlar längs den undre kanten. 8 Andelen pixlar längs den högra kanten. 9 Andelen pixlar längs den vänstra kanten. 10, 11 Minsta respektive största andelen pixlar längs en kolumn. 12, 13 Minsta respektive största andelen pixlar längs en rad. 14, 15 Koordinater (x resp. y) för masscentrat i förhållande till bildens storlek. 16 Excentriciteten hos bokstaven, ex 0 för O och 1 för I. 17 Vinkeln mellan x-axeln och bokstaven. 18 Kvoten mellan antalet pixlar i bokstaven och antalet pixlar i bokstaven med ifyllda håligheter (t ex hålet i o fylls). Tabell 1: Features Klassificeringsalgoritmer Klassificeringsalgoritmerna består av två delar. En del, train_classifier, som läser in träningsdata och som lagrar den i en matris, classdata, och den andra delen, test_classifier, som använder informationen i classdata för att avgöra hur en okänd bokstav ska klassificeras Nearest Neighbour, nn train_classifier Bokstäverna i träningsdata läses in och medelvärdet av varje bokstavs features beräknas och sparas undan i classdata tillsammans med tillhörande bokstav från facit. classdata får således storleken 26x{#features + 1}. test_classifier Minsta avståndet mellan den inskickade featurevektorn (den okända bokstaven) och featurevektorerna i classdata beräknas och bokstaven klassificeras som den som ger minst avstånd. 2
111 För avståndsberäkningen används yi x, där y 2 i är en av de 26 featurevektorerna i classdata och x är den inskickade k-nearest Neighbour, knn train_classifier Bokstäverna i träningsdata läses in och sparas undan i classdata tillsammans med tillhörande bokstav från facit. Detta gör att classdata blir större än classdata i 2.2.1, men rymmer mer information. classdata blir nu en matris av storleken {#bokstäver}x{#features + 1}. test_classifier Avståndet mellan den inskickade featurevektorn och en vektor i classdata beräknas på samma sätt som ovan (2.2.2.). Eftersom man i den här modellen använder sig av alla bilderna och inte bara medelvärdet så fås mer data att välja mellan. Det är dock inte säkert att den bokstav som ligger närmast den inskickade vektorn är den som är rätt, därför tar man reda på dess k närmsta grannar och avgör utifrån dem vad den ska klassificeras som Bayes klassificerare, MAP teori Bokstäverna antas vara oberoe normalfördelade. För en okänd bokstav x, väljer vi klass ω i utifrån MAP, dvs P(ω i x) väljs om den är större än P(ω j x), j i. A posteriori-sannolikheterna fås som 1 T 1 1 P( ω i x) = ( x µ i) Σ i ( x µ i) log ( Σ i ) + log( P( ω i )) (1), där 2 2 n n 1 1 ˆµ i= yi,k, Σˆ i = (yi,k-µ ˆi)(yi,k-µ ˆi) och y i är de featurevektorerna som tillhör klass ω i n k=1 n k=1 (Sullivan 2007). train_classifier classdata beräknas på samma sätt som i För att underlätta beräkningarna i test_data så beräknas sparas i en mat-fil. P(ω ), µ ˆ och Σˆ T För varje känd bokstav beräknas dess singulärvärdesuppdelning, Ybokstav = σ iuivi. i i i för träningsdata och test_classifier Den inskickade vektorn klassificeras som den klass som ger upphov till den största a posteriori-sannolikheten, se (1) Minimering av residualen teori I den här metoden jämförs de relativa residualerna för den okända bokstaven, z. Den relativa residualen beräknas för alla bokstäverna i classdata, som består av classdata = [Y A, Y B,, Y Z ] T, där Y A är alla featurevektorer som tillhör bokstaven A, osv. Vektorn ui är en ortogonal bas i rummet till bokstaven som representeras i Y bokstav. k i= 1 3
112 Minsta kvadrat -problemet löses för varje känd bokstav, min z- skrivas som min z-u α, där α k k ( 1 2 k lösningen till minsta kvadrat -problemet ges av ges av res = relativ T ( I-UkUk) train_classifier classdata är samma som i z 2 z 2 αi k i=1 α u i i. Detta kan även U = u u... u ). Kolumnerna i Uk är ortogonala vilket gör att T α=ukz (2), (Ruhe 2006), (Eldén 2006).. Normen av den relativa residualen test_classifier Den okända featurevektorn, z, klassificeras som den klass som ger upphov till den minsta relativa residualen (2). 3. Resultat Features har grupperats då många av dem beskriver likvärdiga saker (ex pixlar längs kanterna). En grupp, grupp 7, har satts samman som övriga features, mestadels för att underlätta testerna. De grupperas enligt tabell 2. Grupp Features 1 1, 2: storlek, antal pixlar i bilden 2 3, 4: symmetri 3 5: singulärvärde 4 6-9: pixlar längs kanterna : största resp. minsta antalet pixlar i varje rad/kolumn : masscentra : övriga Tabell 2, gruppering av features Körningar av OCR-systemet med olika features och klassificeringsalgoritmer gjordes, se tabell 3, där test med alla features gjorts (kolumn Alla) och test där en del features använts (tex Alla -1, dvs features 3,..,18 har använts). Klass\feature Alla Alla-7 Alla-6 Alla-5 Alla-4 Alla-3 Alla-2 Alla-1 Nn Knn, k= Knn, k= MAP Relativ residual Tabell 3, resultat av körningarna, antal korrekta klassificerade bokstäver. 4. Diskussion Nearest neighbour använder sig av medelfeatures för varje bokstav som sparas undan i classdata. Detta är inte särskilt realistiskt eftersom medelfeaturen inte innehåller någon speciell information om hur exempelvis en kursiv bokstav ser ut. Dessutom kan den inte skilja mellan typsnitt med serifer och utan. Alla bokstäver som sedan ska klassificeras jämförs då 4
113 med denna medelbild (featurevektor) som inte gör skillnad på serifer, kursiv stil, fet stil och dylikt. Att classdata innehåller så lite information om variationen inom en bokstav gör att också att 54% (i bästa fall) av de okända bokstäverna lyckas bli korrekt klassificerade. En mer realistisk variant är att istället för att räkna ut medlet av features för en viss bokstav är att spara undan alla i classdata. På detta sätt behålls informationen om bokstaven har serifer, om den är fet, vanlig eller kursiv stil. Med denna ändring får man för 1 nearest neighbour 95% korrekt klassificerade. Dock blir körningstiden längre då avstånd ska beräknas till samtliga i classdata, vilken också blir betydligt större (den beror på hur många bokstäver som finns i träningsdata). Då en granne byts ut mot tre blir resultatet lägre, runt 92% korrekta. Detta beror troligen på att träningsdata inte innehåller tillräckligt många bokstäver, vilket gör att man inte får den stabilitet som annars borde uppnås i 3nn. Med tre grannar påverkas klassificeringsvalet inte lika lätt en enskild bokstav från träningsdata. Val enligt MAP ger 71% rätt klassificerade bokstäver. Svårigheten med MAP är att sannolikheterna är ungefär lika stora, se figur 3. I figuren är problemet betydligt förenklat, det finns ast två klasser och två features (annat hade det varit svårt att visualisera!). Dock syns det att det är svårt att avgöra vilken klass en okänd bokstav ska tillhöra då skillnaderna mellan klasserna (ytorna) är små. Figur 3: Sannolikhetsfördelning. Bilden visar två klasser, A och B, och deras a posteriori-sannolikheter. Testet med den relativa residualen ger ett resultat på 89% korrekt klassificerade. I figur 4 syns att den första okända bokstaven har minst residual för A, vilket den därmed klassificeras som. Jämförelse med facit visar att den var ett A. Problem kan uppstå då de relativa residualerna är ungefär lika stora, varpå felklassificeringar lätt kan ske. 5
114 relativ residual bokstav Figur 4: Relativ residual för den första okända bokstaven (facit: A). Då alla features används så fås generellt den högsta procenten för antalet korrekt klassificerade bokstäver. De features som har störst inverkan på klassificeringen syns i tabellen som de låga värdena, dvs om den tas bort så påverkas systemet negativt. Grupp 1 har betydelse för nearest neighbour, men inte nämnvärt för de andra klassificerarna. Detta beror på att nearest neighbour använder sig av medelfeatures där förhållandet höjd/bredd samt andelen pixlar som tillhör bokstaven inte varierar nämnvärt för de olika typerna av en bokstav, vilket gör att det är lätt att känna igenom dem utifrån de ovan nämnda features. Grupp 2 som använder sig av symmetrier i bilden (tex så är M och K symmetriska) har betydelse för alla klassificerare, främst nearest neighbour och relativ residual. Grupp 3 som var singulärvärdet påverkar inte i någon större utsträckning, förutom för nearest neighbour och MAP, där det visar sig att de får fler korrekt klassificerade bokstäver utan denna egenskap. Grupp 4 som använder sig av andelen pixlar längs kanterna, har precis som grupp 2, betydelse för alla, främst för 3nn. Grupp 5 och 6 påverkar i regel inte klassificering något nämnvärt, möjligen kan man se en tens att för de mer osäkra klassificerarna (nn och MAP) finns en liten betydelse. Grupp 7 med sina övriga egenskaper påverkar, precis som grupp 2 och 4, i princip alla klassificerare. Detta kan bero på att i den gruppen finns unika sätt att identifiera en bokstav som förenklar igenkänningen. 5. Slutsatser Knn-algoritmen med alla features ger bäst resultat (här ger k=1 bäst). Den är dock inte den snabbaste då all träningsdata måste sparas undan och dessutom jämföras med varje okänd bokstav som ska klassificeras. 6
115 6. Källor L. Eldén, Acta Numerica 2006, pp A. Ruhe, Topics in numerical algebra, 2006 J. Sullivan, föreläsning hållen i bildbaserad igenkänning och klassificering, KTH 7
116 Projekt i Bildanalys, HT-07 Johan Rahnboy F Handledare: Martin Byröd
117 Introduktion Kakuro är ett logikspel där rutorna ska fyllas med siffrorna ett till nio. Spelet har en del likheter med det lite mer kända sifferspelet soduko. Spelplanens svarta rutor är delade diagonalt och i dessa anges totalsumman av siffrorna som ska stå antingen vågrätt eller lodrätt i de vita rutorna. Spelets storlek varierar med svårighetsgraden. Till skillnad från ett soduko så får siffrorna upprepas flera gånger i samma rad eller kolumn, men samma siffra får ast förekomma en gång i en totalsumma. Man brukar beskriva kakuro som ett slags sifferkorsord där bokstäverna är utbytta mot siffror. Figur 1: Så här kan ett kakuro se ut Uppgift: Uppgiften i projektet var att ta en bild av ett kakuro med en digitalkamera och läsa in det i datorprogrammet Matlab. Med hjälp av detta så skulle först rutnätet segmenteras ut och sedan även siffrorna. Efter att siffrorna segmenteras ut så skulle dessa kännas igen och därefter kunde kakurot lösas. Detta projekt har jag valt eftersom jag tyckte det verkade väldigt spännande och intressant. Jag har alltid tyckt soduko har varit ett roligt sifferspel och därför passade det bra att göra ett projekt om ett liknande spel. Projektet skiljde sig dessutom en hel del från våra tidigare uppgifter med vårt OCR-system som gjordes i grundkursen vilket gav en ny utmaning.
118 Lösning: Efter ett första handledarmöte så lånades boken, Kakuro sifferpussel skriven av Alastair Chisholm (grundaren av kakuro-pusslen). Med hjälp av denna bok så togs flera bilder med en fem megapixelkamera på olika kakuros som skulle användas som material i projektet. I projektet har bilder från fyra olika kakuros använts. Figur 2: Bild av ett kakuro ur Chisholms bok med en digitalkamera Först och främst så lästes kakurot in i Matlab. Det första steget var sedan att skapa ett program som segmenterade ut rutnätet. Detta gjordes först genom att göra om bilden till gråskala och normera den. Figur 3: Kakuro efter att gjort om till gråskala Eftersom bilden bestod av fem megapixlar så var nästa steg att komprimera ner bilden för att spara beräkningskraft. Vidare så skulle bilden bearbetas genom ett program (histtruncate) som tog bort de lägsta och högsta delarna av bildens histogram, detta så att t.ex. en ljus bit av bilden inte skulle kunna ge en mörk effekt över hela bilden. Detta program laddades hem från Internet efter att blivit tipsad av handledaren. Figur 4: Bilden komprimerad med en faktor 4 Figur 5: Bilden efter bearbetats med programmet histtruncate
119 Ett problem som uppstod senare var att det bildades väldigt många olika segment när bilden skulle delas upp mha av Matlabs program bwlabel. För att förhindra detta och för att jämna ut bilden så filtererades bilden med ett gaussiskt lågpass filter. Bilden var nu klar för att trösklas och som ses i figur 7 så kan man klart och tydligt utläsa ett rutnät efter tröskling. Figur 6: Bilden filtrerad med gaussiskt lågpassfilter Figur 7: Trösklad bild Nästa steg var att hitta vilka segment som var rutor i den trösklade bild. För att finna dessa användes villkoren att bredden och höjden på ett segment ungefär skulle vara lika stora samtidigt som antalet pixlar av detta segment skulle vara över en viss gräns. Då en ruta hittats så beräknades tyngdpunkten av denna så att på detta sätt veta var i bilden alla rutor låg. När tyngdpunkten av alla rutor var beräknade kunde detta lätt överföras även till matrisform för senare beräkningar. Figur 8: Rutnätet grafiskt och på matrisfrom (ettor där rutorna finns)
Språkigenkänning. en tillämpning av OCR system och klassificering. Projekt i Bildanalys. Anna Lindholm Eskil Jönsson
Språkigenkänning en tillämpning av OCR system och klassificering Projekt i Bildanalys Anna Lindholm Introduktion Syftet med projektet är att undersöka möjligheterna att känna igen vilket språk en text
Språkidentifiering Bildanalys, projekt 3 hp
2007-11-29 Språkidentifiering Bildanalys, projekt 3 hp Pia Haage, Sophia Holmström Handledare: Karl Åström Språkidentifiering Bildanalys, projekt 3 hp Innehåll Inledning... 2 Metod... 2 Utförande... 2
-Projekt- FMA170- Bildanalys
-Projekt- FMA170- Bildanalys Karl Berggren, 820503-2454 d02kb@student.lth.se Andreas Helgegren, 811119-2715 d02ah@student.lth.se Handledare: Håkan Ardö hakan@debian.org 30 november 2007 1 Projektide Undertexter
Isometries of the plane
Isometries of the plane Mikael Forsberg August 23, 2011 Abstract Här följer del av ett dokument om Tesselering som jag skrivit för en annan kurs. Denna del handlar om isometrier och innehåller bevis för
12.6 Heat equation, Wave equation
12.6 Heat equation, 12.2-3 Wave equation Eugenia Malinnikova, NTNU September 26, 2017 1 Heat equation in higher dimensions The heat equation in higher dimensions (two or three) is u t ( = c 2 2 ) u x 2
Module 6: Integrals and applications
Department of Mathematics SF65 Calculus Year 5/6 Module 6: Integrals and applications Sections 6. and 6.5 and Chapter 7 in Calculus by Adams and Essex. Three lectures, two tutorials and one seminar. Important
Module 1: Functions, Limits, Continuity
Department of mathematics SF1625 Calculus 1 Year 2015/2016 Module 1: Functions, Limits, Continuity This module includes Chapter P and 1 from Calculus by Adams and Essex and is taught in three lectures,
Beijer Electronics AB 2000, MA00336A, 2000-12
Demonstration driver English Svenska Beijer Electronics AB 2000, MA00336A, 2000-12 Beijer Electronics AB reserves the right to change information in this manual without prior notice. All examples in this
1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)
UMEÅ UNIVERSITY Department of Mathematics and Mathematical Statistics Pre-exam in mathematics Linear algebra 2012-02-07 1. Compute the following matrix: (2 p 3 1 2 3 2 2 7 ( 4 3 5 2 2. Compute the determinant
Grafisk teknik IMCDP IMCDP IMCDP. IMCDP(filter) Sasan Gooran (HT 2006) Assumptions:
IMCDP Grafisk teknik The impact of the placed dot is fed back to the original image by a filter Original Image Binary Image Sasan Gooran (HT 2006) The next dot is placed where the modified image has its
Preschool Kindergarten
Preschool Kindergarten Objectives CCSS Reading: Foundational Skills RF.K.1.D: Recognize and name all upper- and lowercase letters of the alphabet. RF.K.3.A: Demonstrate basic knowledge of one-toone letter-sound
LUNDS TEKNISKA HÖGSKOLA Institutionen för Elektro- och Informationsteknik
LUNDS TEKNISKA HÖGSKOLA Institutionen för Elektro- och Informationsteknik SIGNALBEHANDLING I MULTIMEDIA, EITA50, LP4, 209 Inlämningsuppgift av 2, Assignment out of 2 Inlämningstid: Lämnas in senast kl
Tentamen i Matematik 2: M0030M.
Tentamen i Matematik 2: M0030M. Datum: 203-0-5 Skrivtid: 09:00 4:00 Antal uppgifter: 2 ( 30 poäng ). Examinator: Norbert Euler Tel: 0920-492878 Tillåtna hjälpmedel: Inga Betygsgränser: 4p 9p = 3; 20p 24p
Rev No. Magnetic gripper 3
Magnetic gripper 1 Magnetic gripper 2 Magnetic gripper 3 Magnetic gripper 4 Pneumatic switchable permanent magnet. A customized gripper designed to handle large objects in/out of press break/laser cutting
Solutions to exam in SF1811 Optimization, June 3, 2014
Solutions to exam in SF1811 Optimization, June 3, 14 1.(a) The considered problem may be modelled as a minimum-cost network flow problem with six nodes F1, F, K1, K, K3, K4, here called 1,,3,4,5,6, and
x 2 2(x + 2), f(x) = by utilizing the guidance given by asymptotes and stationary points. γ : 8xy x 2 y 3 = 12 x + 3
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA151 Single Variable Calculus, TEN2 Date:
Support Manual HoistLocatel Electronic Locks
Support Manual HoistLocatel Electronic Locks 1. S70, Create a Terminating Card for Cards Terminating Card 2. Select the card you want to block, look among Card No. Then click on the single arrow pointing
Grafisk teknik IMCDP. Sasan Gooran (HT 2006) Assumptions:
Grafisk teknik Sasan Gooran (HT 2006) Iterative Method Controlling Dot Placement (IMCDP) Assumptions: The original continuous-tone image is scaled between 0 and 1 0 and 1 represent white and black respectively
Theory 1. Summer Term 2010
Theory 1 Summer Term 2010 Robert Elsässer 1 Introduction Summer Term 2010 Robert Elsässer Prerequisite of Theory I Programming language, such as C++ Basic knowledge on data structures and algorithms, mathematics
This exam consists of four problems. The maximum sum of points is 20. The marks 3, 4 and 5 require a minimum
Examiner Linus Carlsson 016-01-07 3 hours In English Exam (TEN) Probability theory and statistical inference MAA137 Aids: Collection of Formulas, Concepts and Tables Pocket calculator This exam consists
Om oss DET PERFEKTA KOMPLEMENTET THE PERFECT COMPLETION 04 EN BINZ ÄR PRECIS SÅ BRA SOM DU FÖRVÄNTAR DIG A BINZ IS JUST AS GOOD AS YOU THINK 05
Om oss Vi på Binz är glada att du är intresserad av vårt support-system för begravningsbilar. Sedan mer än 75 år tillverkar vi specialfordon i Lorch för de flesta olika användningsändamål, och detta enligt
8 < x 1 + x 2 x 3 = 1, x 1 +2x 2 + x 4 = 0, x 1 +2x 3 + x 4 = 2. x 1 2x 12 1A är inverterbar, och bestäm i så fall dess invers.
MÄLARDALENS HÖGSKOLA Akademin för utbildning, kultur och kommunikation Avdelningen för tillämpad matematik Examinator: Erik Darpö TENTAMEN I MATEMATIK MAA150 Vektoralgebra TEN1 Datum: 9januari2015 Skrivtid:
Grafisk teknik. Sasan Gooran (HT 2006)
Grafisk teknik Sasan Gooran (HT 2006) Iterative Method Controlling Dot Placement (IMCDP) Assumptions: The original continuous-tone image is scaled between 0 and 1 0 and 1 represent white and black respectively
Sammanfattning hydraulik
Sammanfattning hydraulik Bernoullis ekvation Rörelsemängdsekvationen Energiekvation applikationer Rörströmning Friktionskoefficient, Moody s diagram Pumpsystem BERNOULLI S EQUATION 2 p V z H const. Quantity
Collaborative Product Development:
Collaborative Product Development: a Purchasing Strategy for Small Industrialized House-building Companies Opponent: Erik Sandberg, LiU Institutionen för ekonomisk och industriell utveckling Vad är egentligen
Kurskod: TAMS11 Provkod: TENB 28 August 2014, 08:00-12:00. English Version
Kurskod: TAMS11 Provkod: TENB 28 August 2014, 08:00-12:00 Examinator/Examiner: Xiangfeng Yang (Tel: 070 2234765) a. You are permitted to bring: a calculator; formel -och tabellsamling i matematisk statistik
Pre-Test 1: M0030M - Linear Algebra.
Pre-Test : M3M - Linear Algebra. Test your knowledge on Linear Algebra for the course M3M by solving the problems in this test. It should not take you longer than 9 minutes. M3M Problem : Betrakta fyra
Adding active and blended learning to an introductory mechanics course
Adding active and blended learning to an introductory mechanics course Ulf Gran Chalmers, Physics Background Mechanics 1 for Engineering Physics and Engineering Mathematics (SP2/3, 7.5 hp) 200+ students
Styrteknik: Binära tal, talsystem och koder D3:1
Styrteknik: Binära tal, talsystem och koder D3:1 Digitala kursmoment D1 Boolesk algebra D2 Grundläggande logiska funktioner D3 Binära tal, talsystem och koder Styrteknik :Binära tal, talsystem och koder
Tentamen i Matematik 2: M0030M.
Tentamen i Matematik 2: M0030M. Datum: 2010-01-12 Skrivtid: 09:00 14:00 Antal uppgifter: 6 ( 30 poäng ). Jourhavande lärare: Norbert Euler Telefon: 0920-492878 Tillåtna hjälpmedel: Inga Till alla uppgifterna
Webbregistrering pa kurs och termin
Webbregistrering pa kurs och termin 1. Du loggar in på www.kth.se via den personliga menyn Under fliken Kurser och under fliken Program finns på höger sida en länk till Studieöversiktssidan. På den sidan
Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering
KTH Matematik Tentamen del 2 SF1511, 2018-03-16, kl 8.00-11.00, Numeriska metoder och grundläggande programmering Del 2, Max 50p + bonuspoäng (max 4p). Rättas ast om del 1 är godkänd. Betygsgränser inkl
A study of the performance
A study of the performance and utilization of the Swedish railway network Anders Lindfeldt Royal Institute of Technology 2011-02-03 Introduction The load on the railway network increases steadily, and
KTH MMK JH TENTAMEN I HYDRAULIK OCH PNEUMATIK allmän kurs 2006-12-18 kl 09.00 13.00
KTH MMK JH TENTAMEN I HYDRAULIK OCH PNEUMATIK allmän kurs 2006-12-18 kl 09.00 13.00 Svaren skall vara läsligt skrivna och så uppställda att lösningen går att följa. När du börjar på en ny uppgift - tag
Viktig information för transmittrar med option /A1 Gold-Plated Diaphragm
Viktig information för transmittrar med option /A1 Gold-Plated Diaphragm Guldplätering kan aldrig helt stoppa genomträngningen av vätgas, men den får processen att gå långsammare. En tjock guldplätering
Thesis work at McNeil AB Evaluation/remediation of psychosocial risks and hazards.
Evaluation/remediation of psychosocial risks and hazards. Help us to create the path forward for managing psychosocial risks in the work environment by looking into different tools/support/thesis and benchmarking
2(x + 1) x f(x) = 3. Find the area of the surface generated by rotating the curve. y = x 3, 0 x 1,
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA5 Single Variable Calculus, TEN Date: 06--0
Rastercell. Digital Rastrering. AM & FM Raster. Rastercell. AM & FM Raster. Sasan Gooran (VT 2007) Rastrering. Rastercell. Konventionellt, AM
Rastercell Digital Rastrering Hybridraster, Rastervinkel, Rotation av digitala bilder, AM/FM rastrering Sasan Gooran (VT 2007) Önskat mått * 2* rastertätheten = inläsningsupplösning originalets mått 2
Boiler with heatpump / Värmepumpsberedare
Boiler with heatpump / Värmepumpsberedare QUICK START GUIDE / SNABBSTART GUIDE More information and instruction videos on our homepage www.indol.se Mer information och instruktionsvideos på vår hemsida
The Finite Element Method, FHL064
The Finite Element Method, FHL064 Division of Solid Mechanics Course program, vt2, 20 Course description The finite element method (FEM) is a numerical method able to solve differential equations, i.e.
Kurskod: TAMS11 Provkod: TENB 07 April 2015, 14:00-18:00. English Version
Kurskod: TAMS11 Provkod: TENB 07 April 2015, 14:00-18:00 Examiner: Xiangfeng Yang (Tel: 070 2234765). Please answer in ENGLISH if you can. a. You are allowed to use: a calculator; formel -och tabellsamling
Kurskod: TAMS28 MATEMATISK STATISTIK Provkod: TEN1 05 June 2017, 14:00-18:00. English Version
Kurskod: TAMS28 MATEMATISK STATISTIK Provkod: TEN1 5 June 217, 14:-18: Examiner: Zhenxia Liu (Tel: 7 89528). Please answer in ENGLISH if you can. a. You are allowed to use a calculator, the formula and
Scalable Dynamic Analysis of Binary Code
Linköping Studies in Science and Technology Dissertations, No. 1993 Ulf Kargén FACULTY OF SCIENCE AND ENGINEERING Linköping Studies in Science and Technology, Dissertations, No. 1993, 2019 Department of
1. Find the volume of the solid generated by rotating the circular disc. x 2 + (y 1) 2 1
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA11 Single Variable Calculus, TEN Date:
2.1 Installation of driver using Internet Installation of driver from disk... 3
&RQWHQW,QQHKnOO 0DQXDOÃ(QJOLVKÃ'HPRGULYHU )RUHZRUG Ã,QWURGXFWLRQ Ã,QVWDOOÃDQGÃXSGDWHÃGULYHU 2.1 Installation of driver using Internet... 3 2.2 Installation of driver from disk... 3 Ã&RQQHFWLQJÃWKHÃWHUPLQDOÃWRÃWKHÃ3/&ÃV\VWHP
f(x) =, x 1 by utilizing the guidance given by asymptotes and stationary points. cos(x) sin 3 (x) e sin2 (x) dx,
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA151 Single Variable Calculus, TEN2 Date:
http://marvel.com/games/play/31/create_your_own_superhero http://www.heromachine.com/
Name: Year 9 w. 4-7 The leading comic book publisher, Marvel Comics, is starting a new comic, which it hopes will become as popular as its classics Spiderman, Superman and The Incredible Hulk. Your job
Schenker Privpak AB Telefon 033-178300 VAT Nr. SE556124398001 Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr 033-257475 Säte: Borås
Schenker Privpak AB Interface documentation for web service packageservices.asmx 2010-10-21 Version: 1.2.2 Doc. no.: I04304 Sida 2 av 14 Revision history Datum Version Sign. Kommentar 2010-02-18 1.0.0
Resultat av den utökade första planeringsövningen inför RRC september 2005
Resultat av den utökade första planeringsövningen inför RRC-06 23 september 2005 Resultat av utökad första planeringsövning - Tillägg av ytterligare administrativa deklarationer - Variant (av case 4) med
denna del en poäng. 1. (Dugga 1.1) och v = (a) Beräkna u (2u 2u v) om u = . (1p) och som är parallell
Kursen bedöms med betyg, 4, 5 eller underänd, där 5 är högsta betyg. För godänt betyg rävs minst 4 poäng från uppgifterna -7. Var och en av dessa sju uppgifter an ge maximalt poäng. För var och en av uppgifterna
FÖRBERED UNDERLAG FÖR BEDÖMNING SÅ HÄR
FÖRBERED UNDERLAG FÖR BEDÖMNING SÅ HÄR Kontrollera vilka kurser du vill söka under utbytet. Fyll i Basis for nomination for exchange studies i samråd med din lärare. För att läraren ska kunna göra en korrekt
SVENSK STANDARD SS-EN ISO 19108:2005/AC:2015
SVENSK STANDARD SS-EN ISO 19108:2005/AC:2015 Fastställd/Approved: 2015-07-23 Publicerad/Published: 2016-05-24 Utgåva/Edition: 1 Språk/Language: engelska/english ICS: 35.240.70 Geografisk information Modell
Find an equation for the tangent line τ to the curve γ : y = f(4 sin(xπ/6)) at the point P whose x-coordinate is equal to 1.
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA5 Single Variable Calculus, TEN Date: 207--06
1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)
Tentamen i Programmeringsteori Institutionen for datorteknik Uppsala universitet 1996{08{14 Larare: Parosh A. A., M. Kindahl Plats: Polacksbacken Skrivtid: 9 15 Hjalpmedel: Inga Anvisningar: 1. Varje bevissteg
F ξ (x) = f(y, x)dydx = 1. We say that a random variable ξ has a distribution F (x), if. F (x) =
Problems for the Basic Course in Probability (Fall 00) Discrete Probability. Die A has 4 red and white faces, whereas die B has red and 4 white faces. A fair coin is flipped once. If it lands on heads,
(D1.1) 1. (3p) Bestäm ekvationer i ett xyz-koordinatsystem för planet som innehåller punkterna
Högsolan i Sövde (SK) Tentamen i matemati Kurs: MA4G Linjär algebra MAG Linjär algebra för ingenjörer Tentamensdag: 4-8-6 l 4.-9. Hjälpmedel : Inga hjälpmedel utöver bifogat formelblad. Ej ränedosa. Tentamen
S 1 11, S 2 9 and S 1 + 2S 2 32 E S 1 11, S 2 9 and 33 S 1 + 2S 2 41 D S 1 11, S 2 9 and 42 S 1 + 2S 2 51 C 52 S 1 + 2S 2 60 B 61 S 1 + 2S 2 A
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA151 Single Variable Calculus, TEN1 Date:
Make a speech. How to make the perfect speech. söndag 6 oktober 13
Make a speech How to make the perfect speech FOPPA FOPPA Finding FOPPA Finding Organizing FOPPA Finding Organizing Phrasing FOPPA Finding Organizing Phrasing Preparing FOPPA Finding Organizing Phrasing
Isolda Purchase - EDI
Isolda Purchase - EDI Document v 1.0 1 Table of Contents Table of Contents... 2 1 Introduction... 3 1.1 What is EDI?... 4 1.2 Sending and receiving documents... 4 1.3 File format... 4 1.3.1 XML (language
Examensarbete Introduk)on - Slutsatser Anne Håkansson annehak@kth.se Studierektor Examensarbeten ICT-skolan, KTH
Examensarbete Introduk)on - Slutsatser Anne Håkansson annehak@kth.se Studierektor Examensarbeten ICT-skolan, KTH 2016 Anne Håkansson All rights reserved. Svårt Harmonisera -> Introduktion, delar: Fråga/
Module 4 Applications of differentiation
Department of mathematics SF1625 Calculus 1 Year 2015/2016 Module 4 Applications of differentiation Chapter 4 of Calculus by Adams and Essex. Three lectures, two tutorials, one seminar. Important concepts.
Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås
Schenker Privpak AB Interface documentation for web service packageservices.asmx 2012-09-01 Version: 1.0.0 Doc. no.: I04304b Sida 2 av 7 Revision history Datum Version Sign. Kommentar 2012-09-01 1.0.0
Gradientbaserad Optimering,
Gradientbaserad Optimering, Produktfamiljer och Trinitas Hur att sätta upp ett optimeringsproblem? Vad är lämpliga designvariabler x? Tjockleksvariabler (sizing) Tvärsnittsarean hos stänger Längdmått hos
and u = och x + y z 2w = 3 (a) Finn alla lösningar till ekvationssystemet
Kursen bedöms med betyg,, 5 eller underkänd, där 5 är högsta betyg. För godkänt betyg krävs minst poäng från uppgifterna -7. Var och en av dessa sju uppgifter kan ge maximalt poäng. För var och en av uppgifterna
Mönster. Ulf Cederling Växjö University Ulf.Cederling@msi.vxu.se http://www.msi.vxu.se/~ulfce. Slide 1
Mönster Ulf Cederling Växjö University UlfCederling@msivxuse http://wwwmsivxuse/~ulfce Slide 1 Beskrivningsmall Beskrivningsmallen är inspirerad av den som användes på AG Communication Systems (AGCS) Linda
State Examinations Commission
State Examinations Commission Marking schemes published by the State Examinations Commission are not intended to be standalone documents. They are an essential resource for examiners who receive training
Pedagogisk planering. Ron Chlebek. Centralt Innehåll. Svenska/Engelska. Lego Mindstorms. Syfte: Matematik
Pedagogisk planering Ron Chlebek Lego Mindstorms Åk 5 har programmerat tidigare i Scratch, Microbit och Code.org. Vi har börjat skolåret med att packa upp och bygga basmodel. Eleverna kommer att arbeta
En bild säger mer än tusen ord?
Faculteit Letteren en Wijsbegeerte Academiejaar 2009-2010 En bild säger mer än tusen ord? En studie om dialogen mellan illustrationer och text i Tiina Nunnallys engelska översättning av Pippi Långstrump
Senaste trenderna från testforskningen: Passar de industrin? Robert Feldt,
Senaste trenderna från testforskningen: Passar de industrin? Robert Feldt, robert.feldt@bth.se Vad är på gång i forskningen? (ICST 2015 & 2016) Security testing Mutation testing GUI testing Model-based
Swedish adaptation of ISO TC 211 Quality principles. Erik Stenborg
Swedish adaptation of ISO TC 211 Quality principles The subject How to use international standards Linguistic differences Cultural differences Historical differences Conditions ISO 19100 series will become
2. Förklara vad en egenfrekvens är. English: Explain what en eigenfrequency is.
Linköpings Universitet, Hållfasthetslära, IEI/IKP TENTAMEN i Mekaniska svängningar och utmattning, TMMI09 2007-10-16 kl 14-18 L Ö S N I N G A R ---- SOLUTIONS 1. Ange sambanden mellan vinkelfrekvens ω,
Chapter 2: Random Variables
Chapter 2: Random Variables Experiment: Procedure + Observations Observation is an outcome Assign a number to each outcome: Random variable 1 Three ways to get an rv: Random Variables The rv is the observation
Självkörande bilar. Alvin Karlsson TE14A 9/3-2015
Självkörande bilar Alvin Karlsson TE14A 9/3-2015 Abstract This report is about driverless cars and if they would make the traffic safer in the future. Google is currently working on their driverless car
Writing with context. Att skriva med sammanhang
Writing with context Att skriva med sammanhang What makes a piece of writing easy and interesting to read? Discuss in pairs and write down one word (in English or Swedish) to express your opinion http://korta.nu/sust(answer
1. Find for each real value of a, the dimension of and a basis for the subspace
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA53 Linear Algebra Date: 208-0-09 Write
S 1 11, S 2 9 and S 1 + 2S 2 32 E S 1 11, S 2 9 and 33 S 1 + 2S 2 41 D S 1 11, S 2 9 and 42 S 1 + 2S 2 51 C 52 S 1 + 2S 2 60 B 61 S 1 + 2S 2 A
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA151 Single Variable Calculus, TEN Date:
DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15
DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION 120607 08:15-13: 15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition En ordbok: studentenshemspråk engelska Betygsgräns:
S 1 11, S 2 9 and S 1 + 2S 2 32 E S 1 11, S 2 9 and 33 S 1 + 2S 2 41 D S 1 11, S 2 9 and 42 S 1 + 2S 2 51 C 52 S 1 + 2S 2 60 B 61 S 1 + 2S 2 A
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA151 Single Variable Calculus, TEN2 Date:
Examensarbete i matematik på grundnivå med inriktning mot optimeringslära och systemteori
Examensarbete i matematik på grundnivå med inriktning mot optimeringslära och systemteori (kurskod SA104X, 15hp, VT15) http://www.math.kth.se/optsyst/grundutbildning/kex/ Förkunskaper Det är ett krav att
How to format the different elements of a page in the CMS :
How to format the different elements of a page in the CMS : 1. Typing text When typing text we have 2 possible formats to start a new line: Enter - > is a simple line break. In a paragraph you simply want
f(x) = x2 + 4x + 6 x 2 4 by utilizing the guidance given by asymptotes and stationary points.
MÄLARDALEN UNIVERSITY School of Education, Culture and Communication Department of Applied Mathematics Examiner: Lars-Göran Larsson EXAMINATION IN MATHEMATICS MAA5 Single Variable Calculus, TEN2 Date:
Problem som kan uppkomma vid registrering av ansökan
Problem som kan uppkomma vid registrering av ansökan Om du har problem med din ansökan och inte kommer vidare kan det bero på det som anges nedan - kolla gärna igenom detta i första hand. Problem vid registrering
Mekanik FK2002m. Kraft och rörelse II
Mekanik FK2002m Föreläsning 5 Kraft och rörelse II 2013-09-06 Sara Strandberg SARA STRANDBERG P. 1 FÖRELÄSNING 5 Introduktion Vi har hittills behandlat ganska idealiserade problem, t.ex. system i avsaknad
Högskolan i Skövde (SK, JS) Svensk version Tentamen i matematik
Högskolan i Skövde (SK, JS) Svensk version Tentamen i matematik Kurs: MA152G Matematisk Analys MA123G Matematisk analys för ingenjörer Tentamensdag: 2012-03-24 kl 14.30-19.30 Hjälpmedel : Inga hjälpmedel
Algoritmer och Komplexitet ht 08. Övning 6. NP-problem
Algoritmer och Komplexitet ht 08. Övning 6 NP-problem Frekvensallokering Inom mobiltelefonin behöver man lösa frekvensallokeringsproblemet som lyder på följande sätt. Det finns ett antal sändare utplacerade.
Hur fattar samhället beslut när forskarna är oeniga?
Hur fattar samhället beslut när forskarna är oeniga? Martin Peterson m.peterson@tue.nl www.martinpeterson.org Oenighet om vad? 1.Hårda vetenskapliga fakta? ( X observerades vid tid t ) 1.Den vetenskapliga
Technique and expression 3: weave. 3.5 hp. Ladokcode: AX1 TE1 The exam is given to: Exchange Textile Design and Textile design 2.
Technique and expression 3: weave 3.5 hp Ladokcode: AX1 TE1 The exam is given to: Exchange Textile Design and Textile design 2 ExamCode: February 15 th 9-13 Means of assistance: Calculator, colorpencils,
Ett hållbart boende A sustainable living. Mikael Hassel. Handledare/ Supervisor. Examiner. Katarina Lundeberg/Fredric Benesch
Ett hållbart boende A sustainable living Mikael Hassel Handledare/ Supervisor Examinator/ Examiner atarina Lundeberg/redric Benesch Jes us Azpeitia Examensarbete inom arkitektur, grundnivå 15 hp Degree
FORTA M315. Installation. 218 mm.
1 Installation 2 1 2 1 218 mm. 1 2 4 5 6 7 8 9 2 G, G0= Max 100 m 1.5 mm² (AWG 15) X1, MX, Y, VH, VC = Max 200 m 0.5 mm² (AWG 20) Y X1 MX VH VC G1 G0 G 0 V 24 V~ IN 0-10 0-5, 2-6 60 s OP O 1 2 4 5 6 7
Klicka här för att ändra format
på 1 på Marianne Andrén General Manager marianne.andren@sandviken.se Sandbacka Park Högbovägen 45 SE 811 32 Sandviken Telephone: +46 26 24 21 33 Mobile: +46 70 230 67 41 www.isea.se 2 From the Off e project
PORTSECURITY IN SÖLVESBORG
PORTSECURITY IN SÖLVESBORG Kontaktlista i skyddsfrågor / List of contacts in security matters Skyddschef/PFSO Tord Berg Phone: +46 456 422 44. Mobile: +46 705 82 32 11 Fax: +46 456 104 37. E-mail: tord.berg@sbgport.com
INDUKTIV SLINGDETEKTOR INDUCTIVE LOOP DETECTOR
INDUKTIV SLINGDETEKTOR INDUCTIVE LOOP DETECTOR Slingdetektorn används som ett alternativ till mekaniska gränslägen, momentbrytare eller annat gränsläge i gödselrännor. Detektorn är kopplad till en trådslinga
FYTA11-ma1, ht13. Respondents: 11 Answer Count: 9 Answer Frequency: 81,82 %
FYTA11-ma1, ht13 Respondents: 11 Answer Count: 9 Answer Frequency: 81,82 % General opinion Give your opinion in the scale 1-5. 1 = very negative 2 = negative 3 = neutral 4 = positive 5 = very positive
Installation av F13 Bråvalla
Website: http://www.rbdesign.se Installation av F13 Bråvalla RBDESIGN FREEWARE - ESCK Norrköping-Bråvalla 1. Ladda ner och packa upp filerna i en mapp som du har skapat på ett lättöverskådligt ställe utanför
Custom-made software solutions for increased transport quality and creation of cargo specific lashing protocols.
Custom-made software solutions for increased transport quality and creation of cargo specific lashing protocols. ExcelLoad simulates the maximum forces that may appear during a transport no matter if the
Annonsformat desktop. Startsida / områdesstartsidor. Artikel/nyhets-sidor. 1. Toppbanner, format 1050x180 pxl. Format 1060x180 px + 250x240 pxl.
Annonsformat desktop Startsida / områdesstartsidor 1. Toppbanner, format 1050x180 pxl. Bigbang (toppbanner + bannerplats 2) Format 1060x180 px + 250x240 pxl. 2. DW, format 250x240 pxl. 3. TW, format 250x360
Semantic and Physical Modeling and Simulation of Multi-Domain Energy Systems: Gas Turbines and Electrical Power Networks
DEGREE PROJECT IN ELECTRICAL ENGINEERING, SECOND CYCLE, 30 CREDITS STOCKHOLM, SWEDEN 2017 Semantic and Physical Modeling and Simulation of Multi-Domain Energy Systems: Gas Turbines and Electrical Power
Föreläsning 8. Designmönster
Föreläsning 8 Designmönster Designmönster När man designar program kan det vara viktigt att förstå hur man tidigare gått till väga när man konstruerat program. Kännedom om dessa tillvägagångssätt kan snabba
- den bredaste guiden om Mallorca på svenska! -
- den bredaste guiden om Mallorca på svenska! - Driver du företag, har en affärsrörelse på Mallorca eller relaterad till Mallorca och vill nå ut till våra läsare? Då har du möjlighet att annonsera på Mallorcaguide.se
Webbreg öppen: 26/ /
Webbregistrering pa kurs, period 2 HT 2015. Webbreg öppen: 26/10 2015 5/11 2015 1. Du loggar in på www.kth.se via den personliga menyn Under fliken Kurser och under fliken Program finns på höger sida en