środa, 20 sierpnia 2008

Qt

2 komentarze
Najlepsze narzędzie w kategorii: Międzyplatformowe aplikacje okienkowe

Do tej pory w cyklu artykułów 'Najlepsze w swojej klasie' starałem się wskazać narzędzia, które mają kontakt przede wszystkim z danymi (obrazy, obiekty trójwymiarowe, video). Nadeszła pora, aby wskazać technologie i gotowe programy, które umożliwiają interakcję z użytkownikiem. Zaczniemy dzisiaj od bibliotek służących do tworzenia międzyplatformowych interfejsów użytkownika.

Zdecydowanym liderem w tej kategorii jest Qt - narzędzie rozwijane przez firmę Trolltech, przejętą w ostatnim czasie przez Nokię. Qt pomimo tego, że ma już swoje lata, jest bardzo nowoczesną technologią i znajduje zastosowanie nie tylko w aplikacjach okienkowych dla komputerów osobistych, ale również w urządzeniach multimedialnych - telefonach i palmtopach. Co ważne, Qt nie służy tylko do tworzenia okienek, ale również posiada wbudowaną obsługę multimediów, protokołów sieciowych, xmla, dostępu do baz danych i wielu innych.

Zalety:
  • Bardzo dobre wsparcie dla różnych systemów operacyjnych i różnych kompilatorów
  • W Windows bardzo dobrze dopracowana współpraca z Visual Studio
  • Często stosowana w projektach Open Source; jest podstawą środowiska graficznego KDE, które od wersji 4.0 dostępne jest nie tylko dla Linuksa, ale również Windowsa, Mac OSa i Solarisa
  • Natywne wsparcie dla wielu technologii, takich jak: xml, multimedia, bazy danych, protokoły sieciowe (wiecej informacji)
  • Wygodny zestaw narzędzi wspierających:
    • qmake - przygotowywanie plików makefile, lub plików projektowych dla Visual Studio
    • Qt Designer - graficzne narzędzie do projektowania interfejsów
    • Qt Linguist - przygotowywanie różnych wersji językowych
    • Qt Assistant - system pomocy dla programistów
  • Szeroko wykorzystywana w różnych projektach Open Source związanych z przetwarzaniem obrazów, m.in.: ParaView, VTK Designer, MeVisLab, Pandore (aplikacja pvisu), MITK
  • Wykorzystywana w wielu komercyjnych aplikacjach (Skype, Google Earth, Gadu-gadu, inne)
  • Wsparcie dla technologii mobilnych (więcej informacji)
  • Bardzo dobrze opracowana dokumentacja; wiele przykładów
  • Posiada zaawansowane kontrolki graficzne (więcej informacji)
  • Programowanie kontrolek danych według modelu MVC
  • Pluginy pozwalające na rozszerzanie możliwości programów bez ich rekompilacji
  • Dostępny język skryptowy (QtScript)
Wady:
  • Droga licencja do zastosowań komercyjnych. Możemy oczywiście wybrać licencję GPL i również sprzedawać napisane przez siebie programy, ale pod warunkiem przekazania użytkownikowi pełnego kodu źródłowego (łącznie z kodem bibliotek dołączanych dynamicznie)
  • Mała ilość zaawansowanych kontrolek
Materiały:
Konkurencja:

GTK+
  • Duże wsparcie społeczności, widoczne przede wszystkim w środowisku graficznym dla Linuksa: GNOME oraz miedzyplatformowym edytorze grafiki: GIMP
  • Biblioteka wykorzystywana w aplikacjach mobilnych (więcej informacji)
  • Przygotowanie wersji pod Windowsa wymaga znacznie więcej wysiłku aniżeli w przypadku Qt
  • Niepełna obiektowość; piszemy głównie w C
  • Rzadko wybierana przez użytkowników zajmujących się analizą obrazu
  • Przykłady wykorzystania: MedicalStudio
  • Licencja LGPL
  • Strona WWW
