ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)



Podobne dokumenty
// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Detekcja twarzy w obrazie

i ruchów użytkownika komputera za i pozycjonujący oczy cyberagenta internetowego na oczach i akcjach użytkownika Promotor: dr Adrian Horzyk

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Implementacja filtru Canny ego

GRAFIKA RASTROWA. WYKŁAD 1 Wprowadzenie do grafiki rastrowej. Jacek Wiślicki Katedra Informatyki Stosowanej

Rysowanie punktów na powierzchni graficznej

Spis treści. Programowanie w ImageJ. Zadanie 1. Zadanie 2

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

Operacje przetwarzania obrazów monochromatycznych

3.4. Opis konfiguracji layoutów.

Analiza i przetwarzanie obrazów

Analiza obrazów. Segmentacja i indeksacja obiektów

Sortowanie i filtrowanie list

dr inż. Piotr Odya dr inż. Piotr Suchomski

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Wstawianie filmu i odtwarzanie go automatycznie

Zamiana reprezentacji wektorowej na rastrową - rasteryzacja

Wybrane zagadnienia w pracy z danymi rastrowymi w ArcGIS Marcin Paź Esri Polska

Materiały dla studentów pierwszego semestru studiów podyplomowych Grafika komputerowa i techniki multimedialne rok akademicki 2011/2012 semestr zimowy

Formaty plików graficznych - wprowadzenie

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Do obsługi plików BMP należy stworzyć klasę przechowującą zawartość obrazu i udostępniającą następujące metody:

Parametryzacja obrazu na potrzeby algorytmów decyzyjnych

Unity 3D - własny ekran startowy i menu gry

Ćwiczenie 3 - Odsyłacze

Dodawanie grafiki i obiektów

WSTAWIANIE GRAFIKI DO DOKUMENTU TEKSTOWEGO

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

Laboratorium. Szyfrowanie algorytmami Vernam a oraz Vigenere a z wykorzystaniem systemu zaimplementowanego w układzie

Podstawy Informatyki Wykład V

Formaty obrazów rastrowych biblioteki PBM

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

Programowanie w języku Python. Grażyna Koba

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Pokaz slajdów na stronie internetowej

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Ćwiczenie 1 Automatyczna animacja ruchu

Wykład 3 Składnia języka C# (cz. 2)

Algorytmy decyzyjne będące alternatywą dla sieci neuronowych

Instrukcja użytkownika

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Szybkie tworzenie grafiki w GcIde

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Diagnostyka obrazowa

Opis implementacji: Poznanie zasad tworzenia programów komputerowych za pomocą instrukcji języka programowania.

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

Visual Studio instalacja

Ćwiczenie 4 - Tabele

Tworzenie szablonów użytkownika

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Ćwiczenie 12 Różdżka, szybkie zaznaczanie i zakres koloru

Tworzenie prezentacji w MS PowerPoint

Dokumentacja WebMaster ver 1.0

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania KOMPUTEROWE SYSTEMY STEROWANIA (KSS)

Diagnostyka obrazowa

Animacja. Instrukcja wykonania animacji metodą klatek kluczowych. Autor: Bartosz Kowalczyk. Blender 2.61

Grafika komputerowa. Oko posiada pręciki (100 mln) dla detekcji składowych luminancji i 3 rodzaje czopków (9 mln) do detekcji koloru Żółty

POMOC / INSTRUKCJA OBSŁUGI

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Diagnostyka obrazowa

FORMUŁY AUTOSUMOWANIE SUMA

Obliczenia iteracyjne

Algorytmy grafiki rastrowej. Mirosław Głowacki Wykład z Grafiki Komputerowej

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

Zadania domowe. Ćwiczenie 2. Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Ćwiczenie 6. Transformacje skali szarości obrazów

BIBLIOTEKA PROGRAMU R - BIOPS. Narzędzia Informatyczne w Badaniach Naukowych Katarzyna Bernat

UONET+ moduł Dziennik. Praca z rozkładami materiału nauczania

