Sprawozdanie z realizacji projektu Bartłomiej Trzewiczek Kraków, 30.06.2015 Wtyczka Crop3D Wstęp Celem projektu było napisanie wtyczki do programu ImageJ pozwalającej na obcięcie tła i maksymalne skadrowanie obrazów 3D (stacków). Wtyczka na podstawie zadanego koloru tła samodzielnie odnajduje parametry przycięcia obrazu. Duży nacisk położony został na wydajność. Wielowątkowa praca rozszerzenia znacząco przyśpiesza obliczenia co w efekcie pozwala na szybkie przetworzenie nawet plików o dużych rozmiarach. Implementacja Wtyczka napisana została w języku Java. Sam algorytm znalezienia parametrów maksymalnego możliwego przycięcia przedstawia się następująco: przeszukujemy każdy slajd w poszukiwaniu pikseli o innej wartości niż zdefiniowana wartość tła; na tej podstawie dla każdego slajdu znalezione zostają maksymalne parametry przycięcia; wszystkie znalezione w ten sposób wartości są interpretowane co prowadzi do wyznaczenia ogólnych, globalnych parametrów przycięcia. Każdy slajd przetwarzany jest w osobnym wątki, co pozwala znacząco przyśpieszyć obliczenia. Rysunek 1: Główne okno dialogowe wtyczki
Wtyczka operuje na dowolnym typie obrazu. Operuje jednakże wyłącznie na obrazach 3D (stos obrazów). Rozszerzenie można uruchomić z poziomu menu Pugins, gdzie znajduje się wpis Crop3D. Wtyczka dostarcza kilka dodatkowych rozwiązań ułatwiających jej wykorzystanie i zwiększających jej możliwości. Użytkownik ma możliwość podania wartości tolerancji. Wówczas za tło zastaną uznane wszystkie piksele o wartościach ograniczonych tolerancją w stosunku do koloru źródłowego. Ustalenie koloru tła może odbyć się w dwojaki sposób. Użytkownik ma możliwość ręcznego wprowadzenia wartości koloru RGB (domyślnie ustawiony jest kolor czarny). Dodatkowo istnieje możliwość pobrania aktualnego koloru pierwszego tła z pipety programu ImageJ. Po zatwierdzeniu wprowadzonych parametrów wtyczka przystępuje do obliczeń parametrów przycięcia. W momencie zakończenia działania wyświetlane jest drugie okno dialogowe. Użytkownik może potwierdzić chęć faktycznego przycięcia obrazu lub też zaniechać dalszych operacji. Okno dialogowe zawiera informacje o slajdach, które będą zawarte w nowym stacku. Istnieje możliwość wykonania przycięcia w aktualnie otwartym obrazie jak również stworzenie nowego, scropowanego stacku. Na obraz źródłowy naniesione zostaje zaznaczenie (ROI) obrazujące obszar przycięcia. Pozwala to na zapoznanie się z wynikiem dostarczonym przez wtyczkę. Rysunek 2: Wyznaczony obszar przycięcia obrazu 2
Wyniki Wtyczka została wszechstronnie przetestowana. W ramach testów przygotowanych zostało kilkanaście obrazów testowych przygotowanych w taki sposób, aby sprawdzić zachowanie wtyczki w jak największej ilości sytuacji nietypowych. Wszystkie przeprowadzone testy zostały zakończone powodzeniem. Nie zaobserwowano żadnego niepokojącego działania czy błędnych wyników końcowych. W niniejszym raporcie przedstawiono tylko 2 wybrane przypadki testowe. Pierwszy z nich to biały sześcian umieszczony na czarnym tle. Wtyczka prawidłowo ustaliła parametry przycięcia. Rysunek 3: Przypadek testowy (sześcian) wraz z efektem końcowym Prawidłowe rezultaty otrzymano również dla zdjęcia rentgenowskiego kości. 3
Rysunek 4: Przypadek testowy (zdjęcie rentgenowskie kości) wraz z efektem końcowym Problemy i perspektywy rozwoju W trakcie opracowywania wtyczki spotkano się z kilkoma problemami, w większości wynikającymi z ograniczonego API dostarczonego przez program ImageJ. Okna dialogowe stworzone zostały przy użyciu dostarczanej przez API klasy GenericDialog. Okazuje się jednak, iż takie okno nie pozwala na aktywowanie w czasie swojego istnienia innego okna w ramach programu ImageJ (np. okna z obrazem czy głównego okna ImageJ). Ograniczenie to w pewien sposób zmniejsza funkcjonalność wtyczki w momencie prezentacji proponowanego obszaru przycięcia (drugie okno dialogowe). Użytkownik oczekuje raczej możliwości przejrzenia stosu i dopiero wówczas podjęcia decyzji o ewentualnym przycięciu. Obecna wersja wtyczki niestety nie pozwala na takie działanie. Możliwy jest dalszy rozwój przedstawionej wtyczki poprzez rozbudowywanie jej funkcjonalności i użyteczności. W takim przypadku wskazanym wydaje się wyeliminowanie opisane w poprzednim paragrafie ograniczenia wynikającego z użycia klasy GenericDialog, poprzez obsługę okien dialogowych przy użyciu biblioteki AWT. Na obecnym etapie zaawansowania wtyczki jest to jednak rozwiązanie dosyć czasochłonne. 4
Dodatkowe informacje Przesłane materiały zawierają kompletny kod opracowanego programu wraz z gotowym do użycia plikiem.jar. Kilka przykładowych obrazów testowych z powodu ich rozmiarów umieszczonych zostało na internetowym dysku OneDrive pod adresem: https://onedrive.live.com/redir?resid=7ffbe76c8a015b93!100673&authkey=!ahczhjdtjwur_eu&it hint=folder%2ctif 5