Analiza i Przetwarzanie Obrazów

Podobne dokumenty
CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

Algorytm selekcji Hoare a. Łukasz Miemus

Programowanie w VB Proste algorytmy sortowania

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Algorytmy sortowania w języku C. Autor: mgr inż. Sławomir Samolej. Zagadnienie 1. (Sortowanie)

Struktury Danych i Złożoność Obliczeniowa

ALGORYTMY I STRUKTURY DANYCH

Algorytmy i Struktury Danych.

Wstęp do programowania

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy sortujące i wyszukujące

Strategia "dziel i zwyciężaj"

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Spośród licznych filtrów nieliniowych najlepszymi właściwościami odznacza się filtr medianowy prosty i skuteczny.

PODSTAWY INFORMATYKI wykład 10.

Logika funkcji. Modelowanie SI - GHJ 1

Akademia Górniczo - Hutnicza im. Stanisława Staszica w Krakowie. Projekt. z przedmiotu Analiza i Przetwarzanie Obrazów

Złożoność obliczeniowa zadania, zestaw 2

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Optymalizacja. Przeszukiwanie lokalne

Analiza algorytmów zadania podstawowe

Metody Metody, parametry, zwracanie wartości

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Programowanie dynamiczne cz. 2

Programowanie Proceduralne

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

WYKŁAD 3. Przykłady zmian w obrazie po zastosowaniu Uniwersalnego Operatora Punktowego

Podstawowe algorytmy i ich implementacje w C. Wykład 9

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)

Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie. dr inż. Adam Piórkowski. Jakub Osiadacz Marcin Wróbel

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Wykład 2. Poprawność algorytmów

Projektowanie aplikacji internetowych laboratorium

Bloki anonimowe w PL/SQL

Wtyczka Crop3D. Wstęp. Implementacja. Sprawozdanie z realizacji projektu Bartłomiej Trzewiczek Kraków,

Zasady analizy algorytmów

Sortowanie przez scalanie

Instrukcja do ćwiczeń

INFORMATYKA SORTOWANIE DANYCH.

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

EGZAMIN MATURALNY OD ROKU SZKOLNEGO

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

RÓWNANIA NIELINIOWE Maciej Patan

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Przykładowe sprawozdanie. Jan Pustelnik

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

PHP: bloki kodu, tablice, obiekty i formularze

Wprowadzenie do złożoności obliczeniowej

Filtracja obrazów. w dziedzinie częstotliwości. w dziedzinie przestrzennej

Wstęp do programowania

Algorytmy i Struktury Danych.

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)


Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Wstęp do programowania

Podstawy programowania. Przykłady algorytmów Cz. 2 Sortowanie

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Rekonstrukcja obrazu (Image restoration)

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Algorytmy i Struktury Danych. (c) Marcin Sydow. Introduction. QuickSort. Sortowanie 2. Limit. CountSort. RadixSort. Summary

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Zaawansowane aplikacje WWW - laboratorium

Politechnika Świętokrzyska. Laboratorium. Cyfrowe przetwarzanie sygnałów. Ćwiczenie 8. Filtracja uśredniająca i statystyczna.

Algorytmy i struktury danych

Algorytm i złożoność obliczeniowa algorytmu

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Algorytmy i Struktury Danych. Anna Paszyńska

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Rekurencja. Przygotowała: Agnieszka Reiter

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Algorytmy i Struktury Danych

Strategie ewolucyjne. Gnypowicz Damian Staniszczak Łukasz Woźniak Marek

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PRZEKROJOWY.

SQL SERVER 2012 i nie tylko:

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Efektywna metoda sortowania sortowanie przez scalanie

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Matematyczne Podstawy Informatyki

Algorytmy i Struktury Danych.

Programowanie obiektowe

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 8 AiR III

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Wstęp do programowania

Transkrypt:

Analiza i Przetwarzanie Obrazów Projekt: Filtr medianowy bez sortowania listy sąsiadów Paweł Jóźwik Zawartość 1 Wstęp.... 2 2 Wyniki działania.... 3 3 Wnioski.... 5