Bitmapy - format i zastosowanie. Podstawowy format plików bitmapowych, dogodność zastosowania bitmap w prostych animacjach 2D.

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu

Edytor tekstu OpenOffice Writer Podstawy

Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.

Układy VLSI Bramki 1.0

Praktyczne przykłady wykorzystania GeoGebry podczas lekcji na II etapie edukacyjnym.

Janusz Ganczarski. OpenGL Pierwszy program

1. Opis okna podstawowego programu TPrezenter.

Zadanie 1. Stosowanie stylów

KAMERA INSPEKCYJNA MODEL: TV-EC2M INSTRUKCJA OBSŁUGI

Programowanie Obiektowe GUI

Python: JPEG. Zadanie. 1. Wczytanie obrazka

Diagnostyka obrazowa

Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji

1 Temat: Wprowadzenie do biblioteki OpenCV

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

Podstawy grafiki komputerowej. Teoria obrazu.

System wizyjny OMRON Xpectia FZx

I - Microsoft Visual Studio C++

b) Dorysuj na warstwie pierwszej (1) ramkę oraz tabelkę (bez wymiarów) na warstwie piątej (5) według podanego poniżej wzoru:

Programowanie obiektowe - zadania

Rysowanie precyzyjne. Polecenie:

Zastosowanie Informatyki w Medycynie

Ćwiczenie pochodzi ze strony

Ćwiczenia 9 - Swing - część 1

Divar - Archive Player. Instrukcja obsługi

Tabele. Przykład 15a.htm. <HTML><HEAD><TITLE> Cennik</TITLE></HEAD><BODY><H3>Cennik</H3> <TABLE BORDER="1"> <TR>

Transkrypt:

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM) LABORATORIUM 5 - LOKALIZACJA OBIEKTÓW METODĄ HISTOGRAMU KOLORU 1. WYBÓR LOKALIZOWANEGO OBIEKTU Pierwszy etap laboratorium polega na wybraniu lokalizowanego obiektu. Musi wyróżniać się on kolorem od otaczającego tła. Może to być twarz, ręka, zeszyt czy dowolny inny znacznik. 2. ZBUDOWANIE DWUWYMIAROWEGO HISTOGRAMU KOLORÓW NA PODSTAWIE DANYCH TRENUJĄCYCH Dane trenujące: w sekwencji obrazów na bieżąco analizowanych z kamery podłączonej do komputera, należy zaznaczyć K (K = 10) obszarów obejmujących dany obiekt, jak na rysunku 1. Rysunek 1 Histogram: na podstawie pikseli leżących w zaznaczonych obszarach należy zbudować dwuwymiarowy histogram o rozmiarze 16x16 dla składowych barwy r, b, gdzie:

natomiast indeksy w histogramie, jak to pokazano na rysunku 2, określone są jako i r =min(15, r*16), i b =min(15, b*16), ir i ib zredukowane do przedziału 0..15. Rysunek 2: Histogram kolorów. Dla każdego piksela N k należącego do zaznaczonych K obszarów, należy kolejno inkrementować wartości w komórkach histogramu L[ir, ib] o odpowiadającym im kolorze. Następnie histogram powinien zostać znormalizowany tak, aby suma komórek dawała 1. W tym celu wartości wszystkich komórek L[ir, ib] należy podzielić przez łączną sumę pikseli we wszystkich zaznaczonych obszarach. Ustalić próg YT określający wartość odcięcia pikseli obiektu, np. jako wartość średnia komórek histogramu pomnożona przez wybrany współczynnik (można eksperymentować z progiem). 3. GRAFICZNE PRZEDSTAWIENIE ZAWARTOŚCI HISTOGRAMU Należy umożliwić graficzne wyświetlenie zawartości histogramu (na przykład jako obraz 2D w odcieniach szarości) w oknie aplikacji. 4. LOKALIZACJA OBIEKTU PRZY POMOCY HISTOGRAMU KOLORU W każdej klatce obrazu kamery należy zaetykietować piksele mające kolor odpowiadający kolorowi obiektu przy pomocy uzyskanego histogramu. Efekt ten można uzyskać poprzez algorytm iteracyjny (jak poniżej) lub rozrostowy, tak jak było to opisane na wykładzie. Krok 1) Zbudować obraz binarny B(x, y) badanego zdjęcia: najpierw zbudować obraz w odcieniach szarości, przypisując każdemu pikselowi luminancję Y(x, y), uzyskaną jako wartość komórki histogramu odpowiadającą kolorowi piksela pomnożoną przez 255, a następnie przypisać temu pikselowi wartość 1 jeżeli Y(x,y) jest większe od progu Y T, albo wartość 0 w przeciwnym przypadku, czyli:

