środa, 22 października 2008

Wyświetlanie obieków 3D w CImg

0 komentarze
Korzystając z CImg dane przestrzenne (po uprzedniej rekonstrukcji algorytmem marching cubes) można zwizualizować na kilka sposobów. CImg obsługuje następujące tryby:
Na poniższej animacji możemy zobaczyć jak to działa:



Szczegóły najlepiej wyjaśni kod źródłowy:)

wtorek, 21 października 2008

Operowanie na voxelach w CImg

0 komentarze
Operowanie na voxelach, czyli punktach w obrazach przestrzennych, może być równie proste jak operowanie pikselami obrazów 2D. Oczywiście najlepiej jeśli dysponujemy narzędziem, które nas w tym będzie wspierać na każdym kroku. W tym momencie chciałbym ponownie zareklamować bibliotekę CImg, o której pisałem już jakiś czas temu. Ma ona kilka zalet, które sprawią, że nasza praca z danymi przestrzennymi będzie naprawdę przyjemna.
  1. Definicja nowego obrazka pozwala na określenie nie tylko szerokości oraz wysokości, ale również długości dla naszych danych

    CImg<> img(60,60,60); //x,y,z

  2. Część filtrów i funkcji posiada wsparcie dla obrazów przestrzennych. Dla przykładu, aby wykonać dylatację dla takich danych, należy wcześniej zdefiniować element strukturalny w 3D i przekazać go do funkcji.

    CImg<> mask(5,5,5,1,1);img.dilate(mask);

  3. CImg posiada zaimplementowany algorytm marching cubes, dzięki czemu możemy zrekonstruować dane do obiektu 3D.
  4. Korzystając z funkcji display_object3d mamy możliwość wyświetlania obiektu, a następnie przy pomocy myszki możemy go skalować, obracać i przesuwać.
Na poniższym obrazku możemy zobaczyć efekty dylatacji oraz erozji dla wcześniej przygotowanych danych przestrzennych.


Kod źródłowy tego przykładu jest dostępny na stronie Wiki.

niedziela, 19 października 2008

Jeden za wszystkich: Multixterm

2 komentarze
Zarządzanie systemem linuksowym, z którego korzysta bardzo wielu użytkowników może być wymagające. Dodatkowo gdy uwzględnimy fakt, że takich systemów mamy kilkadziesiąt, to bez wprowadzenia dodatkowych narzędzi, zarządzanie tym wszystkim może być uciążliwe.

Jako przykład weźmy pod uwagę sale komputerowe na Uczelni. Zakładając, że mamy jedno konto, z którego korzystają wszyscy studenci, wystarczy przed każdymi zajęciami skasować i ponownie utworzyć konto student. Możemy to zrobić za pomocą poleceń:

sudo deluser studentsudo adduser student

Bardzo pomocne w tym celu może okazać się połączenie przez SSH, które pozwoli nam na wykonanie tych operacji z jednego komputera, po kolei na wszystkich maszynach. Wcześniej jednak musimy zainstalować serwer SSH, na każdym komputerze z osobna, co niestety będzie wymagało zalogowania się na konto z uprawnieniami administratora i wpisania następującego polecenia w okienku terminala:

sudo apt-get install ssh openssh-server

Pomimo tego, że mamy już skonfigurowany SSH i możemy podłączyć się do każdego komputera nie ruszając się z miejsca, to problem ciągle istnieje. Musimy powtórzyć te same operacje, dla każdej maszyny osobno.

Rozwiązaniem tego problemu może być skrypt Multixterm, będący częścią pakietu Expect. Instalację przeprowadzamy wpisując w terminalu:

sudo apt-get install expect expect-dev expectk

Następnie przygotowujemy skrypt Multixterm, który po domyślnej instalacji w Ubuntu 8.04 z niewiadomych przyczyn znajduje się w archiwum (w Ubuntu 6.10 było wszystko OK).

sudo gunzip /usr/share/doc/expect-dev/examples/multixterm.gz
sudo chmod +x /usr/share/doc/expect-dev/examples/multixterm
sudo ln -s /usr/share/doc/expect-dev/examples/multixterm /bin/multixterm

W tym momencie możemy przetestować jego działanie wpisując następujące polecenie:

multixterm -xc "ssh administrator@%n" adres_ip_1 adres_ip_2 adres_ip_n

Użytkownika administrator zmieniamy na innego, który ma możliwość zarządzania komputerem.

Polecenie to otwiera otwiera nam tyle okenek terminala ile podaliśmy adresów IP. Dodatkowo pojawia się jedno okienko główne do wpisywania poleceń.


