• Nie Znaleziono Wyników

Detekcja ruchomych obiektów za pomoc ˛ a algorytmu przybli ˙zonej me-

5.3 Implementacja wybranych algorytmów przetwarzania obrazów

5.3.2 Detekcja ruchomych obiektów za pomoc ˛ a algorytmu przybli ˙zonej me-

algo-rytmu opisano ze szczegółami w rozdziale 4.2.

System bazuje na opisanej wcze´sniej architekturze kamery inteligentnej (5.2) i mo ˙ze współ-pracowa´c z obrazami pozyskiwanymi bezpo´srednio z sensora wizyjnego lub korzysta´c z danych zawartych w pami˛eci zewn˛etrznej. Ogólny schemat blokowy przedstawiono na ry-sunku 5.4. Nale ˙zy zwróci´c uwag˛e, ˙ze na schemacie przedstawiono tylko cz˛e´s´c programo-waln ˛a układu, jako, ˙ze struktura podsystemu procesorowego nie ulega zmianie.

Zadania realizowane przez opracowany system zostały rozdzielone pomi˛edzy dedyko-wane moduły sprz˛etowe. Dotyczy to operacji wykrywania ruchomych cz˛e´sci obrazu oraz aktualizacji modelu tła. Procesor ogólnego przeznaczenia realizuje operacja detekcji obiek-tów.

Strumie ´n danych wej´sciowych stanowi ˛a obrazy wysokiej rozdzielczo´sci (1920 × 1080), co uniemo ˙zliwia przechowywanie ich w pami˛eci logiki programowalnej układu, w zwi ˛azku z czym wykorzystano zewn˛etrzny moduł pami˛eci DDR RAM. Zgodnie z zaproponowan ˛a or-ganizacj ˛a systemu pami˛e´c ta jest dost˛epna dla wszystkich jednostek wykonawczych w sys-temie, czyli zarówno dla akceleratorów sprz˛etowych oraz procesorów ogólnego przezna-czenia. W obu przypadkach wykorzystywane s ˛a moduły DMA do przyspieszenia operacji przesyłania danych z/do pami˛eci zewn˛etrznej.

Rysunek 5.4: Schemat blokowy systemu realizuj ˛acego operacj˛e wykrywania oraz ´sledzenia ruchomych obiektów

Schemat blokowy sprz˛etowego koprocesora przedstawiono na rysunku 5.5. Koprocesor na wej´sciu przyjmuje dwa strumienie obrazów i przetwarza je piksel po pikselu. Aktualny obraz wej´sciowy It oraz model tła z poprzedniego kroku Bt−1 s ˛a od siebie odejmowane, a nast˛epnie poddawane dodatkowemu przetwarzaniu, na które składa si˛e operacja filtracji filtrem Gaussa oraz operacja morfologiczna dylacji. Ostatnim krokiem jest progowanie. Na schemacie dla czytelno´sci pomini˛eto moduły organizuj ˛ace dane, opisane szczerzej w roz-dziale 5.3.1. S ˛a one niezb˛edne, gdy ˙z zarówno operacja filtracji jak i dylacji s ˛a wykonywane na pewnym obszarze i wymagaj ˛a wcze´sniejszego uformowania odpowiedniego okna.

Wspomniane operacje filtracji s ˛a tu wykonywane w kwadratowym oknie o rozmiarze 3 × 3 piksele. Schemat blokowy modułu realizuj ˛acego operacj˛e filtracji Gaussa przedsta-wiono na rysunku 5.6. Nale ˙zy zwróci´c uwag˛e, ˙ze jest to aproksymacja filtru (równanie 5.2). Zastosowano przybli ˙zenie pozwalaj ˛ace zaimplementowa´c operacj˛e splotu z wykorzy-staniem przesuni˛ecia bitowego zamiast mno ˙zenia oraz dzielenia, co skutkuje bardzo małym zu ˙zyciem zasobów, przy zachowaniu zadowalaj ˛acej jako´sci filtracji.

H = 1 16

