background image

IV ROK GIK. PRZEDMIOT:  CYFROWE PRZETWARZANIE OBRAZU - ĆWICZENIA 

wersja  1.1 

 

CPO - ćw.5. Automatyczna interpretacja obrazu cyfrowego - dr inż. Jakub Kolecki - KGFiTŚ

 | 

 

 

Ćwiczenie_5. Automatyczna interpretacji obrazu cyfrowego – budowa programu 
do rozpoznawania koloru światła sygnalizatora 

• Cel tematu 

1. Powtórzenie zagadnień realizowanych na poprzednich zajęciach laboratoryjnych z programem MATLAB z 
naciskiem na ich praktyczne wykorzystanie. 
- wczytywanie obrazu do zmiennej oraz sposób przechowywania obrazu kolorowego 
- budowa maski filtru

 

(z wykorzystaniem funkcji fspecial)

 

- filtracja przestrzenna obrazu

 

(z wykorzystaniem funkcji imfilter)

 

2. Zapoznanie się z niektórymi instrukcjami sterującymi

 

(pętla for, i instrukcja warunkowa if)

 

3. Zapis informacji w pliku tekstowym

 

(funkcje fopen, fclose, fprintf)

 

 
•  Dane do ćwiczeń 

Na ćwiczeniach korzystamy z obrazów zlokalizowanych na wiki

Dostępne są dwa zestawy obrazów.  

 
•  Oprogramowanie 

W trakcie wykonywania ćwiczenia korzystamy z oprogramowania MATLAB 2010b 

 
•  Przebieg zajęć 

1.  Część teoretyczna 

-  Automatyczna  interpretacja  obrazów  cyfrowych.  Wyjaśnienie  pojęć:  detekcja  obiektu, 
identyfikacja obiektu, pomiar obiektu na przykładzie obrazu sygnalizatora świetlnego. 
-  Zapoznanie  studentów  z  najczęściej  stosowanymi  instrukcjami  sterującymi:  pętlą  for  oraz 
instrukcją if. 
- Zapoznanie z funkcją num2str, str2double,strcat 
- Zapoznanie z funkcjami fopen, fclose, fprintf 
- Zapoznanie z funkcjami mean, max, min 

 

 

 

 

2.  Część praktyczna 

2.1 Wstęp - wyświetlenie przykładowego obrazu (praca w oknie Comand Window). 

- Korzystając z okna komend wczytaj do zmiennej o nazwie FOTO obraz, którego nazwa 

jest zgodna z Twoim numerem.  

- Wyświetl wczytany obraz 
- Jeżeli na sygnalizatorze pali się światło zielone zapisz w zmiennej ZIELONY kanał 

zielony obrazu. Jeżeli na sygnalizatorze pali się światło czerwone w zmiennej 
CZERWONY zapisz kanał czerwony obrazu.  

- Wyświetl zapisany kanał w nowym oknie 

background image

IV ROK GIK. PRZEDMIOT:  CYFROWE PRZETWARZANIE OBRAZU - ĆWICZENIA 

wersja  1.1 

 

CPO - ćw.5. Automatyczna interpretacja obrazu cyfrowego - dr inż. Jakub Kolecki - KGFiTŚ

 | 

 

- Na obrazie kolorowym korzystając z narzędzia „Data Cursor” odczytaj wartości 

jasności RGB pięciu pikseli leżących w obrębie palącego się sygnału. Jaka jest 
najniższa a jaka najwyższa odczytana przez Ciebie wartość w kanale 
odpowiadającym kolorowi palącego się światła ? 

 
 
 

2.2 Skrypt – etap 1 - Automatyczne wczytywanie obrazów z wykorzystaniem pętli for 

- Utwórz nowy skrypt, który: 
 

1. Kasuje zmienne (clear) 

 

2. Czyści ekran (clc) 
3. Realizuje pętle for, wewnątrz której: 

  wczytywany jest obraz o numerze i.JPG 
  wypisywana jest średnia wartość jasności piksela o współrzędnych: 

[wiersz = 10*N, kolumna = 10*N] w kanale zielonym.  
N oznacza numer studenta. 

 

2.3 Skrypt – etap 2 – Program do automatycznej interpretacji obrazu  

Przerób utworzony wcześniej skrypt tak aby wewnątrz pętli for poza wczytaniem 
obrazu realizowane były następujące zadania: 

