Program do konwersji obrazu na ciąg zero
Transkrypt
Program do konwersji obrazu na ciąg zero
Łukasz Wa ny Program do konwersji obrazu na ci g zero-jedynkowy Wst p Buduj c sie neuronow do kompresji znaków, na samym pocz tku zmierzyli my si z problemem przygotowywania danych do nauki sieci. Przyj li my, e akceptowaln wielko ci obszaru na którym mo na wyrysowa wi kszo znaków to ok. 10x10 pikseli. Mniejsze obrazy powoduj czasami znaczne ich zniekształcenie, co ilustruj poni sze rysunki. Rys.1. Matryce znakowe Na Rys.1. przedstawione s obrazy o wielko ci 6 x 6 px, 8 x 8 px, 10 x 10 px, 12 x 12 px w powi kszeniu 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 mo liwo wczytania danych z pliku w formacie Excel i kliku rodzajów plików tekstowych, niemo liwe jest wi c korzystanie bezpo rednio z plików graficznych jako ródła danych. W pewnym zakresie mo e posłu y nam program Excel, je li odpowiednio zaprojektujemy arkusz, to jest mo liwe tworzenie prostych zbiorów danych. e je li chcemy uczy sie neuronow Nale y jednak zaznaczy , rozpoznawania, czy kompresji obrazu o wielko ci 10 x 10 px to pojedynczy wektor wej ciowy b dzie posiadał 100 współrz dnych. Poni ej, 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 ci g zerojedynkowy. 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 10 01 00 00 00 00 00 10 01 11 01 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Rys.2. Sposób kodowania znaków Reprezentacja litery „a” po przekształceniu stanowi ci g: 000000000000000000000000000000000110000000000100000 0 011100000010010000000111000000000000000000000000 Rys.3. Reprezentacja binarna litery „a” Jak mo na sobie wyobrazi , stworzenie takiego ci gu zer i jedynek jak na Rys.2. po lewej, mo e by do czasochłonne. Stworzenie typowego zbioru ucz cego, o liczebno ci 70-300 elementów, stanowi mo e powa ne ograniczenie w badaniach. Aby ułatwi przekształcanie znaków (liter) na zbiór, który mo na wczyta do programu SNN, został napisany ni ej zaprezentowany program. Program został napisany w j zyku Delphi 7. Mo liwo ci programu Program przekształca obraz bitowy w ci g zerojedynkowy. Mo na nim równie konwertowa nie tylko bitmapy zawieraj ce litery, ale tak e proste piktogramy. Ograniczeniem jest rozpoznawalno znaku dla okre lonej matrycy. Na Rys.4. zaprezentowany jest interfejs u ytkownika. Umo liwia on narysowanie znaku na matrycy o ustalonych wymiarach. Mo liwe jest ustawienie kroju, pogrubienia i pochylenia czcionki. Mo na te przesun obraz w pionie lub poziomie. Program pozwala tak e na prost edycj obrazu – klikaj c na powi kszonym obrazie stawiamy czarny piksel, natomiast u ywaj c prawego klawisza myszy „wycieramy” czarne piksele. Rys.4. Interfejs u ytkownika W drugim oknie programu (Rys.5.) mo emy edytowa zbiór wzorców. Program umo liwia zarówno zapis jak i wczytanie pliku tekstowego. Zapisany plik mo e posłu y jako zbiór wzorców ucz cych do programu SNN. Rys.5. Okno edycji wzorca Kodowanie bitmapy Konwersja obrazu na ci g 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”. Poni sza procedura odpowiedzialna jest za konwersj obrazu: procedure Tform1.koduj; var line: string; separator:string; x,y:integer; begin separator:= chr($09); line:=''; for y:=0 to wy-1 do for x:=0 to wx-1 do begin line:=line+konwersja_pixela(bmp_source.Canvas.Pixels[x,y])+separator; end; dane.Add(line); index:=dane.Count-1; end; Dekodowanie Drug wa n procedur w programie jest ponowna konwersja, ale ju z ci gu tekstowego na obraz. Tym razem jest ona przeprowadzana znak po znaku: procedure Tform2.dekoduj; var line, s, separator:: string; x,y,i,j:integer; begin pobierz_wartosci; separator:= chr($09); line:=''; i:=1; x:=1; y:=1; if dane.Count>0 then begin memo1.Clear; memo1.Lines.Add(dane[index]); s:=dane[index]; while i<= length(s) do begin if s[i] <> chr($09) then begin if s[i] = '1' then image1.Canvas.Pixels[x,y] := clblack else image1.Canvas.Pixels[x,y] := clwhite; inc(x); if x > form2wx then begin x:=1; inc(y); end; end; inc(i); end; end; end; Podsumowanie Kierunek rozwoju programu na pewno jest zwi zany 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, mo e by modyfikacja istniej cych procedur, tak aby mo liwa była praca nad kolorowymi obrazami. Aktualnie program koduj c dwa kolory u ywa dwóch warto ci do ich reprezentacji: „zera” dla koloru białego i „jedynki” dla koloru czarnego. Sieci neuronowe mog uczy si równie na warto ciach z przedziału od zera do jeden, te warto ci mo na wykorzysta to zakodowania odcieni szaro ci, b d barwy (Hue). Innym niezwykle ciekawym kierunkiem rozwoju mo e by rozszerzenie programu o kodowanie obrazów w przestrzeni wielowymiarowej. Literatura 1. Tomasz Bajorek, Zbigniew Omiotek, Borland Delphi. Podstawy programowania obiektowego. wiczenia laboratoryjne, Wyd. Wy sza Szkoła Zarz dzania 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 Strudzi ska-Walczak, Nauka programowania w systemie Delphi W&W, 2002