1 2 1 2 4 2 1 2 1

(5.2)

Operacja morfologiczna dylacji dla obrazu w skali szaro´sci wymaga jedynie zamiany jasno´sci piksela analizowanego przez warto´s´c maksymaln ˛a jasno´sci w analizowanym ob-szarze o okre´slonym kształcie i rozmiarze. W przypadku zastosowanego algorytmu przy-bli ˙zonej mediany wykonywana jest ona w kwadratowym s ˛asiedztwie o rozmiarze 3×3 (5.6).

Rysunek 5.5: Schemat blokowy koprocesora sprz˛etowego realizuj ˛acego operacj˛e wykrywa-nia ruchomych obiektów

Rysunek 5.6: Schemat blokowy modułu implementuj ˛acego filtr Gaussa

Podobnie jak w przypadku bloku filtracji Gaussa, moduł dylacji jest kompatybilny poto-kow ˛a architektur ˛a. Składaj ˛ac podstawowe operacje jak na rysunku 5.7 mo ˙zliwe jest znale-zienie najwi˛ekszej warto´sci w obszarze 3 × 3.

Rysunek 5.7: Schemat blokowy zaimplementowanej operacji dylacji w oknie 3 × 3 5.3.3 Detektor FAST oraz deskryptor BRIEF cech punktowych

W rozdziale przedstawiono implementacj˛e systemu wbudowanego realizuj ˛acego operacje detekcji, deskrypcji i dopasowanie cech punktowych. System bazuje na detektorze cech punktowych FAST oraz deskryptorze BRIEF, których zasad˛e działania, przykładowe wyniki przedstawiono w rozdziale 4.3. Proponowane rozwi ˛azanie umo ˙zliwia znalezienie odpowia-daj ˛acych sobie punktów na kolejnych obrazach danej sceny bazuj ˛ac na danych napływaj ˛ a-cych z zewn˛etrznego sensora lub pami˛eci z pr˛edko´sci ˛a kilkuset klatek na sekund˛e, a tym samym sprosta´c nawet najbardziej wymagaj ˛acym aplikacjom.

Cechy szczególne proponowanego rozwi ˛azanie:

• implementacja pełnego, kompaktowego, parametryzowanego potoku przetwarzania obrazu do detekcji, deskrypcji i dopasowania w układzie reprogramowalnym,

• wykorzystanie standardowych, wydajnych interfejsów opartych o protokół AMBA AXI4 oraz przesyłanie danych poprzez dedykowane bloki DMA umo ˙zliwia łatw ˛a in-tegracj˛e z innymi systemami,

• mo ˙zliwo´s´c dostosowania do wymaga ´n aplikacji dzi˛eki skalowalno´sci rozwi ˛azania. Sys-tem umo ˙zliwia znalezienie kompromisu pomi˛edzy zu ˙zycie zasobów układu reprogra-mowalnego a szybko´sci przetwarzania danych.

Ogólny zarys architektury

Proponowane rozwi ˛azanie zostało opracowane dla układu Xilinx Zynq-7000 SoC i korzysta z opisanej wcze´sniej ogólnej architektury kamery inteligentnej (rozdział 5.2). Wykorzystuje

obecny w układzie procesor ogólnego przeznaczanie do kontrolowania przepływu danych, wizualizacji i ewentualnej komunikacji z układem nadrz˛ednym. W logice programowalnej zaimplementowano dedykowany detektor cech punktowych FAST, deskryptor cech BRIEF oraz moduł realizuj ˛acy operacj˛e dopasowania deskryptorów. Wszystkie te elementy s ˛a ze sob ˛a poł ˛aczone, a dodatkowo dysponuj ˛a poł ˛aczeniem z pami˛eci ˛a zewn˛etrzn ˛a. Ewentualne operacje przesyłu danych realizowane s ˛a za pomoc ˛a modułów DMA. Dodatkowo zastoso-wanie uniwersalnych interfejsów umo ˙zliwia podł ˛aczenie ró ˙znych ´zródeł danych wej´scio-wych jak kamery, wej´scie HDMI, czy pami˛e´c masowa. Schemat blokowy systemu przedsta-wiono na rysunku 5.8.

