1.
Reprezentacja obrazu rastrowego
W grafice komputerowej obraz rastrowy jest reprezentowany jako macierz liczb
odpowiadających poszczególnym poziomom jasności poszczególnych pikseli. Dla
obrazów kolorowych wykorzystujemy trzy takie macierze przy zastosowaniu
reprezentacji kolorów RGB. KaŜda z tych macierzy reprezentuje jedną składową. W
niektórych zastosowaniach grafiki rastrowej (np. niektóre zagadnienia rozpoznawania
obrazów) informacje o kolorze są pomijane jako mniej istotne. Często kolor nie jest
nośnikiem istotnych informacji a analiza obrazu zapisanego tylko w odcieniach
szarości jest łatwiejsza. Istotnym elementem w systemach rozpoznawania i
przetwarzania obrazów jest początkowy etap związany z poprawą jakości samego
obrazu, czyli pozbycie się zakłóceń i uwypuklenie charakterystycznych cech obrazu
poprzez zastosowanie odpowiednich filtrów i przekształceń.
2.
Metody wstępnego przetwarzania obrazu
Rozjaśnianie i przyciemnianie obrazu.
Zmiana jasności wszystkich punktów w obrazie jest zadaniem związanym z prostymi
przekształceniami arytmetycznymi na obrazie. Dla kaŜdego piksela reprezentowanego
przez wartość jego poziomu jasności naleŜy dokonać dodania lub odjęcia stałej.
Operacja ta zakłóca jednak wartości poziomów szarości o większych lub mniejszych
poziomach. W przypadku rozjaśnienia obrazu o wartość 10, wszystkie poziomy
szarości o wartościach (Max – 10, Max) będą reprezentowane jako jeden kolor.
Podobna sytuacja będzie miała miejsce w przypadku przyciemnienia obrazu, czyli
odjęcie stałej składowej. Rozjaśnianie i przyciemnianie poprzez dodawanie i
odejmowanie moŜe być zrealizowane na obrazach o histogramach nie wyrównanych.
Dla histogramu przedstawionego poniŜej przyciemnianie jasności poprzez odjęcie
składowej spowoduje utratę informacji o ciemniejszych kolorach.
Pojęcie histogramu
Histogram intensywności obrazu jest najprostszym globalnym opisem obrazu.
Stosowany jest w celu oceny jakości obrazu lub wyboru metody jego kodowania (np.
przy binaryzacji). Histogram obrazu jest to wykres reprezentujący rozkład
intensywności lub kolorów w obrazie. Obrazuje on więc ile pikseli znajduje się w
poszczególnych zakresach intensywności. Niech r1 , r2 , ..., rL oznaczają uŜywane
wartości intensywności obrazu. Wówczas histogram tworzy zbiór wartości p(r1),
p(r2), ..., p(rL), obliczanych ze wzoru:
p(rj) = p(rj) / n
Rozciąganie histogramu.
Histogram pokazuje jak liczne są w obrazie punkty o róŜnych wartościach jasności.
MoŜna go wykorzystać do polepszenia jakości obrazu. Przyjmując model Gray-Scale
mamy od 0 do 255 poziomów szarości i tyleŜ samo składowych opisujących
histogram. Pierwszy jego element ma numer 0 (czerń), podczas gdy ostatni 255 (biel).
Analiza histogramu okazuje się wielce pomocna podczas obróbki obrazów. Na jej
podstawie podejmuje się decyzje mające bezpośrednio wpływ na przetwarzane dane
(rozjaśnienie, ściemnienie, zwiększenie kontrastu). Przyjmuje się, Ŝe pierwszy
element histogramu ma numer 0 a ostatni Zmax gdzie Zmax - zakres maksymalny.
Zakładamy, Ŝe:
Zmax = 2
n
- 1, jeŜeli barwa jest reprezentowana przez "n" bitów.
Wartość kaŜdego elementu histogramu to liczba punktów obrazu o jasności równej
numerowi tego elementu. Graficznie wygląda to tak, Ŝe na osi X mamy poziomy
jasności (od 0 do 2
n
-1), natomiast na osi Y mamy ilość punktów o danym poziomie
jasności. Analiza histogramów daje duŜo informacji na temat obrabianego obrazu,
m.in. o zakresie poziomów jasności oraz jak licznie są reprezentowane te poziomy.
Jeśli histogram jest skoncentrowany w pewnych przedziałach, moŜna zastosować
operację rozciągnięcia w celu uŜycia całego moŜliwego zakresu intensywności.
Dzięki temu obraz stanie się bardziej przydatny do analizy. Operacja ta polega na
zmianie wartości intensywności pikseli za pomocą funkcji transformującej. W wyniku
jej zastosowania obraz moŜe wyglądać nienaturalnie, ale szczegóły będą bardziej
kontrastować ze sobą.
Większość zmian histogramu dokonuje się poprzez wyznaczenie dyskretnej funkcji
konwersji słuŜącej do wyznaczenia wartości Ŝądanej z pomocą wartości z obrazu
ź
ródłowego. Najłatwiejszym sposobem opisania takiej funkcji jest zastosowanie
tablicy LUT (Look Up Table). Wartość zapisana pod indeksem i takiej tablicy mówi
nam na jaką wartość przekształcić liczbę z obrazu źródłowego.
Jeśli F jest funkcją transformacji, W1 wartość Ŝródłowa,W2 wartość wynikowa to z
pomocą tablicy LUT dyskretną funkcję transformacji wyznaczamy następująco:
W2 = F(W1) = LUT[W1]
Poszczególne elementy tablicy LUT uŜywanej w procesie rozciągania histogramu
moŜna wyznaczyć następująco:
LUT[i] = (Imax / (Wmax – Wmin)) * i
Wmax – maksymalna wartość składowej w obrazie źródłowym
Wmin – minimalna wartość składowej w obrazie źródłowym
Imax – maksymalna wartość w obrazie docelowym.
Operacja rozciągania histogramu nie jest uniwersalna, to znaczy Ŝe dla niektórych
obrazów moŜe nie przynieść Ŝądanego efektu. Nie naleŜy mylić operacji rozciągania
histogramu z operacją wyrównywania histogramu.
Operacja wyrównywania histogramu
Operacja ta ma na celu taki przekształcenie intensywności punktów, aby wykres był
jak najbardziej płaski. Pozwala to na uwypuklenie pewnych szczegółów obrazu, które
SA mało widoczne ze względu na niewielki kontrast. W celu wyznaczenia tablicy
LUT dla operacji wyrównywania histogramu naleŜy wyznaczyć dystrybuantę
rozkładu prawdopodobieństwa, którą obliczyć moŜna z następującego wzoru:
D(n) = (h
0
+ h
1
+ ......... + hn) / s
Wartość dystrybuanty w punkcie n określa liczbę pikseli w obrazie o wartości
mniejszej lub równej n podzieloną przez liczbę wszystkich punktów obrazu.
Mając wyznaczone wartości dystrybuanty moŜemy obliczyć elementy tablicy LUT w
następujący sposób.
LUT(i) = ((D(i) – D
0
) / (1 - D
0
)) * (k -1)
Gdzie
D(i) – wartość dystrybuanty dla kaŜdego punktu
D
0
– pierwsza niezerowa wartość dystrybuanty
k – liczba moŜliwych wartości składowych obrazu
3.
Filtracja za pomocą filtrów splotowych
Metody splotowe uwzględniają podczas transformacji otoczenie rozwaŜanego punktu.
Równanie które opisuje transformację obrazu źródłowego i docelowego wyraŜa się
wzorem: O2 = O1 * w. Operator „*” oznacza w tym wypadku splot, w jest
następującą macierzą:
=
9
8
7
6
5
4
3
2
1
w
w
w
w
w
w
w
w
w
w
I nazywana jest maską splotu. PowyŜsza operacja odpowiada wykonaniu na kaŜdym
punkcie obrazu następującego przekształcenia:
( )
(
)
(
)
(
)
(
)
( )
(
)
(
)
(
)
(
)
1
,
1
,
1
1
,
1
1
,
,
1
,
1
,
1
,
1
1
,
1
,
9
8
7
6
5
4
3
2
1
+
+
+
+
+
−
+
+
+
+
+
+
−
+
+
+
−
+
−
+
−
−
=
y
x
f
w
y
x
f
w
y
x
f
w
y
x
f
w
y
x
f
w
y
x
f
w
y
x
f
w
y
x
f
w
y
x
f
w
y
x
g
Wartość w punkcie wynikowym jest więc wyznaczana jako średnia waŜona
sąsiedztwa punktu źródłowego. Filtracja za pomocą splotu jest filtracją liniową. W
praktyce stosuje się filtrację górno przepustową, do wyodrębniania punktów wyraźnie
róŜnych od tła. Maski filtrów górno przepustowych mają tę właściwość, Ŝe suma ich
elementów wynosi 0
−
−
−
−
−
−
−
−
=
1
1
1
1
8
1
1
1
1
1
W
Filtrację splotową moŜna stosować równieŜ w procesie wygładzania obrazu.
Do tego celu stosuje się filtry dolno przepustowe, których współczynniki macierzy są
dodatnie. Aby nie doprowadzić do przekroczenia dopuszczalnej wartości w procesie
konwersji,
naleŜy
uzyskaną
liczbę
pomnoŜyć
przez
odwrotność
sumy
współczynników macierzy.
10
1
wsp.
1
1
1
1
2
1
1
1
1
=
K
Filtracja górnoprzepustowa moŜe być równieŜ wykorzystana do detekcji krawędzi.
Dla zastosowań detekcji krawędzi stosuje się następujące maski:
Maski Sobela
Maska Prewitta
Filtracja medianowa
Filtracja medianowa jest przykładem transformaty nieliniowej - dzięki niej tracimy
szczegóły obrazu takie jak cienkie linie, punkty itp. ale pozbywamy się takŜe szumu i
zakłóceń - nienaturalnie małe lub duŜe wartości elementów macierzy zostaną
pominięte przy filtracji. W tym filtrze zamiast wartości średnich stosuje się medianę
wartości pikseli będących sąsiadami analizowanego punktu. Mediana jest środkową
wartością w uporządkowanym ciągu wartości opisujących rozwaŜany piksel i jego
otoczenie. Tracąc na ostrości obrazu (szczegółowości) zyskujemy na jakości poprzez
wyeliminowanie ewentualnych szumów.
Progowanie
Progowanie słuŜy do dyskretyzacji poziomów szarości poszczególnych pikseli.
Wartości poszczególnych poziomw szarości są porównywane z progiem podawanym
jako parametr wejściowy. Dla pikseli o poziomie jasności większym od podanego
progu jest wybierana wartość najjaśniejsza, natomiast dla pikseli większych od
podanego progu w nowym obrazie jest wybierana wartość odpowiadająca pikselowi
najciemniejszemu. W praktyce stosuje się równieŜ progowanie wielopoziomowe,
które umoŜliwia przekształcenie punktu pierwotnego o zadanym poziomie szarości na
punkt naleŜący do jednego z kilku poziomów na wyjściu. Progowanie jest często
wykorzystywane do wstępnej obróbki obrazów pochodzących z urządzeń
skanujących. Przekształcenie progowania jest jednym z elementów obróbki obrazów
wykorzystywanym w procesie rozpoznawania pisma przez programy OCR. W
praktyce waŜnym zagadnieniem jest dobranie odpowiedniego poziomu progu, tak aby
uzyskać poŜądany efekt. PoŜądany poziom progu jest moŜliwy do uzyskania za
pomocą analizy histogramu. Dla histogramów z wyraźnym zaznaczeniem częstości
występowania koloru związanego z cechą podlegającą analizie progowanie daje dość
dobre efekty.
Efekt wykonania operacji progowania na obrazie przedstawiającym płytki krwi
4.
Praca w programie Matlab.
Po uruchomieniu programu Matlab naleŜy zmienić katalog roboczy na katalog w
którym znajdują się pliki z obrazami do przetworzenia.
Z menu file wybieramy polecenie New i tworzymy nowy skrypt dla programu Matlab
( plik z rozszerzeniem .m). Zapisujemy plik pod odpowiednią nazwą w katalogu
roboczym programu Matlab. Skrypt moŜna uruchomić za pomocą polecenia Run z
menu debug (F5), albo wpisując nazwę pliku w linij poleceń programu Matlab.
Przydatne polecenia programu Matlab oraz ich zastosowanie.
OBR = imread('krwinki.BMP') – polecenie tworzy macierz o rozmiarach
odpowiadających rozmiarowi obrazu i wczytuje obraz do pamięci.
imshow(OBR) – polecenie pokazuje obraz zapisany w macierzy podanej jako
parametr
imhist(OBR) – polecenie pokazuje histogram obrazu zapisanego w macierzy podanej
jako parametr.
subplot(3,2,1) - wybranie części okna w której będzie narysowany obiekt.
[Lw, Lk] = size(OBR) – funkcja zwraca wektor, który opisuje wielkość macierzy
(liczbę wierszy oraz liczbę kolumn)
uint8(OBR1) – zwraca macierz liczb całkowitych 8 bitowych bez znaku
odpowiadającą macierzy podanej jako parametr.
Rand(n) – zwraca macierz n * n liczb losowych
medfilt2(OBR) – realizuje operację filtracji medianowej na obrazie reprezentowanym
przez macierz wejściową i zwraca macierz reprezentującą obraz wynikowy.
histeq(OBR) – realizuje wyrównywanie histogramu.
Przykład realizacji operacji warunkowej z zastosowaniem instrukcji IF w języku
programu Matlab, oraz iteracji po wszystkich elementach macierzy reprezentującej
obraz z wykorzystaniem zagnieŜdŜonych pętli FOR.
for m = 1:Lw
for n = 1:Lk
if (OBR1(m,n) < prog)
OBR1(m,n) = 0;
else
OBR1(m,n) = 255;
end
end
end
Zadania
1. Przeanalizować działanie funkcji podanych w instrukcji laboratoryjnej do
odczytu obrazu i wyświetlania go na ekranie w programie Matlab. W jaki
sposób jest przechowywany obraz w programie Matlab wczytywany z pliku.
Wczytać za pomocą skryptu Matlaba obraz z pliku grace_k.bmp, wyświetlić
obraz oraz jego histogram.
2. Napisać skrypt w języku Matlab wczytujący obraz zapisany w pliku
grace_k.BMP znajdujący się w katalogu roboczym, dokonać operacji
rozjaśniania oraz przyciemniania obrazu. W jednym oknie wyświetlić obrazy i
odpowiadające im histogramy dla obrazu oryginalnego, przyciemnionego i
rozjaśnionego. Zapisać obraz przyciemniony jako grace_c.bmp i rozjaśniony
jako grace_r.bmp. Porównać histogramy dla pliku wejściowego i
wynikowego. Jak wpływa przekształcenie na histogram?
3. Napisać skrypt w języku Matlab realizujący operacje rozciągania histogramu
na pliku grace_c.bmp. Plik powinien wyświetlać w jednym oknie obraz
wejściowy, obraz po operacji rozciągania histogramu i odpowiadające im
histogramy.
4. Napisać skrypt realizujący operacje wyrównywania histogramu w języku
Matlab na obrazie grace_k.bmp. PosłuŜyć się funkcją Matlaba. Wyświetlić
obraz pierwotny i obraz wynikowy oraz ich histogramy. Jak przekształcenie
wpłynęło na obraz i histogram?
5. Napisać skrypt w języku Matlab realizujący operację filtracji medianowej na
obrazie grace_k.bmp. Jakie zakłócenia moŜna usunąć z obrazu stosując tą
filtrację? Jakie informacje zostaną utracone w wyniku tej operacji.
6. Napisać program w języku Matlab realizujący progowanie dla określonego
obrazu wejściowego krwinki.bmp. Program powinien wyświetlać w oknie
obraz wejściowy i wynikowy oraz ich histogramy.