- filtracja obrazu filtrem wygładzającym (dolnoprzepustowym). Wykorzystaj w tym celu 
funkcje fspecial oraz imfilter 

Jeżeli Twój numer (N) jest nieparzysty wykorzystaj filtr uśredniający. 
Jeżeli Twój numer (N) jest parzysty wykorzystaj filtr Gaussa* 
Jeżeli Twój numer (N) jest podzielny przez 3 maska ma mieć wymiary 3 x 3 
Jeżeli Twój numer (N) jest podzielny przez 4 maska ma mieć wymiary 7 x 7 
Jeżeli Twój numer (N) nie jest podzielny ani przez 3 ani przez 4 zastosuj maskę 5 x 5 

*Jeżeli stosowany jest filtr Gaussa, ustaw parametr sigma jako równy 1/5 rozmiaru maski – skorzystaj 
Pomocy programu MATLAB 

- sprawdzenie jaki kolor światła pali się w danym momencie na sygnalizatorze 
(dowolna metoda) 

- zapisanie do pliku wynikowego informacji o tym jakie światło pali się na każdym z 
obrazów. Wynikowy plik tekstowy ma wyglądać podobnie jak poniżej: 
 

 

 

 

background image

IV ROK GIK. PRZEDMIOT:  CYFROWE PRZETWARZANIE OBRAZU - ĆWICZENIA 

wersja  1.1 

 

CPO - ćw.5. Automatyczna interpretacja obrazu cyfrowego - dr inż. Jakub Kolecki - KGFiTŚ

 | 

 

ZAŁĄCZNIK - Składnia  wybranych funkcji  przydatnych w rozwiązywaniu zadań 
 

pętla for: 
Przykład – obliczenie wartości 7! (silnia) 
 
wynik = 1; 
for i = 1:7 

wynik = wynik*i; 

end 
 
instrukcja warunkowa if: 
składnia: 
if warunek 
 

%instrukcje wykonywane jeżeli warunek jest spełniony 

end 
 
strcat 
Funkcja służy do łączenia kilku ciągów znaków w jeden ciąg. 
Funkcja może łączyć ze sobą więcej niż dwa ciągi znaków. 
 
Przykład 1: 
 
str1 = ‘Jan Kowa’; 
str2 = ‘lski’; 
str3 = strcat(str1,str2);   
%W zmiennej str3 będzie ciąg znaków: ‘Jan Kowalski’ 
 
Przykład 2: 
 
Prefix = ‘obraz’; 
Oznaczenie = ‘A24’; 
I = imread(strcat(Prefix,Oznaczenie,’.jpg’)); 
%Do zmiennej I zostanie wczytany obraz o nazwie ‘obrazA24.jpg’ 
 
num2str 
Funkcja służy do zamiany liczby na ciąg znaków 
Przykład: 
 
NR = 3; 
I = imread(strcat(sum2str(NR),’.jpg’)); 
 %Do zmiennej I zostanie wczytany obraz o nazwie ‘3.jpg’ 
 
str2double 
Funkcja służy do zamiany ciągu znaków na liczbę 
 
fopenfclosefprintf 
fopen – otwiera plik i tworzy identyfikator pliku do odczytu 
fclose – zamyka plik 
fprintf- zapisanie danych do pliku tekstowego 

Składnia funkcji fprintf: 
fprintf(Id_pliku, ciąg_znaków, zmienna1, zmienna2,…); 

background image

IV ROK GIK. PRZEDMIOT:  CYFROWE PRZETWARZANIE OBRAZU - ĆWICZENIA 

wersja  1.1 

 

CPO - ćw.5. Automatyczna interpretacja obrazu cyfrowego - dr inż. Jakub Kolecki - KGFiTŚ

 | 

 

 
Zapis do pliku -  przykład 
 
V = 20; 
IdObiektu = 9; 
Plik = fopen(‘Obiekty.txt’,’w’); 
fprintf(Plik,’Obiekt %d ma predkosc %d km/h\n’,Obiektu,V); 
fclose(Plik); 
%W efekcie w pliku Obiekty.txt zostanie zapisana informacja: 
Obiekt 9 ma predkosc 20 km/h  
 
Symbol %d oznacza że w tym miejscu ma zostać wstawiona liczba całkowita 
Liczby są wstawiane do tekstu zgodnie z kolejnością ich podania licząc od trzeciego argumentu funkcji 
Symbol \n oznacza przejście do nowej linii