Proponowany system detekcji, deskrypcji oraz dopasowania wykonuje wszystkie swoje operacje w logice programowalnej układu, w którym został zaimplementowany. Obraz rejestrowany przez czujnik wizyjny jest przekazywany za po´srednictwem interfejsu AXI4-Stream do pierwszego z bloków przetwarzaj ˛acych - detektora, a nast˛epnie do modułu de-skrypcji. Dla ka ˙zdego piksela ze strumienia wej´sciowego koprocesor sprawdza czy jest on cech ˛a punktow ˛a i wylicza deskryptor dla obszaru wokół tego piksela. Wyznaczony de-skryptor jest zapisywany tylko w przypadku, gdy dany piksel zostanie uznany za cech˛e punktow ˛a. Wynik działania, czyli poło ˙zenie cechy punktowej oraz jest opis, jest przesyłany do pami˛eci zewn˛etrznej (DDR RAM) za po´srednictwem bloku DMA. W ten sposób wy-znaczany jest wektor danych dla pojedynczego obrazu. Po przetworzeniu dwóch pełnych obrazów procesor zarz ˛adzaj ˛acy uruchamia moduł dopasowuj ˛acy, w celu znalezienia najlep-szych dopasowa ´n pomi˛edzy wektorami deskryptorów z obu obrazów. Odpowiednie dane (deskryptory) s ˛a przesyłane z zewn˛etrznej pami˛eci DDR RAM do dedykowanego modułu porównuj ˛acego, który jako wynik zwraca najlepsze dopasowanie dla ka ˙zdego z przesłanych punktów. Ewentualne dalsze przetwarzanie wyników mo ˙ze by´c realizowane przez wyst˛e-puj ˛acy w systemie procesor ogólnego przeznaczenia, który w opisanym procesie pełni tylko rol˛e nadzorcz ˛a.

Koprocesor detekcji i deskrypcji cech

Schemat blokowy kompletnego systemu realizuj ˛acego operacj˛e detekcji cech przy pomocy algorytmu FAST oraz ich deskrypcji przy u ˙zyciu algorytmu BRIEF został przedstawiony na rysunku 5.9. Układ formuj ˛acy okno 7 × 7 pikseli, którego architektur˛e opisano w rozdziale 5.3.1, otrzymuje napływaj ˛ace do systemu dane w postaci strumienia pikseli. W tym miej-scu przetwarzanie danych rozdziela si˛e na dwie niezale ˙zne ´scie ˙zki – jedn ˛a dla detekcji cech, a drug ˛a do deskrypcji cech. Operacje te realizowane s ˛a niezale ˙znie i równolegle dla ka ˙z-dego piksela, ale tylko te uznane za interesuj ˛ace s ˛a na koniec zapisywane. Oznacza to, ˙ze wynik detekcji - okre´slenie czy dany punkt uzna´c za cech˛e punktow ˛a warunkuje zapisanie deskryptora dla niego wyliczonego.

W zwi ˛azku ze specyficzn ˛a struktur ˛a logiki programowalnej układu FPGA, zaimplemen-towana wersja algorytmu FAST, mimo, ˙ze oferuje ten sam rezultat, to jest znacz ˛aco ró ˙zna od oryginału zaproponowanego w [165] oraz [166]. Oryginalne rozwi ˛azanie wykorzystywało drzewa decyzyjne do okre´slania czy dany piksel na okr˛egu Bresenhama zalicza si˛e do kate-gorii ’jasne’ czy ’ciemne’. Rozwi ˛azanie to zostało zastosowane z my´sl ˛a o implementacji na

Rysunek 5.8: Schemat blokowy systemu detekcji, deskrypcji i dopasowania cech punkto-wych