ir(x,y) = min(15, r(x, y)*16); ib(x,y) = min(15, b(x,y)*16); ir i ib zredukowane do przedziału 0..15. Y(x,y) = L[ir(x,y), ib(x,y)]*255; If (Y(x,y) > YT) B(x, y)=1; else B(x, y)=0; gdzie x,y oznaczają indeksy przeglądania obrazu w kierunku poziomym i pionowym, piksele zaznaczone jako jeden traktujemy jako czarne, a piksele zaznaczone jako 0 są pikselami tła ( białe ). Krok 2) Znaleźć spójne przestrzennie obszary pikseli w utworzonym obrazie binarnym. Można to zrobić za pomocą przedstawionego poniżej algorytmu. Algorytm ten przypisuje etykiety pikselom w ten sposób, aby piksele należące do tych samych obszarów miały te same etykiety. Zaznaczyć na oryginalnym obrazie obszary odpowiadające zlokalizowanym obiektom. Narysować prostokąty obejmujące poszczególne obszary o tych samych etykietach. 5. ETYKIETOWANIE OBSZARÓW SPÓJNYCH OBRAZU BINARNEGO (KROK 2 POWYŻEJ) W pierwszej kolejności należy przypisać pikselom czarnym (obraz binarny utworzony w pierwszym kroku) etykiety, w ten sposób, aby kolejne wykryte obszary spójne miały inne etykiety, zaczynając od wartości minimalnej do maksymalnej. W tym celu należy przeglądać obraz wierszami od lewej do prawej i od góry do dołu, i jeżeli: - dla piksela czarnego w sąsiedztwie pikseli wcześniej przeglądanych, pokazanych na rysunku 3, występuje piksel zaetykietowany, to przypisać etykietę piksela z sąsiedztwa mającą minimalną wartość; - w przeciwnym przypadku przypisać wartość większą o jeden od największej użytej dotychczas etykiety wartość etykiety maksymalnej musi być pamiętana. Rysunek 3. Sąsiedztwo pikseli wcześniej przeglądanych. Piksel bieżący zaznaczony kolorem czerwonym, piksele sąsiednie szarym. Na tym etapie może wystąpić połączenie obszarów o innych etykietach. Aby zniwelować ten efekt, należy przeprowadzić następny etap etykietowania iteracyjnej zmiany etykiet. Należy przeglądać obraz od lewej do prawej i z góry do dołu. Dla każdego piksela czarnego badać sąsiedztwo 8 przyległych pikseli przedstawione na rysunku 4. Jeżeli w tym sąsiedztwie występuje piksel czarny o niższej etykiecie to przypisać najniższą etykietę z tego sąsiedztwa pikselowi bieżącemu. Powtarzać iteracyjnie procedurę przeglądania obrazu dotąd, aż w całej iteracji przeglądania obrazu żadna etykieta nie będzie zmieniona. W efekcie powinny powstać spójne obszary, w których czarne piksele przyległe mają jednakowe etykiety, natomiast rozłączne obszary mają inne etykiety.