Jest już całkiem nieźle. Mamy to o co nam chodziło od samego początku - zarządzamy wszystkimi komputerami tak, jakbyśmy pracowali na jednym. Jest jeszcze jeden mały problem. Podczas zakładania użytkownika, program adduser odpytuje nas o informacje o użytkowniku, takie jak login, hasło, i inne. Najlepiej jakby udało się to w jakiś sposób ominąć i wpisać wszystko w linii komend. Takie możliwości ma inny skrypt do zakładania użytkowników: useradd. Jego użycie znacznie ułatwi nam przygotowanie automatycznego skryptu do czyszczenia konta studenta. Gotowy skrypt może wyglądać np. tak:

#!/bin/bash

echo "Kasowanie uzytkownika student"
sudo rm -r /home/student/
sudo deluser student
sudo delgroup student

echo "Dodawanie uzytkownika student"
sudo useradd -m -d /home/student -s /bin/bash -c "student" student
(echo "student:haslo")|sudo chpasswd
sudo rm /home/student/Desktop/*
sudo rm /home/student/Pulpit/*

Taki skrypt możemy zapisać na każdym komputerze w katalogu domowym użytkownika z uprawnieniami administratora i po zalogowaniu za pomocą Multixterm wystarczy go uruchomić.

Na koniec warto skonfigurować połączenie SSH w taki sposób, aby łączyć się z poszczególnymi komputerami bez podawania hasła. Więcej można o tym przeczytać na polskim forum Ubuntu w howto "ssh tips".

Prawdopodobnie cały ten proces da się jeszcze bardziej usprawnić. Jeśli macie jakieś pomysły to proszę o podpowiedź w komentarzu.

czwartek, 9 października 2008

CMake w Ubuntu Hardy

3 komentarze
Instalacja CMake z domyślnych repozytoriów w Ubuntu 8.04 nie daje satysfakcjonujących efektów - brakuje nam dwóch aplikacji: ccmake i cmake-gui. Pierwsza z nich to interfejs konsolowy (biblioteka: ncurses), natomiast druga to interfejs okienkowy (biblioteka: Qt).

Lepiej już sytuacja wygląda gdy sami skompilujemy wersję źródłową. Pojawia się ccmake, ale ciągle nie ma cmake-gui.

Dlatego najlepszym rozwiązaniem wydaje się skorzystanie z przygotowanej wersji binarnej, którą możemy pobrać ze strony projektu. Po pobraniu rozpakowujemy archiwum i przechodzimy do katalogu:

tar -xzvf cmake-2.6.2-Linux-i386.tar.gz
cd cmake-2.6.2-Linux-i386/

W następnym kroku kopiujemy poszczególne katalogi w odpowiednie miejsca w naszej strukturze plików:

sudo cp bin/* /usr/bin/
sudo cp -R doc/cmake-2.6/ /usr/share/doc/
sudo cp -R man/man1/ /usr/share/man/
sudo cp -R share/* /usr/share/

Teraz już powinno wszystko działać bez zarzutów. Warto sprawdzić czy programy cmake, ccmake, cmake-gui są dostępne z linii komend i czy w Aplikacjach, w dziale Programowanie widnieje skrót do cmake.

środa, 8 października 2008

Why Linux is Better?

0 komentarze
Jeśli korzystanie z Linuksa stało się dla Ciebie zupełnie naturalne i dawno nie miałeś do czynienia z alternatywnymi systemami operacyjnymi (Windows, Mac OS) to możesz nie czuć różnicy. W dodatku kiedy znajomi pytają Cię dlaczego właśnie Linuks i czy ten system może być odpowiedni również dla nich, sporą listę argumentów znajdziesz na stronie: www.whylinuxisbetter.net (dostępna polska wersja językowa).

poniedziałek, 6 października 2008

Czas na zmiany - KDE 4

0 komentarze
Po zainstalowaniu ostatniej wersji Ubuntu (8.04.1) na domowym komputerze, nadszedł również czas na zmiany na laptopie, którego używam na co dzień. Jak dotąd korzystałem na nim z niewspieranej od jakiegoś czasu wersji 6.10 oraz Windowsa XP, od którego nie zdążyłem się jeszcze zupełnie odzwyczaić. Skoro i tak postanowiłem już zmienić swoje środowisko pracy, to dlaczego nie pójść na całość i nie wybrać czegoś zupełnie świeżego? KDE w wersji 4.1 - bo to właśnie o nim mowa - jest już na tyle stabilnym środowiskiem graficznym, że nadaje się do codziennego użytku, chociaż do stabilności Gnome jeszcze trochę mu brakuje.

Początek oczywiście nie był łatwy: myszka odruchowo wędrowała do lewego górnego rogu ekranu w poszukiwaniu menu programów, zegara również szukałem na górze, a szaro-czarny motyw okien z niebieską tapetą to nie było to do czego się przyzwyczaiłem w Gnome. Moje oczy latały w kółko nie mogąc przyzwyczaić się do nowego wyglądu.

Kiedy już minął pierwszy etap asymilacji, przyszedł czas na bliższe poznanie systemu i jego możliwości, szczególnie w kontekście czynności, które wykonuję na co dzień.

Internet:

Już na początku zaskoczył mnie nie najlepszy wygląd Firefoxa, który w Linuksie korzysta z kontrolek GTK. Wystarczyło jednak skonfigurować gtk-qt-engine-kde4 oraz zainstalować motyw graficzny kde-firefox, aby otrzymać w miarę natywny wygląd.

Praca zdalna:

Bardzo miłą niespodzianką była dla mnie znakomita obsługa serwerów FTP oraz SSH w menadżerze plików Dolphin, który czyni pracę ze zdalnymi katalogami prawie tak naturalną jak z katalogami lokalnymi. Najlepszym tego przykładem może być możliwość edycji plików na serwerze FTP bez ich kopiowania tam i z powrotem. Kolejną nowością jest dla mnie możliwość oglądania filmów wprost z serwera, z czym całkiem nieźle radzi sobie JuK.

Konsola:

Długo nie musiałem szukać zamiennika dla interaktywnej konsoli Tilda, do której przyzwyczaiłem się w Gnome. Yakuake w KDE świetnie się spisuje.
Edytor tekstu:

W Gnomie zawsze brakowało mi naprawdę dobrego edytora tekstu. Ratunkiem okazał się JEdit, który pomimo tego, że miał wszystko czego potrzebowałem, w wielu zastosowaniach po prostu okazywał się za ciężki. Kate w końcu wypełniła tą lukę. Jakby nie okresowe zawieszenia przy obsłudze sesji, byłbym w pełni usatysfakcjonowany.

Po dwóch tygodniach korzystania z KDE jestem z niego naprawdę zadowolony i polecam wszystkim, którzy z jednej strony potrzebują wydajnego systemu do codziennej pracy, a z drugiej strony nie boją się eksperymentować. W tym czasie tylko kilka razy zdarzyło mi się przełączyć na Gnome i ani razu na Windowsa.

Na koniec zamieszczam jeszcze screen z Dolphina, z włączoną opcją podglądu dla aktualnie zaznaczonego pliku. Co ciekawe nie widzimy kodu html, tylko już wyrenderowaną stronę z uwzględnieniem styli i naniesionymi obrazkami.

ś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:

poniedziałek, 28 lipca 2008

Visualization ToolKit - VTK

0 komentarze
Najlepsze narzędzie w kategorii: Wizualizacja 3D

VTK (Visualization ToolKit), podobnie jak Insigh Toolkit, o którym pisałem ostatnio, został zaprojektowany we współpracy amerykańskich uczelni i firmy Kitware w celu przygotowania ujednoliconego narzędzia wizualizacyjnego na potrzeby diagnostyki medycznej. Jego modułowa budowa i wielość różnych funkcji, czyni z niego uniwersalne narzędzie, które może być z powodzeniem wykorzystywane w każdej dziedzinie zastosowań, gdzie pojawia się potrzeba obejrzenia danych wejściowych, bądź też wyników obliczeń.

Technicznie rzecz biorąc, VTK nie jest gotowym programem okienkowym gotowym do użycia, a jedynie biblioteką programistyczną, którą możemy wykorzystać w naszych własnych programach lub skryptach. Stanowi on nadbudowę na OpenGl, co daje gwarancję szybkości działania i przenośności na różne platformy sprzętowo-programowe.

Zalety:
  • Interfejsy programistyczne dla C++, Java, Python, Tcl
  • Możliwość pisania skryptów z wykorzystaniem Pythona, bądź Tcla
  • Programowanie potokowe (wyjście jednej funkcji staje się wejściem następnej)
  • Wsparcie dla przetwarzania równoległego dzięki zastosowaniu standardu MPI
  • Oficjalne wsparcie dla następujących bibliotek GUI: MFC, Qt, Tcl/TK, KWidget. W Internecie można znaleźć przykłady połączenia z innymi bibliotekami, m.in. GTK, WxWidget, Fltk. Więcej informacji: VTK Wiki
  • Wykorzystywany w wielu zaawansowanych programach, zarówno darmowych jak i komercyjnych (m.in. ParaView, VolView, Slicer3D, OsiriX, Aphelion). Więcej informacji: VTK Wiki
  • Łatwa integracja z Insight ToolKit
  • Bardzo dobra dokumentacja
  • Licencja (BSD) pozwala na zamknięcie kodu
Wady:
  • Pomimo dobrej dokumentacji i licznych przykładów, poznanie możliwości VTK wymaga sporo czasu
Konkurencja:
Porównanie VTK i konkurencji można znaleźć w artykule: "Comparing and evaluating computer graphics and visualization software", Robert S. Laramee, Software-Practice & Experience, John Wiley & Sons, Inc.

Materiały:

środa, 23 lipca 2008

Insight Toolkit

0 komentarze
Najlepsze narzędzie w kategorii: Analiza obrazu - segmentacja, Analiza obrazu - dopasowanie

Insight Toolkit (ITK) jest wspólną inicjatywą amerykańskich naukowców (Uniwersytet Utah, Uniwersytet Pensylwania, inne) mającą na celu ujednolicenie narzędzi przetwarzania obrazu dla potrzeb diagnostyki obrazowej. Główny nacisk został położony na opracowanie algorytmów segmentacji obiektów (ang. image segmentation) oraz dopasowania dwóch obrazów (ang. image registration).

Warto wspomnieć, że w odróżnieniu od Pandory, jest to tylko biblioteka programistyczna C++, a nie gotowe narzędzie. Korzystanie z niej wymaga podstawowych umiejętności programistycznych od użytkownika.

Zalety:
  • Przygotowane interfejsy programistyczne dla Javy, TCLa i Pythona
  • Korzystając z TCLa można pisać skrypty
  • Wykorzystywana w wielu zaawansowanych narzędziach (m.in. Slicer3D, OsiriX)
  • Możliwość potokowego konstruowania algorytmów (wyjście jednej funkcji staje się wejściem następnej)
  • Duże wsparcie finansowe amerykańskich instytucji medycznych daje gwarancje ciągłego rozwoju
  • Pozwala na zamkniecie kodu (licencja BSD)
Wady:
  • Mała ilość operatorów morfologicznych
  • Trudna do nauczenia
Konkurencja:
  • W tym momencie w dziedzinie segmentacji i dopasowania biblioteka ITK jest bezkonkurencyjna
Materiały:

poniedziałek, 21 lipca 2008

Pandore

0 komentarze
Najlepsze narzędzie w kategorii: Analiza obrazu - morfologia matematyczna

Pandore - kolejne narzędzie po CImg opracowywane na Uniwersytecie w Caen we Francji jest przeznaczone do tworzenia kompleksowych algorytmów analizy obrazu. Wielość dostępnych operatorów (ok. 350) pozwala jej na konkurowanie z wieloma komercyjnymi narzędziami, szczególnie w zakresie morfologii matematycznej.

Zalety:
  • Możliwość tworzenia skryptów w Bash (Linux), bądź też DOS (Windows)
  • Dostępny graficzny interfejs Ariane, pozwalający na konstruowanie algorytmów z wykorzystaniem schematów blokowych
  • Pandore jest również biblioteką programistyczną C++, co ułatwia opracowywanie interfejsów graficznych dla tworzonego algorytmu
Wady:
  • Brak okienkowego narzędzia, które pozwalałoby na bardziej intuicyjną pracę z programem (dobór parametrów, podgląd rezultatów)
  • Wymaga dystrybucji kodu programu wraz z wersją wykonywalną (licencja CeCILL). Wymaganie to dotyczy programów w C/C++, a nie skryptów.
Konkurencja:

Biblioteki w C/C++ zawierające funkcje morfologii matematycznej:
Materiały:

sobota, 19 lipca 2008

CImg

0 komentarze
Najlepsze narzędzie w kategorii: Programowanie grafiki rastrowej

Niewiarygodne jest to, jak ta mała biblioteka potrafi ułatwić życie podczas konstruowania nowych algorytmów przetwarzania obrazu. Nie tylko wspiera ona odczyt i zapis dokumentów oraz ich przechowywanie w wygodnej do operowania tablicy dwuwymiarowej, ale potrafi również wyświetlać obrazki i obsługuje zdarzenia myszki i klawiatury.

Zalety:
  • Wyświetlanie obrazków i obsługa zdarzeń myszy
  • Obsługa formatu DICOM (po zainstalowaniu pluginu XMedCon)
  • Wbudowany zestaw filtrów graficznych
  • Możliwość rysowania prostych kształtów (punkt, linia, prostokąt, elipsa, strzałka)
  • Wyświetlanie obiektów w 3D
  • Dobrze dopracowana obiektowość (szablony klas i funkcji, przeładowanie operatorów, konstruktory kopiujące i inne)
  • Prosta w użyciu - wystarczy dołączyć plik cimg.h
  • Pozwala na zamknięcie kodu (licencja CeCILL-C)
Wady:
  • CImg domyślnie potrafi czytać i zapisywać kilka rodzajów plików (m.in. BMP). Obsługa pozostałych formatów graficznych (w tym JPG, GIF, PNG, TIF) możliwa jest dopiero po zainstalowaniu ImageMagicka.
  • Brak przykładów integracji z bibliotekami do tworzenia interfejsu użytkownika (Visual Studio, Borland)
Konkurencja:
Informacje dodatkowe:

piątek, 18 lipca 2008

Najlepsze w swojej klasie

0 komentarze
W ostatnim czasie wiele uwagi poświęciłem na przegląd różnego rodzaju narzędzi (bibliotek programistycznych, aplikacji okienkowych) wspomagających prace w dziedzinie przetwarzania i analizy obrazu. Moje doświadczenia postaram się opisać w kolejnych wpisach wskazując ich wady, zalety i konkurencję. Priorytetem w ich wyborze zawsze były otwarte źródła (Open Source), niezależność od platformy systemowej oraz implementacja w C/C++.

Narzędzi komercyjnych nie analizowałem z kilku powodów. Aby uwzględnić je w porównaniach musiałbym wykupić licencję każdego z nich, lub testować wersje demonstracyjne z ograniczoną funkcjonalnością. Żadna z tych opcji nie wydaje się dobrym pomysłem. Z drugiej strony analizując oprogramowanie z dostępnym kodem źródłowym zauważyłem, iż szybciej wprowadzane są tutaj najnowsze algorytmy, aniżeli we własnościowym oprogramowaniu.

Osoby, które miały styczność z prezentowanymi przeze mnie narzędziami zapraszam do podzielenia się swoimi doświadczeniami w komentarzach.

poniedziałek, 4 lutego 2008

Creative Common - poczuj różnicę

3 komentarze
Tradycyjny ©Copyright (jedna z wielu wersji):

"Utwór w całości ani we fragmentach nie może być powielany ani rozpowszechniany za pomocą urządzeń elektronicznych, technicznych, kopiujących, nagrywających i innych, w tym również nie może być umieszczany ani rozpowszechniany w postaci cyfrowej zarówno w Internecie, jak i w sieciach lokalnych bez pisemnej zgody posiadacza praw autorskich."

Licencja Creative Common (uznanie autorstwa, użycie niekomercyjne):

Wolno:
  • kopiować, rozpowszechniać, odtwarzać i wykonywać utwór
  • tworzyć utwory zależne
Na następujących warunkach:
  • Uznanie autorstwa. Utwór należy oznaczyć w sposób określony przez Twórcę lub Licencjodawcę
  • Użycie niekomercyjne. Nie wolno używać tego utworu do celów komercyjnych.
Czy czujesz różnicę?

Czy zdecydowałeś na jakich warunkach opublikujesz swój najnowszy utwór? Oni wybrali Creative Common. Decyzja należy do Ciebie.

wtorek, 29 stycznia 2008

Google indeksuje strony wg licencji

2 komentarze
To było miłe zaskoczenie, gdy wczoraj w opcjach zaawansowanych wyszukiwarki Google dostrzegłem możliwość wyboru licencji (opcja: Prawa używania), na której dostępna jest poszukiwana treść. Jak dotąd problem polegał na tym, że wchodząc na dowolną stronę nie było wiadomo co wolno, a co nie (kopiować, rozpowszechniać, itp.). Natomiast teraz, dzięki oznaczeniu swojej strony jedną z licencji Creative Common i indeksowaniu takiej informacji przez roboty wyszukiwarki Google, autor może zdecydować jak chce swoją treść udostępniać innym (kilka możliwości w zależności od wyboru opcji licencji). Z drugiej strony osoby poszukujące informacji w Internecie mogą na wstępie sprecyzować swoje wymagania co do licencji i spokojnie korzystać z wyników, które wskaże Google.