Medyczna rejestracja obrazu wideo

Część I: Podstawowe zagadnienia związane z medyczną rejestracją obrazu wideo

Oprogramowanie do nagrywania obrazu

Autor: dr inż. Marcin Just, dr inż. Michał Tyc (DiagNova Technologies)

W przypadku zastosowania do rejestracji obrazu urządzenia typu „odtwarzacz DVD z funkcją nagrywania”, po podłączeniu źródła sygnału (kamery) użytkownik może po prostu wcisnąć przycisk nagrywania i zapomnieć o wszystkim, oczywiście poza wyłączeniem nagrywania. Podejście takie ma swoje zalety, jednak przy regularnym nagrywaniu dużej liczby małych plików błyskawicznie doprowadzi do powstania bałaganu w zbiorach wideo i praktycznie uniemożliwi efektywne zarządzanie nimi. Szybkie wyszukanie kilkusekundowego nagrania w zestawie tysiąca nagrań będzie wtedy prawdziwą sztuką. W przypadku nagrywania krótkich sekwencji w dużej liczbie, znacznie lepszym rozwiązaniem jest komputer z zainstalowanym odpowiednim oprogramowaniem. Wymaga to początkowo od użytkownika więcej pracy, procentuje jednak bardzo szybko. Jeśli liczba nagrań jest naprawdę duża, najlepszym rozwiązaniem jest oprogramowanie połączone z jakąkolwiek bazą danych, pozwalające na utrzymanie wzorowego porządku w zbiorach. W rozdziale omówione zostaną zagadnienia związane z rejestracja wideo w nowszych systemach z rodziny Microsoft Windows NT, czyli Windows 2000, Windows XP, Windows Vista i Windows 7. Pominięte będą nieużywane już praktycznie systemy starsze niż Windows 2000, tj. Windows NT 4 i rodzina Windows 9x (np. Windows Millenium – wyjątkowo niestabilny i nie polecany do jakiejkolwiek pracy z komputerem).


Sam program do nagrywania to nie wszystko

Istnieją co prawda programy całkowicie samodzielnie wykonujące wszystkie operacje związane z nagrywaniem, czyli

  • obsługę urządzenia przechwytującego,
  • obróbkę obrazu,
  • kompresję,
  • zapis na dysk,

ale odchodzą one stopniowo do lamusa. Różnorodność urządzeń nagrywających, rozmaitość wymagań co do sposobu zachowywania filmów na dysku komputera i ogólnie szybkie zmiany w technice komputerowej (np. szybko następujące ostatnio zmiany systemów operacyjnych) wymuszają tworzenie oprogramowania polegającego w dużym stopniu na mechanizmach zaszytych w systemach operacyjnych. Z jednej strony dotyczy to wykorzystania specjalnych standardów współpracy z urządzeniami przechwytującymi w celu pobrania danych, z drugiej strony użycia tzw. kodeków – programów kompresujących (właściwie kodujących) i dekompresujacych (dekodujących) materiał wideo. Program nagrywający musi więc poprawnie połączyć się z tzw. sterownikiem urządzenia przechwytującego (musi zostać ono zainstalowane w systemie!) za pośrednictwem wybranego mechanizmu współpracy, po pobraniu obrazu dokonać na nim wymaganych operacji poprawiających czytelność, wyświetlić go na ekranie (o ile podgląd nagrywanego materiału jest wymagany) oraz wybrać odpowiedni kodek w celu zapisaniu na nośniku (zwykle na dysku twardym komputera). Ze względu na zależność programu nagrywającego od całej grupy innych programów, jego złe działanie nie zawsze spowodowane jest błędami w jego budowie. Źródłem problemów często mogą być programy zewnętrzne. Ze względu na częste zmiany standardów, aktualnie za błędne działanie programów nagrywających zwykle odpowiedzialne są programy dodatkowe (sterowniki, kodeki itp.).

Omówimy teraz wszystkie etapy prowadzące do uzyskania filmu zapisanego na dysku.