WxWidget
  • Dobrze pracuje pod Windows
  • Bogaty zestaw kontrolek
  • Chętnie wybierana jako interfejs w aplikacjach komercyjnych (więcej informacji)
  • Mniejsza popularność w środowisku Open Source w porównaniu z Qt i GTK
  • Przykładowe aplikacje: DeVIDE
  • Licencja LGPL
  • Strona WWW
FLTK
  • Bardzo mała i szybka biblioteka
  • Prostota programowania i kompilacji
  • Dostępne wygodne narzędzie do projektowania interfejsu
  • Bardzo dobrze współpracuje z VTK i ITK
  • Powolny rozwój; niewielka społeczność i małe zainteresowanie firm komercyjnych
  • Przykłady zastosowań: kilka aplikacji z pakietu ITK Applications, ITK-Snap, IGSTK
  • Licencja LGPL
  • Strona WWW
Pozostali:
Patrząc jeszcze raz na przedstawione w porównaniu biblioteki, można zauważyć, że lider tej kategorii - Qt, oferuje znacznie większe możliwości i wygodę pracy, aniżeli konkurenci, ale w odróżnieniu od nich, wprowadza większe ograniczenia licencyjne. Podwójna licencja z jaką mamy tutaj do czynienia nie musi być kłopotliwa, ponieważ dla firm tworzących zamknięte oprogramowanie koszt zakupu licencji nie jest wysoki w porównaniu do innych kosztów operacyjnych. Natomiast twórcy projektów Open Source dostają dobrze zaprojektowaną i przetestowaną bibliotekę bez ponoszenia jakichkolwiek kosztów.

Niezależnie od tego, która biblioteka swoimi funkcjami najbardziej przekona nas do siebie, sam fakt tworzenia aplikacji niezależnych od platformy, czyni ją bardziej dostępną dla potencjalnych użytkowników, którzy sami mogą zdecydować, czy będą z niej korzystać na pececie, komórce, czy też superkomputerze.

wtorek, 12 sierpnia 2008

Biblioteki do obsługi formatu DICOM

0 komentarze
Kolejna analiza narzędzi, którą się zająłem, dotyczyła bibliotek służących do obsługi formatu DICOM. Podobnie jak w poprzednich wpisach, główny nacisk został położony na technologie mogące być interesujące z punktu widzenia programisty lub osoby zajmującej się analizą obrazu, a nie użytkownika końcowego. Osoby zainteresowane gotowymi programami, a nie ich tworzeniem odsyłam do internetowej bazy oprogramowania IDoImaging.com, poświęconej diagnostyce obrazowej, w której znajduje się lista ok. 80 przeglądarek DICOM, dostępnych w znaczniej mierze nieodpłatnie.

Większość osób, z którymi rozmawiam na temat analizy obrazu, przetwarza zdjęcia medyczne po ich uprzednim przekonwertowaniu z formatu DICOM do jednego z bardziej popularnych formatów, takich jak BMP, JPEG, TIFF. Jest to związane z jednej z strony z nabytymi przyzwyczajeniami do reprezentacji obrazu w skali szarości w zakresie od 0 do 255 (w DICOM często mamy inną skalę), a z drugiej strony z faktem, że dostępne oprogramowanie nie zawsze wspiera format DICOM. Jednakże, jeśli sami tworzymy algorytmy 'od zera' implementując je np. w C++ lub zastanawiamy się nad tworzeniem bardziej złożonego oprogramowania, warto wprowadzić natywną obsługę formatu DICOM. Przyniesie nam to wiele korzyści, m.in.:
  • dostęp do pełnej informacji obrazowych
  • dostęp do opisu zdjęcia w tym samym pliku
  • przyspieszenie obliczeń (pomijamy etap konwersji)
Oczywiście sami nie musimy implementować funkcji obsługujących DICOM - wystarczy, że skorzystamy z jednej z gotowych bibliotek programistycznych, która już taką obsługę oferuje.

Poniżej, chciałbym przedstawić cztery biblioteki, które mogą zainteresować czytelnika. Trudno mi wskazać, która z nich jest bezwzględnie najlepsza, ponieważ każda z nich sprawdza się lepiej od innych w zastosowaniach, do których została przygotowana.

