Łukasz Wany Program do konwersji obrazu na cig zero-jedynkowy Wstp Budujc sie neuronow do kompresji znaków, na samym pocztku zmierzylimy si z problemem przygotowywania danych do nauki sieci. Przyjlimy, e akceptowaln wielkoci obszaru na którym mona wyrysowa wikszo znaków to ok. 10x10 pikseli. Mniejsze obrazy powoduj czasami znaczne ich zniekształcenie, co ilustruj ponisze rysunki. Rys.1. Matryce znakowe Na Rys.1. przedstawione s obrazy o wielkoci 6 x 6 px, 8 x 8 px, 10 x 10 px, 12 x 12 px w powikszeniu 1000%. Jak wida dopiero na bitmapie o wymiarze 10 x 10 px (trzecia od lewej) przedstawiony jest rozpoznawalny. Format pliku SNN Statistica Neural Networks ma moliwo wczytania danych z pliku w formacie Excel i kliku rodzajów plików tekstowych, niemoliwe jest wic korzystanie bezporednio z plików graficznych jako ródła danych. W pewnym zakresie moe posłuy nam program Excel, jeli odpowiednio
zaprojektujemy arkusz, to jest moliwe tworzenie prostych zbiorów danych. Naley jednak zaznaczy, e jeli chcemy uczy sie neuronow rozpoznawania, czy kompresji obrazu o wielkoci 10 x 10 px to pojedynczy wektor wejciowy bdzie posiadał 100 współrzdnych. Poniej, na Rys.2. po prawej przedstawiona jest litera a, natomiast po lewej przedstawiona jest ta sama litera ale w swej reprezentacji zerojedynkowej. Taki przestrzenny układ zer i jedynek musi zosta przekształcony na cig zerojedynkowy. 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 Rys.2. Sposób kodowania znaków Reprezentacja litery a po przekształceniu stanowi cig: 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 Rys.3. Reprezentacja binarna litery a Jak mona sobie wyobrazi, stworzenie takiego cigu zer i jedynek jak na Rys.2. po lewej, moe by do czasochłonne. Stworzenie typowego zbioru uczcego, o liczebnoci 70-300 elementów, stanowi moe powane ograniczenie w badaniach. Aby ułatwi przekształcanie znaków (liter) na zbiór, który mona wczyta do programu SNN, został napisany niej zaprezentowany program. Program został napisany w jzyku Delphi 7. Moliwoci programu Program przekształca obraz bitowy w cig zerojedynkowy. Mona nim równie konwertowa nie tylko bitmapy zawierajce litery, ale take proste piktogramy. Ograniczeniem jest rozpoznawalno znaku dla okrelonej matrycy. Na Rys.4. zaprezentowany jest interfejs uytkownika. Umoliwia on narysowanie znaku na matrycy o ustalonych wymiarach. Moliwe jest ustawienie kroju, pogrubienia i pochylenia czcionki. Mona te przesun obraz w pionie lub poziomie. Program pozwala take na prost edycj obrazu
klikajc na powikszonym obrazie stawiamy czarny piksel, natomiast uywajc prawego klawisza myszy wycieramy czarne piksele. Rys.4. Interfejs uytkownika W drugim oknie programu (Rys.5.) moemy edytowa zbiór wzorców. Program umoliwia zarówno zapis jak i wczytanie pliku tekstowego. Zapisany plik moe posłuy jako zbiór wzorców uczcych do programu SNN. Rys.5. Okno edycji wzorca
Kodowanie bitmapy Konwersja obrazu na cig zero-jedynkowy odbywa si poprzez sprawdzenie z wykorzystaniem instrukcji warunkowej if wszystkich pikseli, z których składa si obraz. Dla białego koloru program przyjmuje warto zero, a dla koloru czarnego warto jeden. Ponisza procedura odpowiedzialna jest za konwersj obrazu: procedure Tform1.koduj; var line: string; separator:string; x,y:integer; separator:= chr($09); line:=''; for y:=0 to wy-1 do for x:=0 to wx-1 do line:=line+konwersja_pixela(bmp_source.canvas.pixels[x,y])+separator; dane.add(line); index:=dane.count-1; Dekodowanie Drug wan procedur w programie jest ponowna konwersja, ale ju z cigu tekstowego na obraz. Tym razem jest ona przeprowadzana znak po znaku: procedure Tform2.dekoduj; var line, s, separator:: string; x,y,i,j:integer; pobierz_wartosci; separator:= chr($09); line:=''; i:=1; x:=1; y:=1; if dane.count>0 then memo1.clear; memo1.lines.add(dane[index]); s:=dane[index]; while i<= length(s) do if s[i] <> chr($09) then if s[i] = '1' then image1.canvas.pixels[x,y] := clblack else image1.canvas.pixels[x,y] := clwhite; inc(x); if x > form2wx then x:=1; inc(y);
inc(i); Podsumowanie Kierunek rozwoju programu na pewno jest zwizany z badaniami nad rozpoznawaniem znaków czy ich kompresj. W obecnym kształcie program pracuje na obrazach dwukolorowych czarno-białych. Naturalnym kierunkiem rozwoju programu, moe by modyfikacja istniejcych procedur, tak aby moliwa była praca nad kolorowymi obrazami. Aktualnie program kodujc dwa kolory uywa dwóch wartoci do ich reprezentacji: zera dla koloru białego i jedynki dla koloru czarnego. Sieci neuronowe mog uczy si równie na wartociach z przedziału od zera do jeden, te wartoci mona wykorzysta to zakodowania odcieni szaroci, bd barwy (Hue). Innym niezwykle ciekawym kierunkiem rozwoju moe by rozszerzenie programu o kodowanie obrazów w przestrzeni wielowymiarowej. Literatura 1. Tomasz Bajorek, Zbigniew Omiotek, Borland Delphi. Podstawy programowania obiektowego. wiczenia laboratoryjne, Wyd. Wysza Szkoła Zarzdzania i Administracji, Zamo 2002 2. Adam Boduch, Delphi 7, Kompendium programisty 2003 Helion 3. Ray Lischner, Delphi. Almanach, 2002 4. Jan Biernat, Delphi 7 t.1, MIKOM, Rok wydania: 200 5. Krzysztof Walczak, Anna Strudziska-Walczak, Nauka programowania w systemie Delphi W&W, 2002