Przy implementacji powyższych algorytmów należy pamiętać o odpowiednim traktowaniu pikseli brzegowych (nie maja one wszystkich sąsiadów). Rysunek 4. Sąsiedztwo pikseli przyległych. Piksel bieżący zaznaczony kolorem czerwonym, piksele sąsiednie szarym. 6. UWAGI DO ZAŁĄCZONEJ APLIKACJI (KAMERA) Załączona do treści laboratorium aplikacja pozwala na wykorzystanie kamery podłączonej do komputera. Jednocześnie dostarcza kilku narzędzi przydatnych w czasie wykonywania laboratorium. Do poprawnej kompilacji programu wymagane jest Visual Studio w wersji minimum 2010 (dostępne w Dreamspark). W przypadku korzystania z Visual Studio w wersji 2013 proszę pamiętać, że musi być doinstalowany pakiet multibyte character set (MBCS), można go zawsze doinstalować ze strony producenta. Program nie będzie działał dla wersji Express ze względu na brak MFC przy pomocy którego stworzone jest środowisko graficzne aplikacji! Po wczytaniu aplikacji w środowisku Visual Studio (Kamera.sln) należy najpierw spróbować uruchomić program (F5 lub Debug->Start Debugging). Jeśli po wybraniu odpowiedniej kamery przechwytywany obraz wyświetlany jest na ekranie, oznacza to że wszystko zostało wykonane poprawnie i można przystąpić do realizacji ćwiczenia. Należy modyfikować pliki ImageProcessing.cpp i ImageProcessing.h. W klasie ImageProcessing znajdują się następujące elementy do implementacji: ImageProcessing(); konstruktor domyślny. Tutaj należy umieszczać inicjalizacje zmiennych klasy ~ImageProcessing(); destruktor klasy. void ZeroVariables(); - funkcja ustawiająca początkowe parametry zmiennych (np. wskaźniki na NULL) void ProcessRGBImage(int mode, unsigned char *rgb_image, int w, int h); - funkcja przetwarzania pikseli. Wywoływana za każdym razem, gdy z kamery otrzymywana jest kolejna klatka obrazu. Tablica rgb_image (wielkości w*h*3 bajty) odpowiada pikselom wyświetlanym na panelu programu. Piksele ustawione są rzędami. Każdy piksel opisany jest przez 3 bajty wartości składowej niebieskiej, zielonej i czerwonej (BGR). Funkcja wywołuje zależnie od trybu funkcję Mode1Processing, Mode2Processing lub Mode3Processing mode tryb przetwarzania obrazu (0, 1, 2) ustawiany automatycznie przez wybór odpowiedniego menu z zakładki modes. rgb_image otrzymana z kamery klatka obrazu. w, h szerokość i wysokość obrazu

void ServiceDrawnRectangle(CRect rect, unsigned char *rgb_image, int w, int h); - funkcja wywoływana za każdym razem, gdy w obrazie zaznaczony zostanie prostokąt. rect współrzędne zaznaczonego prostokąta (posiada m.in. składowe left, right, top, bottom), rgb_image ostatni z obrazów uzyskany z kamery wideo (wielkości w*h*3 bajty) w, h szerokość i wysokość tego obrazu Obraz z kamery rgb_image jest obrócony względnej współrzędnej y (pierwszy element tablicy odpowiada pierwszemu pikselowi ostatniego wiersza obrazu). Dostęp do składowych RGB piksela obrazu o współrzędnych (x, y) otrzymujemy poprzez: R = rgb_image[(x + (h-y-1)*w)*3 + 2]; G = rgb_image[(x + (h-y-1)*w)*3 + 1]; B = rgb_image[(x + (h-y-1)*w)*3]; Funkcję Mode1Processing można zaimplementować jako lokalizację obiektu. W funkcji Mode2Processing można zaimplementować wyświetlanie zawartości histogramu. Zakładka menu Camera properties działa jedynie dla trybu kompilacji Release. Prostokąt może być wyświetlany poprzez funkcję DrawRectangleRGB a punkt przez DrawPixel. W zaimplementowanych metodach jest przykład ich użycia. Uwaga! Aplikacja ma charakter przykładowy i nie ma obowiązku jej wykorzystania. Język programowania wykorzystany do wykonania zadania laboratoryjnego jest dowolny. Liczy się samodzielność wykonanych zadań.