Pobieranie danych obrazowych

Cały proces musi się rozpocząć od pobrania danych obrazowych. Dostarczające ich urządzenie przechwytujące może mieć zupełnie dowolną budowę wewnętrzną. Program nagrywający zwykle nie może jej znać i polegać musi na tzw. sterowniku napisanym przez producenta sprzętu. Ze sterownikiem może on połączyć się na kilka sposobów:

  • bezpośrednio, co wymaga udostępnienia dokładnej dokumentacji przez producenta urządzenia i zdarza się bardzo rzadko,
  • z wykorzystaniem mechanizmów Video for Windows (VfW) pochodzących jeszcze z systemu Windows 3.1 (z 1992 roku),
  • poprzez mechanizm DirectShow, będący częścią składową niezwykle istotnego mechanizmu DirectX,
  • z urządzeniami udostępniającymi pojedyncze klatki (skanery, aparaty fotograficzne) za pomocą mechanizmu TWAIN.

Każdy ze sposobów ma swoje wady i zalety. TWAIN jest mało wydajny i nadaje się do pozyskiwania tylko pojedynczych klatek, DirectShow jest skomplikowany, podatny na drobne niekompatybilności i bardzo obciążający sprzęt komputerowy, ale za to nowoczesny i bardzo uniwersalny, Video for Windows – nieco archaiczny i z mocno ograniczoną funkcjonalnością, ale za to ze względu na możliwość działania na starych komputerach – dosyć wydajny. Sposób bezpośredni teoretycznie zapewnia maksimum wykorzystania możliwości urządzenia i byłby najlepszy, gdyby nie wymagał indywidualnego przygotowania dla każdego urządzenia. Z tego powodu praktycznie nie jest używany w uniwersalnych programach nagrywających. Video for Windows i DirectShow są mechanizmami, które program wykorzystywać może na każdym etapie: pobrania danych, kompresji i zapisu na nośnik. Na każdym z etapów każdy z tych mechanizmów wykazuje swoje wady i zalety.

DirectShow

Aktualnie najbardziej rozpowszechniony jest mechanizm DirectShow. Do poprawnego działania programów nagrywających wymagana będzie prawdopodobnie wersja dostarczona z bibliotekami DirectX w wersji 9.0c lub nowsza (czyli dostarczona z bibliotekami DirectX w wersjach 10 lub 11). Zasadniczo w DirectShow nie następują szybkie zmiany i nie istnieje wymóg posiadania DirectX w wersji 10 lub 11 dla wykorzystania wszystkich możliwości DirectShow.

DirectShow oparty jest na zasadzie łączenia tzw. filtrów. Filtrem jest obiekt, który generuje, transformuje, prezentuje (np. wyświetla na ekranie monitora lub odtwarza dźwięk) lub zapisuje na dysk dane multimedialne. Połączone filtry tworzą tzw. graf DirectShow. Producent urządzenia przechwytującego zwykle wraz ze sterownikiem udostępnia filtr źródłowy generujący dane dla grafu, zaś kodeki dostępne są jako różne filtry transformujące.

Wygląd przykładowych grafów DirectShow dla wyświetlania obrazu z kamery
Wygląd przykładowych grafów DirectShow dla wyświetlania obrazu z kamery

Wygląd przykładowych grafów DirectShow dla wyświetlania obrazu z kamery (góra) i wyświetlania filmu z dysku komputera (dół)

Tworząc graf do pobierania danych obrazowych z grabbera, program nagrywający musi przede wszystkim wybrać filtr źródłowy (w przypadku kilku urządzeń przechwytujących musi umożliwić użytkownikowi wybór jednego z nich) i ustalić parametry połączenia (rozdzielczość, przestrzeń kolorów i liczbę klatek na sekundę).


Obróbka danych