procesorach sekwencyjnych. W takiej sytuacji algorytm drzew decyzyjnych jest wzgl˛ednie efektywny i pozwala na odrzucenie cz˛e´sci rozwa ˙zanych punktów jako cech (niespełniaj ˛

a-Rysunek 5.9: Schemat blokowy zaimplementowanego modułu detekcji i deskrypcji cech (FAST oraz BRIEF)

cych warunku na przynale ˙zno´s´c do ’jasnych’ b ˛ad´z ’ciemnych’) wcze´snie, kosztem wy ˙zszego zu ˙zycia pami˛eci. Jako, ˙ze układem docelowym w pracy doktorskiej był układ obliczeniowy o odmiennej architekturze, to zastosowano alternatywne rozwi ˛azanie. W miejsce drzewa decyzyjnego, realizowane jest wyczerpuj ˛ace przeszukiwanie wszystkich pikseli. Podej´scie to jest uzasadnione, ze wzgl˛edu na fakt, ˙ze w logika programowalna umo ˙zliwia wykony-wanie wielu operacji równolegle i wpływa pozytywnie na wydajno´s´c, przy tym zajmuj ˛ac niewiele zasobów logicznych mimo zastosowania wyczerpuj ˛acego przeszukiwania do znaj-dywania pikseli z kategorii ’jasne’ oraz ’ciemne’.

Wej´sciowy strumie ´n pikseli jest szeregowany w okno 7 × 7 za po´srednictwem modułów FIFO, dostarczaj ˛ac kolejnym modułom dost˛ep do centralnego piksela oraz jego otoczenia.

Piksele te, tworz ˛a okr ˛ag Bresenhama i s ˛a przekazywane do modułu klasyfikacji na kategori˛e

’jasne’ oraz ’ciemne’. Szczegółowy schemat blokowy tego modułu został przedstawiony na rysunku 5.10.

Moduł ten zawiera dwie niezale ˙zne ´scie ˙zki przetwarzania danych, w skład których wcho-dz ˛a bloki odejmuj ˛ace, komparatory oraz multipleksery. Ka ˙zda z nich realizuje operacj˛e

kla-piksel_01

Rysunek 5.10: Schemat blokowy modułu klasyfikacji pikseli na jasne/ciemne

syfikacji 16 pikseli le ˙z ˛acych na okr˛egu Bresenhama jako ’jasne’ b ˛ad´z ciemne odpowiednio.

Dane wej´sciowe to sygnały piksel_´srodkowyoraz piksel_XX, które odpowiadaj ˛a war-to´sci funkcji obrazowej dla piksela centralnego oraz szesnastu le ˙z ˛acych na okr˛egu Bresen-hama. Dodatkowym sygnałem wej´sciowym jest warto´s´c progu detektora FAST. Fragment odpowiadaj ˛acy za klasyfikacj˛e pikseli jako ’jasne’ rozpoczyna działanie od odj˛ecia warto´sci funkcji obrazowej piksela centralnego od jednego z pikseli na okr˛egu. Operacja ta jest zrów-noleglona szesna´scie razy i w jednym kroku wykonywana dla wszystkich pikseli z okr˛egu za pomoc ˛a szesnastu modułów odejmuj ˛acych. Wyniki tego działania s ˛a przekazywane do nast˛epnego modułu odejmuj ˛acego, który wyznacza ró ˙znic˛e z warto´sci ˛a progu. Analogiczne operacje s ˛a realizowane celem sprawdzenia czy piksele s ˛a ’ciemne’ - szesna´scie warto´sci funkcji obrazowej dla pikseli z okr˛egu Bresenhama jest poddawane równolegle dwukrot-nie operacji odejmowania - najpierw z warto´sci ˛a funkcji obrazowej centralnego piksela, a nast˛epnie z progiem.

