Základní charakteristika
Tento projekt obsahuje návrh a implementaci řetězce pro zpracování obrazu v reálném čase. Hlavní myšlenkou projektu je maximální modularita výsledného systému tak, aby bylo možno systém snadno upravovat a rozšiřovat o další funkcionalitu. Dále byl kladen velký důraz na možnost dosažení maximálního paralelismu při zpracování obrazu, což je v souladu s dnešním trendem nastupujících vícejádrových procesorů.
Celý systém se skládá z pevně nadefinovaných částí, které zajišťují základní funkcionalitu, a dále z definic rozhraní pro připojitelné prvky. Těmi jsou obecné zdroje obrazových dat (tj. sekvence obrazových snímků) a především definice rozhraní pro napojení tzv. výpočetních jednotek (tj. jednotek, které se starají o samotné zpracování obrazu).
Tyto výpočetní jednotky vytváří uživatelé systému a poté je používají jednotným způsobem ve výpočetním řetězci. Ten se skládá z uživatelem definovaného zdroje obrazových dat (kamera, soubor s videem, statický obrázek, ...) a ze základních bloků, které řídí postup obrazových dat (snímků) a umožňují napojení jednotek.
Jednotky jsou v systému definovány jako zcela samostatné objekty, kdy každá jednotka je reprezentována jednou dynamickou knihovnou. Jednotka je k výpočetními řetězci připojována za běhu aplikace jednoduše tak, že je přes jednotně definované rozhraní vytvořena z příslušné dynamické knihovny a připojena k výpočetnímu řetězci standardním způsobem. Každá výpočetní jednotka musí být implementována tak, že v aplikaci vystupuje jako autonomně pracující objekt (tj. každá jednotka má své vlastní vlákno/vlákna řízení). Tím je zajištěno, že použití jakékoliv jednotky bude maximálně jednoduché, uživatel jednoduše získá rozhraní pro jednotku, připojí ji k řetězci a poté pouze získává výsledky, které tato jednotka produkuje.
V projektu jsou k dispozici implementované knihovny pro získávání obrazových dat z různých zdrojů obrazu. Ty lze použít zcela nezávisle i pro jiné aplikace, neboť jsou nezávislé na implementovaném řetězci. Konkrétně jsou zde reprezentovány jednoduchým rozhraním (jediná abstraktní třída), které definuje práci s daným zdrojem obrazu. Uživatel pouze získá přístup k tomuto rozhraní a dále se nestará o způsob práce s ním. Takto lze snadno psát aplikace, které např. v průběhu testování vyžadují nějaké opakující se vstupní videosekvence, zatímco v reálném provozu bude použit jako zdroj obrazu vstup z fyzicky připojené kamery. V takovém případě stačí pouze nahradit příslušnou knihovnu pro načítání obrazu z videosekvence knihovnou pro načítání obrazu z kamery.
Soubory ke stažení
Podrobný manuál pro použití řetězce lze získat zde.
Soubory s implementací výpočetního řetězce s projektem pro Visual Studio 2003 a 2005 jsou k dispozici zde.
Dokumentace zdrojového kódu pro výpočetní řetězec generovaná systémem Doxygen:
Knihovny pro zdroje obrazových dat jsou k dispozici zde.
Zdrojové kódy pro zdroje obrazových dat lze nalézt zde. Pro kompilaci některých z nich jsou potřebné statické knihovny pro DirectShow, které jsou pro usnadnění kompilace k dispozici zde (lze je vygenerovat z DirectShow v Platform SDK).
Dokumentace k těmto implementacím získaná systémem Doxygen:
Jednoduchý příklad implementace výpočetní jednotky a jejího použití v jednoduché aplikaci lze nalézt zde.