Obróbkę danych zapewnia program nagrywający. Jeśli jego działanie oparte jest na grafach DirectShow, to zwykle realizuje ją poprzez dołożenie do grafu własnego filtru lub zestawu filtrów (choć przy skomplikowanej obróbce jest to sposób stosunkowo mało wydajny). W specjalistycznym oprogramowaniu możliwe są jednak i inne podejścia do problemu pozwalające na lepsze zarządzanie przepływem danych niż realizowane jest przez filtry DirectShow. Obróbka danych ma za zadanie:

  • optymalnie przekonwertować format danych z grabbera na format wyświetlany na ekranie (optymalna konwersja z formatów YUV (YUY2 lub YV12) na RGB_32)
  • poprawić kontrast, jasność,
  • zrealizować funkcję balansu bieli,
  • usunąć przeplot,
  • wprowadzić inne ulepszenia (rozciąganie histogramowe itp.),
  • przygotować dane dla filtrów kompresujących (w przypadku DirectShow).

W najlepszych programach istnieje możliwość obróbki danych w czasie rzeczywistym z natychmiastowym podglądem wyników na ekranie.


Kompresja danych

Dane obrazowe, jak wykazano to w części poświęconej strumieniowi danych, mają bardzo dużą objętość. Jedna sekunda filmu nawet w standardowej rozdzielczości pełnego PAL może łatwo osiągnąć rozmiar 20 MB (MB – megabajtów, w odróżnieniu od Mb – megabitów). Nowoczesne dyski twarde mają być może wystarczającą pojemność, żeby pomieścić tysiące krótkich filmików bez kompresji, jednak szybkości zwykłych dysków są nawet teraz zbyt małe, aby zapewnić pełen komfort w zarządzaniu takim zbiorem (tworzenie kopii zapasowych – backup, archiwizacja, wyszukiwanie, przenoszenie), zaś szybkie dyski typu SSD (Solid State Drive/Disk oparte na pamięciach typu Flash) są zbyt drogie w przeliczeniu na jednostkę pojemności. Rozwiązaniem problemu rozmiaru danych jest tu kompresja. Oko ludzkie i mózg nie są w stanie wychwycić pewnych szczegółów obrazu i dzięki temu można je usunąć z obrazu bez widocznej utraty jakości. W ten sposób działa kompresja pojedynczych klatek. Dodatkowo sąsiednie klatki różnią się od siebie zwykle minimalnie i można zapisywać tylko różnice między nimi – jest to kompresja temporalna. Można też kompresować filmy bez utraty jakichkolwiek informacji (kompresja bezstratna).

W zależności od wybranej metody uzyskać można współczynnik kompresji (współczynnik zmniejszenia objętości danych) na poziomie od 1,5 aż do ponad 100.

Pamiętać trzeba też o tym, że skompresowane dane muszą zostać rozkompresowane przed oglądaniem. Oprócz kompresora potrzebny jest więc i dekompresor. Stanowią one zwykle komplet nazywany kodekiem.