Wyniki zwracane przez opisane powy ˙zej potoki przetwarzania s ˛a nast˛epnie przekazy-wane do zestawu komparatorów. Je´sli warto´s´c jest wi˛eksza ni ˙z zero, to jest podawana do nast˛epnego kroku oblicze ´n, gdzie jest wykorzystywana do obliczenia ’corner score’. Sy-gnały te zostały oznaczone na schemacie jako cs_XX_YY, gdzie XX jest numerem z zakresu 1-16 (pojedyncza warto´s´c oznacza okre´slony piksel na okr˛egu Bresenhama), a YY ma war-to´s´c jasny dla ’jasnych’ pikseli oraz ciemny dla ’ciemnych’ pikseli. Działanie to osi ˛agni˛eto poprzez zastosowanie zestawu multiplekserów sterowanych wynikiem operacji porówna-nia, co jest widoczne na rysunku 5.10. Dodatkowo wyniki zwracane przez komparatory ustawiaj ˛a odpowiednie bity w wektorze czy_jasny oraz czy_ciemny w celu spełnienia warunku przynale ˙zno´sci do kategorii ’jasnych’, b ˛ad´z ’ciemnych’ pikseli. Je´sli warto´s´c

po-równania jest ujemna lub równa zeru odpowiedni bit jest resetowany, gdy jest wi˛eksza ni ˙z zero odpowiedni bit jest ustawiany.

Ko ´ncowym efektem działania bloku klasyfikacji jest zbiór szesnastu 8-bitowych war-to´sci u ˙zywanych do wyznaczenia ’corner score’ zgodnie z równaniem 4.1 oraz dwa 16-bitowe wektory zawieraj ˛ace rezultat klasyfikacji pikseli z okr˛egu Bresenhama jako ’jasne’

b ˛ad´z ’ciemne’ wykorzystywane na dalszych etapach do realizacji testu ci ˛agło´sci.

Wyniki przekazane s ˛a dalej do dwóch kolejnych modułów. Pierwszy z nich wyznacza warto´s´c ’corner score’. Element ten składa si˛e z dwóch zrównoleglonych drzew sumato-rów, z których ka ˙zde ma szesna´scie wej´s´c dla pojedynczych pikseli z grupy ’jasnych’ oraz

’ciemnych’. Sumatory wyznaczaj ˛a dwie warto´sci – sum˛e komponentów dla ka ˙zdej ze wspo-mnianych grup, z czego wi˛eksza z nich jest przekazywana do modułu obliczaj ˛acego ’corner score’ zgodnie ze wzorem 4.1. Drugi z modułów wykonuje test ci ˛agło´sci odcinka zarówno dla ’jasnych’, jak i ’ciemnych’ pikseli, poszukuj ˛ac ci ˛agu co najmniej dziewi˛eciu kolejnych ’1’

logicznych w ka ˙zdym z 16-bitowych wektorów wej´sciowych. Blok ten składa si˛e z dwóch grup szesnastu 9-wej´sciowych bramek AND. Je´sli którykolwiek z wektorów wej´sciowych zawiera ci ˛ag dziewi˛eciu warto´sci ’1’, test ci ˛agło´sci jest uznawany za zaliczony.

Wyznaczona warto´s´c ’corner score’ oraz wyniki testu ci ˛agło´sci s ˛a przekazane do kole-jek FIFO oraz zbioru rejestrów, które tworz ˛a okno o rozmiarze 7 × 7 pikseli na potrzeby wykonania operacji tłumienia niemaksymalnego. Wcze´sniejsze uformowanie s ˛asiedztwa umo ˙zliwia wykonanie wszystkich 48 operacji porównania równolegle. Punkty, które odpo-wiadaj ˛a lokalnemu maksimum warto´sci ’corner score’ w oknie 7 × 7, a dodatkowo spełniaj ˛a test ci ˛agło´sci s ˛a uznawane za finalne cechy.

