IV ROK GIK. PRZEDMIOT: CYFROWE PRZETWARZANIE OBRAZU ‐ ĆWICZENIA
wersja 130311
CPO ‐ ćw.2. Przetwarzanie obrazów w programie MATLAB ‐ Wstęp ‐ dr inż. Natalia Borowiec
Ćwiczenie_2. Przetwarzanie obrazów w programie MATLAB – Wstęp
• Cel tematu
‐ zapoznanie się z interfejsem programu MATLAB
‐ zapoznanie się z podstawowymi funkcjami do przetwarzania obrazów
• Dane do ćwiczeń
Na ćwiczeniach korzystamy z danych (plik: test_2.jpg) zlokalizowanych na dysku „I” w katalogu:
\nborowiec\CPO\T2\Dane\
lub na stronie:
http://twiki.fotogrametria.agh.edu.pl/bin/view/Dydaktyka/CPOMaterSt
• Wprowadzenie do programu MATLAB
Zapoznanie się z interfejsem graficznym programu
Założyć katalog Temat2 i skopiować do niego plik test_2.jpg.
Po uruchomieniu programu sprawdzić czy widoczne są okna Command Window, Current
Directory i Workspace. Poszczególne okna można włączyć korzystając z Menu / Desktop.
Okno Command Window służy wydawaniu poleceń i wywoływaniu funkcji. Okno Current
Directory wyświetla aktualną zawartość folderu roboczego. W oknie Workspace wyświetlane są
zmienne.
Ustawić ścieżkę katalogu roboczego tak by wskazywała katalog Temat2.
Sprawdzić czy w oknie Current Directory widoczny jest skopiowany plik.
Definiowanie zmiennych i elementarne działania matematyczne
Zdefiniować w oknie Command Window zmienną c i nadać jej wartość 2 wpisując:
c=2
Operator „=” to operator podstawienia. Nie należy mylić go z operatorem logicznym równości,
który oznaczamy jako „==” (podwójny znak równości).
Sprawdzić czy zmienna pojawiła się w oknie Workspace.
Podstawowe operacje matematyczne wykonujemy używając symboli: +, ‐, *, / ,^.
Wykonać przykładowe działanie: 9‐c
1.4
Polecenie
clc
służy do czyszczenia okna poleceń.
Polecenie
clear
usuwa wszystkie utworzone do tej pory zmienne.
Wypróbować ich działanie
Macierze ‐ definiowanie
W MATLAB’ie najczęściej operuje się nie na pojedynczych zmiennych, lecz na macierzach. Dlatego
nawet pojedyncza zmienna rozumiana jest w MATLAB’ie, jako macierz 1 x 1.
Zdefiniować macierz K o wymiarach 3 x 4 wpisując:
K=[4 0 0 1; 2 1 7 -1; 0 -1 1 2];
IV ROK GIK. PRZEDMIOT: CYFROWE PRZETWARZANIE OBRAZU ‐ ĆWICZENIA
wersja 130311
CPO ‐ ćw.2. Przetwarzanie obrazów w programie MATLAB ‐ Wstęp ‐ dr inż. Natalia Borowiec
Poszczególne liczby w ramach danego wiersza oddzielamy spacją lub przecinkiem!
Jest to podstawowy sposób definiowania macierzy w MATLAB’ie.
Macierz może być również definiowana jako macierz blokowa (zbudowana z innych macierzy) np.:
D = [A B; C];
lub w sposób kombinowany, np.:
D = [A B;[1 3 0 9; 0 0 1 1]];
Uwaga:
Jeżeli po komendzie w języku MATLAB nie występuje średnik (;), to wynik jest od razu wyświetlany na
ekranie w oknie komend. Należy o tym pamiętać przy działaniach wykonywanych na dużych macierzach np.
w przypadku obrazów.
Do odczytu zadanego elementu macierzy służy operator ().
Sprawdzić i przeanalizować, w jaki sposób można wybierać elementy macierzy wpisując
kolejno poniższe polecenia (pomocne będzie wyświetlenie macierzy A w edytorze – Array
Editor – dwukrotne kliknięcie macierzy w oknie Workspace):
K(2,3)
K(:,4)
K(3,:)
C = K(2,3:4)
C1 = K(2:3,1)
Inne pomocnicze sposoby definiowania macierzy:
M=zeros(3,6)
– definiujemy macierz złożoną z samych zer,
M=ones(3,4)
– definiujemy macierz złożoną z samych jedynek,
M=eye(3,3)
– macierz z jedynkami na przekątnej.
• Podstawowe działania na obrazach w programie MATLAB
W programie MATLAB do przetwarzania obrazów wykorzystuje się wbudowaną bibliotekę tzw.
Image Processing Toolbox, której poszczególne funkcje opisane są helpie.
Mówiąc o obrazach należy rozróżnić trzy podstawowe pojęcia:
‐ typ obrazu,
‐ format obrazu (pliku),
‐ typ zmiennej reprezentującej wartości pikseli.
W MATLAB’ie rozróżnić można 4 typy obrazów:
‐ binarne (Binary Image)
‐ w barwach szarości (Greyscale Image),
‐ kolorowe (Truecolor Image np. RGB ),
‐ indeksowane (Indexed Image).
Dostępne formaty plików w MATLAB’ie można sprawdzić w Helpie (Functions – Alphabetical List –
imread).
Przez typ zmiennej należy rozumieć sposób reprezentacji konkretnej wartości jasności piksela.
Podstawowe zmienne to:
‐ logical (0 lub 1 – 1bit),
IV ROK GIK. PRZEDMIOT: CYFROWE PRZETWARZANIE OBRAZU ‐ ĆWICZENIA
wersja 130311
CPO ‐ ćw.2. Przetwarzanie obrazów w programie MATLAB ‐ Wstęp ‐ dr inż. Natalia Borowiec
‐ uint8 (0 do 255 – 8bitów),
‐ double (liczby wymierne – 64bity).
Wczytanie obrazu oraz odczytanie informacji o pliku graficznym.
Do odczytania informacji o pliku graficznym służy funkcja
imfinfo
.
Składnia wywołania:
imfinfo(‘nazwa pliku.rozszerzenie’)
Sprawdzić, jakie dane można pozyskać na temat pliku graficznego test_2.jpg ‐
Odpowiedzieć na następujące pytania:
Z jakim typem obrazu mamy do czynienia?
Jaki jest format jego zapisu?
Ile bitów użyto do zapisu jasności pikseli na danym kanale?
W MATLAB’ie obrazowi można przypisać zmienną i traktować wczytany obraz, jako tablicę. Do
wczytania obrazu do zmiennej służy funkcja imread.
Wczytać obraz „test_2.jpg” do zmiennej I wykonując poniższe polecenie
I = imread(‘test_2.jpg’);
pamiętać o średniku !
Wyświetlić obraz:
figure(1); imshow(I);
Jakie wymiary ma tablica przechowująca obraz – sprawdź w oknie Workspace
Odczytać kilka wartości jasności pikseli na poszczególnych kanałach RGB przy pomocy
funkcji dostępnej w pasku nad obrazem
.
Rozkład obrazu na składowe barwne
W celu podziału obrazu na składowe barwne należy wykonać następujące polecenia:
R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);
Dwukropki oznaczają, że przetwarzamy wszystkie wiersze i wszystkie kolumny obrazu I
Wyświetlić wszystkie składowe, pamiętać o poleceniu figure.
Zamiana składowych barwnych
Za daną składową barwną można podstawić dowolny obraz tworząc kompozycję barwną w
kolorach zafałszowanych.
Zamienić kompozycję RGB na BGR wykonując polecenia:
I(:,:,1) = B;
I(:,:,2) = G;
I(:,:,3) = R;
Utworzyć i wyświetlić taką kompozycję aby płatki kwiatu miały kolor zielony
Wybór fragmentu obrazu
Wyboru fragmentu tablicy dokonujemy określając w nawiasach interesujący nas zakres.
Wyciąć z obrazu I pierwszych 100 wierszy i kolumn wykonując polecenie:
Fragment = I(1:100,1:100,:);
Wyniki wyświetlić. Tym razem dwukropek oznacza, wybór wszystkich kanałów.
IV ROK GIK. PRZEDMIOT: CYFROWE PRZETWARZANIE OBRAZU ‐ ĆWICZENIA
wersja 130311
CPO ‐ ćw.2. Przetwarzanie obrazów w programie MATLAB ‐ Wstęp ‐ dr inż. Natalia Borowiec
Wyciąć z kanału zielonego fragment obrazu odpowiadający centralnej części kwiatu (bez
płatków). W celu dokonania odczytu zakresu można posłużyć się narzędziem
.
Sprawdzanie wymiaru tablicy przechowującej obraz
Do odczytu wymiaru tablicy służy funkcja
size
.
Składnia wywołania funkcji
size
w przypadku
obrazu kolorowego wygląda następująco:
[W K C] = size(I);
gdzie W to ilość wierszy, K to ilość kolumn, C to ilość kanałów.
W przypadku obrazu szarego wywołanie funkcji
size
wygląda następująco:
[W K] = size(I);
Odczytać wymiary fragmentu obrazu wyciętego w poprzednim zadaniu.
Konwersja typów obrazów
Najczęściej stosowane typy konwersji:
rgb2gray(I)
‐ konwersja obrazu RGB na obraz w skali szarości,
im2bw(I,próg)
‐ konwersja obrazu w skali szarości na obraz binarny, próg z zakresu 0..1
mat2gray(I)
– konwersja macierzy na obraz.
Wykonać konwersje obrazu kolorowego na obraz w skali szarości. Nowy obraz zapisać jako
zmienną I1. Wynik wyświetlić.
Arytmetyka obrazowa
imadd(I,J)
– dodawanie obrazów,
imsubtract(I,J)
– odejmowanie obrazów,
imcomplement(I)
– obliczenie uzupełnienia obrazu.
Obliczyć uzupełnienie obrazu kolorowego i w barwach szarości. Oba obrazy wyświetlić na
ekranie.
Podstawowe funkcje arytmetyczne i statystyczne
W Matlabie dostępnych jest szereg funkcji realizujących podstawowe operacje arytmetyczne i
obliczenia statystyczne na tablicach. Należą do nich między innymi:
max
,
min
,
mean
,
sum
Funkcje te, jako wartość zwracają wektor obliczanych wielkości charakteryzujących daną kolumnę
tablicy. Np. jeżeli wywołamy funkcję
mean
w odniesieniu do całego obrazu np.:
mean(R)
to w wyniku otrzymamy wektor wierszowy zawierający średnie wartości każdej z kolumn. Aby
obliczyć średnią wartość dla całej tablicy musimy daną funkcję zastosować dwukrotnie np.:
mean(mean(R))
Obliczyć średnią jasność pikseli dla kanału niebieskiego obrazu
Przekształcenie jasności pikseli z wykorzystaniem funkcji imadjust
Wyświetlić histogram obrazu w barwach szarości (I2). Do wyświetlenia służy funkcja
imhist(I).
Streching obrazu wykonywany jest przy użyciu funkcji o składni:
J=imadjust(I,[low_in,high_in], [low_out,high_out],gamma),
IV ROK GIK. PRZEDMIOT: CYFROWE PRZETWARZANIE OBRAZU ‐ ĆWICZENIA
wersja 130311
CPO ‐ ćw.2. Przetwarzanie obrazów w programie MATLAB ‐ Wstęp ‐ dr inż. Natalia Borowiec
gdzie
[low_in,high_in]
– wektor określający zakres wejściowy poziomów jasności,
[low_out,high_out]
– wektor określający zakres wyjściowy poziomów jasności,
gamma
– współczynniki korekcji wykładniczej „gamma”
Wykonać rozciągnięcie histogramu obrazu I1 na pełen zakres jasności (0‐255) wybierając
odpowiedni przedział wejściowy na podstawie wyświetlonego histogramu. W nawiasach
kwadratowych muszą być wartości z przedziału [0,1]. Współczynnik gamma przyjąć jako
równy 1
Profil jasności
p = improfile(I,[XA,XB],[YA,YB])
– funkcja określająca poziomy jasności wzdłuż
zdefiniowanej linii. Funkcja zwraca wektor P przechowujący dane o jasności kolejnych pikseli
wzdłuż profilu.
Do wyświetlania zawartości macierzy w formie wykresu służy funkcja plot. Wyświetlanie linii
profilu wygląda następująco:
plot(p,’-g’)
‘-g’
oznacza, że profil narysowany będzie, jako lina zieloną
Zadanie
Napisać skrypt, który:
o
czyści ekran i zmienne
o
wczytuje wejściowy obraz kolorowy (test_2.jpg),
o
zamienia obraz wejściowy na obraz w skali szarości,
o
wyznacza wartości profilu jasności pikseli obrazu szarego wzdłuż odcinaka
zdefiniowanego przez punkty: A = (48,45), B = (534,327),
o
wyświetla na rysunku nr 1 obraz w barwach szarości wraz z nałożoną prostą, wzdłuż
której odczytywane są wartości jasności pikseli; wyświetlenie obrazu wraz z prostą
umożliwia funkcja hold on,
plot([[X
A
, X
B
], [Y
A
,Y
B
],’‐‘) – funkcja wyświetlania prostej,
o
wyświetla na rysunku nr 2 wykres jasności pikseli wzdłuż zdefiniowanej prostej,
o
oblicza średni poziom jasności linii profilu
Nowy skrypt tworzymy klikając na ikonę
. Polecenia w skrypcie wpisujemy analogicznie jak w oknie
komend. Skrytp uruchamiamy klawiszem F5 lub ikoną
. Po uruchomieniu skryptu należy zawsze
sprawdzić czy w oknie Command zostało zasygnalizowane wystąpnienie błędów.
Skrypt zapisać w swoim katalogu jako linia.m
* Powyższy skrypt uzupełnij o zapis jasności profilu do pliku tekstowego profil.txt