Wśród najbardziej znanych kodeków wymienić można:

  • HuffYUV (bezstratny, bardzo wydajny),
  • Lagarith (bezstratny, stosunkowo dobra kompresja),
  • Alparysoft, CorePNG, MSU, FFV1 – różne bezstratne
  • MJPEG – w tej chwili zasadniczo przestarzały,
  • kodeki formatu MPEG 1
  • kodeki formatu MPEG 2
  • kodeki formatu MPEG 4 (duża liczba, np. XviD, ffdshow, Divx)
  • x264 (nowy format użyteczny zwłaszcza przy filmach o dobrej jakości i wysokiej rozdzielczości, ale mający bardzo duże wymagania co do mocy obliczeniowej komputera.

Większość tych kodeków dostępna jest zarówno poprzez mechanizmy Video for Windows, jak i jako filtry dla DirectShow. Kodeki MPEG 1, MPEG 2, MPEG 4 i inne nowe stosują kompresję temporalną, starsze (MJPEG) i bezstratne zwykle kompresują indywidualnie poszczególne klatki.

Wyraźnie rozróżnić należy tutaj pojęcia kompresora, dekompresora, kodeka, filtru i paczki kodeków.

Paczka kodeków (np. K-Lite Codec Pack, CCCP) – zbiór mniej lub bardziej sensownie dobranych kodeków, teoretycznie umożliwiający oglądania wszelkiego typu filmów i kompresję różnymi metodami. Niestety, często również posiadający w zbiorze kodeki umieszczone nielegalnie (bez uiszczenia wymaganych opłat licencyjnych) lub całkowicie egzotyczne, niejednokrotnie również kolidujące ze sobą nawzajem. Paczka kodeków to rozwiązanie dla absolutnych desperatów komputerowych, działających na zasadzie „jakoś to będzie” i lubiących ryzyko. Naprawienie uszkodzeń systemu kodeków w systemie spowodowanych błędną instalacją paczki kodeków jest często niezwykle skomplikowane, prawdopodobieństwo optymalnego wyboru przez system kodeka z tak szerokiej listy jest potem niewielkie. Zdecydowanie odradzamy to rozwiązanie.

Kodek – zestaw kompresor/dekompresor

Filtr – realizacja kompresora lub dekompresora w sposób umożliwiający wykorzystanie go w technologii DirectShow.

Najlepszym rozwiązaniem jest świadome zainstalowanie kilku wybranych kodeków. Dobrym wyjściem może tu być instalacja ffdshow (obsługuje multum różnych formatów), XviD (do kompresji formatem MPEG 4, gdyż jest stabilny i wydajny), HuffYUV, Lagarith i kilku innych. W miarę potrzeb można potem doinstalować wybrane kodeki do dekodowania kilku dodatkowych formatów.

W mechanizmie DirectShow filtr wybrany może być manualnie, może też, co jest często stosowane, być wybrany przez DirectShow automatycznie. Przy wyborze automatycznym system posiłkuje się specjalnym numerem ustalanym dla każdego filtru kodeka w momencie instalacji – jest to tzw. merit. Określa on pierwszeństwo w wykorzystaniu filtru. Instalacja mnóstwa kodeków (w czasie instalacji paczki kodeków) powoduje, że nawzajem rywalizują one ze sobą, przypisując sobie (prosto mówiąc) coraz wyższe numery, aby „wygryźć” konkurencję. Prowadzi to ostatecznie do zupełnego braku kontroli na tym, co i kiedy zostanie wykorzystane.

Dobre oprogramowanie nagrywające nie pozwala na losowość w wyborze kompresora. Albo inteligentnie wybiera znany sobie, sprawdzony kompresor, albo wybór pozostawia użytkownikowi!


Zapis na nośnik

Funkcję zapisu realizuje, jak zostało wspomniane, i Video for Windows, i DirectShow.

DirectShow zapewnia dużo więcej funkcji dodatkowych i obsługuje więcej standardów (np. dane strumieniowe), ale ma również pewne mankamenty utrudniające precyzyjne operowanie na pojedynczych klatkach. Video for Windows nie obsługuje najnowszych formatów danych (tzw. kontenerów) i typów danych (m.in. danych strumieniowych), pozwala jednak na bardzo precyzyjną obsługę nawet pojedynczych klatek.

Podczas zapisu na dysk dane mają już określony (przez kompresor) format, należy jednak wybrać sposób zapisu tych danych na nośniku. Jest to tzw. wybór kontenera. Jest to częściowo powiązane z wyborem kodeka i typu medium (typu danych – strumieniowe, czy nie). Najpopularniejszym kontenerem jest AVI. Jako jedyny obsługiwany jest przez mechanizmy Video for Windows i nie może zawierać danych strumieniowych. Inne znane kontenery to te związane są ze standardem płytek VideCD (MPEG1 – DAT) i DVD (MPEG2 – TS), ASF (ASF, WMV), Matroska (MKV), RealMedia (RM), QuickTime (MOV).