Równolegle realizowana jest operacja generacji współrz˛ednych obrazowych ka ˙zdego z analizowanych punktów. Funkcjonalno´s´c ta jest niezb˛edna, gdy ˙z dotychczas opisany po-tok przetwarzania detektora dostarczaj ˛a tylko informacji, czy dany piksel jest cech ˛a, czy nie. Baz ˛a wyznaczania współrz˛ednych s ˛a dwa liczniki, z których jeden odpowiada za inkre-mentacj˛e numeru kolumny, natomiast drugi za inkreinkre-mentacj˛e numeru wiersza. W zwi ˛azku z faktem, ˙ze potok przetwarzania detektora ma pewn ˛a długo´s´c dodatkowe bufory FIFO zo-stały u ˙zyte w celu nale ˙zytego opó´znienia współrz˛ednych obrazu.

Potok przetwarzania dla deskrypcji cech zaczyna si˛e od modułu filtru u´sredniaj ˛acego.

W oryginalnej implementacji algorytmu BRIEF wykorzystany był filtr u´sredniaj ˛acy o ma-sce kwadratowej [43]. Uzasadnieniem takiego podej´scia był fakt, ˙ze warto´s´c filtru mo ˙ze by´c wyznaczona relatywnie efektywnie na komputerze PC dzi˛eki wykorzystaniu obrazów całkowych [118]. W zwi ˛azku z wykorzystaniem platformy sprz˛etowej umo ˙zliwiaj ˛acej wy-konywanie wielu operacji równolegle została podj˛eta decyzja o zastosowaniu filtra u´sred-niaj ˛acego o masce okr ˛agłej. Taki filtr odznacza si˛e lepszymi charakterystykami wzgl˛edem bazuj ˛acego na masce kwadratowej, jako, ˙ze jego odpowied´z jest izotropowa. Maska została zdefiniowana dla obszaru 7 × 7 pikseli. Dane wej´sciowe s ˛a identyczne z danymi wykorzy-stywanymi przed potok przetwarzania detektora FAST.

Odfiltrowane dane obrazowe s ˛a podawane do kolejnej pary kolejek FIFO oraz banku re-jestrów celem utworzenia okna 33 × 33 piksele, w którym ka ˙zdy element jest dost˛epnym do natychmiastowego wykorzystania. Sposób próbkowania wykorzystany jest identyczny

Rysunek 5.11: Schemat blokowy modułu wyznaczaj ˛acego deskryptor BRIEF

z przedstawionym na rysunku 4.4. W zwi ˛azku z faktem, ˙ze długo´s´c deskryptor to 256 bi-tów, dokładnie tyle komparatorów zostało wykorzystanych w celu wyznaczenia warto´sci deskryptora w jednym takcie. Wynikowy wektor binarny jest przechowywany w rejestrze.

Schemat blokowy modułu wyznaczaj ˛acego deskryptor BRIEF został przedstawiony na ry-sunku 5.11. Warto´s´c z wyj´sciowego rejestru jest nast˛epnie przekazywana do kolejki FIFO.

Cały przedstawiony system przechowuje wyniki w po´srednich kolejkach FIFO – jedna z nich zawiera współrz˛edne cechy, natomiast druga jego deskryptor. Rozwi ˛azanie takie zo-stało zastosowane, gdy ˙z długo´s´c potoków przetwarzania dla detektora oraz deskryptora nie jest jednakowa. Implementacja du ˙zego bufora do przechowywania współrz˛ednych w celu synchronizacji jest bardziej efektywna pod wzgl˛edem zu ˙zycia zasobów od podej´scia opar-tego o moduły opó´zniaj ˛ace. Sygnał informuj ˛acy o wykryciu cechy jest wykorzystany jako sygnał ’write enable’ dla obu kolejek i jest przesyłany przez moduły opó´zniaj ˛ace w celu do-pasowania go do długo´sci obu potoków przetwarzania. Szeroko´s´c opó´znianego sygnału to jeden bit, w zwi ˛azku z czym zastosowane podej´scie wykorzystuje minimaln ˛a ilo´s´c logicz-nych.

Proponowany koprocesor w pełni wykorzystuje wyst˛epuj ˛acy w algorytmach paralelizm przestrzenny i czasowy. Przedstawiona architektura jest systoliczna i zdolna do pracy na strumieniu danych, oferuj ˛ac wysok ˛a wydajno´s´c.

Moduł dopasowania cech

Koprocesor dopasowania cech punktowych jest strumieniowym modułem podł ˛aczonym do instancji uniwersalnego kontrolera procesorów strumieniowych opisanego w rozdziale 5.2.

Składa si˛e ze współdzielonej cz˛e´sci logiki kontrolnej oraz zbioru rdzeni dopasowuj ˛acych, z których ka ˙zdy pracuje niezale ˙znie i równolegle z pozostałymi. Liczba rdzeni dopasowuj ˛ a-cych jest ograniczona tylko zasobami wykorzystywanego układu FPGA. W opisywanym systemie przetestowano do 32 takich rdzenie. Szczegółowy schemat blokowy przedsta-wiono na rysunku 5.12. Dane wej´sciowe dla modułu stanowi ˛a:

• N wzorcowych deskryptorów, gdzie N oznacza liczb˛e rdzeni dopasowuj ˛acych;

Rysunek 5.12: Schemat blokowy koprocesora dopasowuj ˛acego

• wektor deskryptorów do porównania zawieraj ˛acy M deskryptorów, które maj ˛a by´c porównane z wzorcowymi;

• liczb˛e M deskryptorów w wektorze do porównania.

Koprocesor rozpoczyna działanie od otrzymania N wzorcowych deskryptorów i zapi-sania ich w wewn˛etrznych rejestrach poszczególnych rdzeni dopasowuj ˛acych. Nast˛epnie ka ˙zdy z rdzeni dopasowuj ˛acych wykonuje operacj˛e porównania posiadanego wzorca z ka ˙z-dym z M kolejnych deskryptorów dostarczanych strumieniowo jako elementy wektora do porównania. Operacja ta polega na wyznaczeniu warto´sci odległo´sci Hamminga dla dwóch wektorów zawieraj ˛acych po 256 bitów ka ˙zdy. Indeks oraz dystans najlepszego dopasowania jest zapisywany i aktualizowany w przypadku wyst ˛apienia lepszego dopasowania. Pełen cykl działania jest zako ´nczony po wykonaniu M takich testów, kiedy ka ˙zdy rdze ´n zawiera informacje o najlepszym dopasowaniu dla danego wzorca. Wyznaczone warto´sci – infor-macja o dopasowaniu cech – mo ˙ze by´c odczytana z koprocesora, a cały cykl działania

wyko-Rysunek 5.13: Potok przetwarzania modułu dopasowuj ˛acego

nany ponownie w celu znalezienia najlepszego dopasowania dla du ˙zych zbiorów punktów.

Ka ˙zda iteracja znajduje dopasowanie dla N punktów. Szczegółowy schemat blokowy po-toku przetwarzania rdzenia dopasowuj ˛acego przedstawiono na rysunku 5.13.

Przerywan ˛a lini ˛a zaznaczono na schemacie cz˛e´s´c wspóln ˛a koprocesora (dolna cz˛e´s´c sche-matu) oraz cz˛e´s´c rdzenia dopasowuj ˛acego (górna cz˛e´s´c schematu), która jest duplikowana Nrazy. Ka ˙zdy z nich składa si˛e z dwóch głównych cz˛e´sci - fragmentu odpowiedzialnego za wyznaczenie odległo´sci Hamminga oraz sekcji realizuj ˛acej aktualizacj˛e i przechowywanie najmniejszej znalezionej odległo´sci i odpowiadaj ˛acego mu indeksu. W celu uzyskania du ˙zej szybko´sci przetwarzania wszystkie obliczenia zostały zrównoleglone. Pierwszym krokiem jest wykonanie 256 operacji XOR pomi˛edzy deskryptorem wzorocowym i aktualnie porów-nywanym. Rezultat tego działania jest przekazywany na w pełni zrównoleglone drzewo su-matorów. Licznik w cz˛e´sci wspólnej odpowiada za dostarczanie indeksu aktualnie przetwa-rzanego deskryptora z wektora do porównania. W zwi ˛azku z faktem, ˙ze potok przetwarza-j ˛acy w cz˛e´sci obliczeniowej jest dłu ˙zszy, niezb˛edne było zastosowanie kolejki opó´zniaj ˛acej o gł˛eboko´sci 9 dla indeksów. Dodatkowy komparator sprawdza ile elementów z wektora do porównania zostało przetworzonych i ustawia odpowiedni ˛a flag˛e, w przypadku, gdy wszystkie zostały przetworzone.