1 Wstęp. Celem projektu było napisanie algorytmu filtru medianowego nie korzystającego z sortowania jako metody znalezienia mediany tablicy sąsiadów. Najbardziej intuicyjną metodą wyznaczenia mediany jest posortowanie danej tablicy i wyznaczenie mediany jako element środkowy. Jednak algorytmy sortujące, wykorzystujące porównania, w optymistycznym przypadku ich złożoność wynosi O(n) = nlgn gdzie n jest rozmiarem tablicy. Z pomocą może przyjść algorytm Quickselect który w optymistycznym przypadku pozwala osiągnąć złożoność O(n) = n. function select(list, left, right, n) if left = right return list[left] loop pivotindex :=... // select pivotindex between left and right pivotindex := partition(list, left, right, pivotindex) if n = pivotindex return list[n] else if n < pivotindex right := pivotindex - 1 else left := pivotindex + 1 Podprocedura partition: function partition(list, left, right, pivotindex) pivotvalue := list[pivotindex] swap list[pivotindex] and list[right] // Move pivot to end storeindex := left for i from left to right-1 if list[i] < pivotvalue swap list[storeindex] and list[i] increment storeindex swap list[right] and list[storeindex] // Move pivot to its final place return storeindex Projekt został zrealizowany jako wtyczka do FIJI. Po zainstalowaniu i uruchomieniu pojawia się okno pytające o ilość iteracji w celu porównania wydajności implementacji filtru medianowego zaimplementowanego w FIJI z filtrem medianowym korzystającym z algorytmu Quickselect.

2 Wyniki działania. Algorytm przetestowano na obrazach w skali szarości zakres wartości jasności przyjmowany przez piksele nie powinien mieć wpływu na złożoność znajdowania mediany. Testy odbyły się z zastosowaniem okna 3x3 ponieważ takie jest obsługiwane przez wbudowane w ImageJ metody. W porównaniu znalazły się najlepsze czasy wykonania spośród 20 iteracji. Obraz QSelect ImageProcessor.medianFilter() blobs.gif (256x254) 2 ms 2 ms bridge.gif (512x512) 11 ms 10 ms boats.gif (720x576) 18 ms 15 ms 8kimage1_gray.gif (7680x4320) 1390 ms 1149 ms 8kimage2_gray.gif (7680x4320) 1369 ms 1020 ms 8kimage3_gray.gif (7680x4320) 1345 ms 1026 ms Obrazy 8k wykorzystane do testów: 2-1 Obraz 8kimage1_gray.gif

2-2 Obraz 8kimage2_gray.gif 2-3 Obraz 8kimage3_gray.gif

3 Wnioski. Niestety nie udało się uzyskać lepszej prędkości algorytmu niż gotowe rozwiązanie zaimplementowane w ImageJ. Jednak należy pamiętać że metoda medianfilter jest zoptymalizowana dla okien 3x3. W metodzie medianfilter mediana jest znajdowana poprzez eliminacje 4 z 9 maksimów (ustawienie wartości na 0) a następnie wyznaczenie ostatniego piątego maksima, będącego jednocześnie medianą. private final int findmedian (int[] values) { //Finds the 5th largest of 9 values for (int i = 1; i <= 4; i++) { int max = 0; int mj = 1; for (int j = 1; j <= 9; j++) if (values[j] > max) { max = values[j]; mj = j; } values[mj] = 0; } int max = 0; for (int j = 1; j <= 9; j++) if (values[j] > max) max = values[j]; return max; } 3-1 Implementacja znajdowania mediany w ImageJ dla 9 elementow 3-2 Wyniki profilera kodu dla obrazu 8kimage2_gray.gif Prawdopodobnym źródłem różnicy czasów wykonania jest niekorzystny wybór początkowego indeksu poszukiwania mediany, został on arbitralnie ustalony jako środek wejściowej tablicy ponieważ metody randomizujące (wyznaczanie początkowego indeksu w sposób pseudolosowy) algorytm okazały sie być zbyt kosztowne przy tak dużej liczbie wywołań funkcji. Jak widać na powyżej załączonym obrazie stosunek wywołań metody partition do iterativeselect wyniósł około 4.62. Interesująca jest również liczba wywołań metody swap która została uruchomiona prawie 400 tys. razy. Ciekawym aspektem byłby całkowity koszt wywołań metody swap który mógł wnieść bardzo duży wkład w końcowy czas działania algorytmu. Co prawda proponowany algorytm spisał się gorzej od gotowej implementacji jednak należy pamiętać że gotowe rozwiązanie z ImageJ jest zoptymalizowane dla sąsiedztwa 3x3 dla większych okien warto rozważyć zastosowanie algorytmu Quickselect.

4 Bibliografia https://en.wikipedia.org/wiki/quickselect