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.