5.3.4 Deskryptor regionów LBP

Zasad˛e działania, przykładowy wynik i podstawy teoretyczne zaimplementowanego algo-rytmu opisano ze szczegółami w rozdziale 4.4.1. Schemat blokowy koprocesora wyznacza-j ˛acego deskryptor LBP o rozmiarze 10 × 5 przedstawiono na rysunku 5.14.

Koprocesor jest w pełni potokowy o architekturze tablicy systolicznej – dla ka ˙zdego

Rysunek 5.14: Schemat blokowy koprocesora wyznaczaj ˛acego warto´s´c deskryptora LBP dla obszaru

przychodz ˛acego piksela zwracany jest pełen wektor deskryptora. Dane s ˛a wpierw orga-nizowane w okna o rozmiarze 3 × 3 piksele przy u ˙zyciu dwu-portowych pami˛eci oraz re-jestrów, w celu zapewnienia jednoczesnego dost˛epu do całego obszaru 5.3.1. Na podstawie warto´sci funkcji obrazowej pikseli w oknie, wyznaczana jest warto´s´c surowego, podstawo-wego deskryptora LBP dla pojedynczego piksela opisana równaniem 4.2 oraz 4.3. Warto´s´c ta nast˛epnie jest konwertowana do NRULBP za pomoc ˛a tablicowania. Blok realizuj ˛acy t˛e operacj˛e przedstawiono na rysunku 5.15.

W nast˛epnym kroku, strumie ´n kolejnych warto´sci NRULBP wyznaczonych dla pojedyn-czych pikseli jest buforowany i formowany w okno o rozmiarze 50 × 1. Działanie to umo ˙z-liwia jednoczesny i natychmiastowy dost˛ep do danych, z którego korzystaj ˛a, znajduj ˛ace si˛e dalej w potoku przetwarzania, moduły wyznaczaj ˛ace lokalne histogramy. Ka ˙zda z 10 iden-tycznych jednostek wylicza warto´s´c histogramu dla obszaru o rozmiarze 5 × 5. Sposób jego kalkulacji bazuje na spostrze ˙zeniu, ˙ze warto´s´c dla regionu jest modyfikowana tylko przez warto´s´c funkcji obrazowej pikseli opuszczaj ˛acych oraz wchodz ˛acych do analizowanego ob-szaru. Schemat blokowy wspomnianego modułu wyznaczaj ˛acego histogram dla regionu o rozmiarze 5 × 5 przedstawiono na rysunku 5.16.

Kolejne grupy 5 pikseli s ˛a buforowane w zestawie rejestrów a warto´s´c histogramu nie jest liczona dla całego okna, a tylko aktualizowana o zmian˛e, tj. histogram dla pikseli wchodz ˛ a-cych do analizowanego obszaru i opuszczaj ˛acych go. W przedstawionym na rysunku 5.14 schemacie dla deskryptora LBP o rozmiarze 10×5 buforowany zestaw 50 surowych warto´sci

Rysunek 5.15: Schemat blokowy modułu wyliczaj ˛acego NRULBP

Rysunek 5.16: Schemat blokowy modułu wyznaczaj ˛acego warto´s´c ruchomy histogram

NRULBP trafia na wej´scie 10 modułów wyznaczaj ˛acych histogram dla obszaru 5 × 5 ka ˙zdy.

W ten sposób, w jednym kroku wyznaczana jest warto´s´c deskryptora dla jednej kolumny.

W ten sposób, w jednym kroku wyznaczana jest warto´s´c deskryptora dla jednej kolumny.