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