DCMTK (DICOM Toolkit)
  • najbardziej kompleksowa biblioteka ze wszystkich opisywanych; implementuje największą cześć standardu DICOM
  • poza biblioteką programistyczną, cześć funkcjonalności jest gotowa od razu do użycia dzięki przygotowanym programom konsolowym
  • wykorzystywana przez takie programy jak: OsiriX, Medical Studio
  • kompilacja z użyciem CMake
  • licencja BSD
  • strona WWW
GDCM (Grass roots DiCoM)
  • dobra obsługa standardu DICOM
  • biblioteka 'lżejsza' od DCMTK
  • w odróżnieniu do DCMTK brakuje obsługi DICOM network file exchange protocol i DICOM media storage formats (więcej informacji)
  • podobnie jak w DCMTK dostępna jest grupa narzędzi konsolowych
  • jest ona domyślnie wbudowana w ITK oraz VTK
  • przygotowany interfejs (ang. wrapping) dla Pythona
  • kompilacja z użyciem CMake
  • licencja BSD
  • strona WWW
(X)MedCon
  • biblioteka C++, oraz przeglądarka DICOM
  • dobra integracja z biblioteką GTK+
  • jest wykorzystywana przez CImg do obsługi DICOM
  • licencja LGPL
  • strona WWW
OpenDicom.Net
  • biblioteka C# - została uwzględniona w analizie, ponieważ jest tworzona z wykorzystaniem Mono, co czyni ją niezależną od systemu operacyjnego
  • oferuje również przeglądarkę DICOM oraz zestaw narzędzi konsolowych
  • strona WWW
Podsumowując przedstawione powyżej narzędzia, można zauważyć, że ich stopień złożoności jest różny, przez co ich wykorzystanie również może być inne. Z biblioteką GDCM warto bliżej się zapoznać, jeśli korzystamy lub planujemy korzystać z tandemu VTK - ITK. Tworząc bardziej zaawansowane aplikacje, które będą łączyć sie z serwerami PACS, najlepszym rozwiązaniem będzie skorzystanie z DCMTK. Osoby, które nie tworzą aplikacji pod klienta, a jedynie projektują algorytmy, powinny być zadowolone z możliwości MedCon, szczególnie po jej połączeniu z CImg. OpenDicom.Net będzie najlepszym wyborem dla programistów platformy .NET, którzy nie chcą uzależniać swoich aplikacji od systemu Windows.

Co ważne, wszystkie opisywane powyżej biblioteki, ze względu na swoje licencje (BSD, LGPL) mogą być wykorzystywane w aplikacjach komercyjnych.

piątek, 1 sierpnia 2008

OpenCV

2 komentarze
Pisałem już o bibliotekach 2D oraz 3D, natomiast dzisiaj przyszła kolej na obsługę wideo. W tym zakresie nie mam dużego doświadczenia, ale nie trzeba było długo szukać w Internecie, aby ocenić, która biblioteka jest najpopularniejsza i jakich ma konkurentów. W kategorii 'Analiza obrazu w czasie rzeczywistym' wyraźnie na prowadzenie wysuwa się OpenCV - narzędzie opracowane i udostępnione na licencji BSD przez firmę Intel.

Zastanówmy się teraz, czy ogromna popularność biblioteki przekłada się na jej jakość. Pierwszym czynnikiem, który może o tym świadczyć, jest duża ilość obsługiwanych kamer - wystarczy tania kamerka internetowa, aby napisać swój pierwszy program. Następnym czynnikiem jest szybkość działania. Biblioteka OpenCV została zoptymalizowana, żeby działać w czasie rzeczywistym i w zdecydowanej większości przypadków się sprawdza. Świadczyć może o tym m.in. częste jej stosowanie do sterowania robotami. Ważną cechą OpenCV jest również to, że posiada bogaty zestaw wbudowanych funkcji przetwarzania obrazu, zarówno tych podstawowych (filtracje, wykrywanie krawędzi, operacje morfologiczne), jak i bardziej złożonych (detekcja obiektów, analiza ruchu).

Co do konkurencyjnych bibliotek, trudno mi wskazać taką, która miałaby chociaż część funkcjonalności OpenCV.

Materiały: