RS-C
Przetwarzanie obrazów
Operacje na histogramach
Darkmaster
2011-05-09
Poniższy artykuł wprowadza podstawy MatLaba, oraz operacje na histogramach, przy wykorzystaniu
tego środowiska.
Wstęp
Histogram
Histogram obrazu w odcieniach szarości wyznaczany jest jako suma wszystkich pikseli o danej
wartości.
Algorytm wyznaczania histogramu:
Ustalenie zakresu jasności lub przyjęcie domyślnego dla danej liczby bitów na piksel;
Określenie liczby przedziałów;
Wyznaczenie szerokości przedziałów poprzez podzielnie zakresu przez ich liczbę;
Obliczenie liczby pikseli o wartościach jasności należących do poszczególnych przedziałów.
Operacje na histogramie:
Rozciąganie
Rozciągnięcie histogramu, zmienia rozkład jasności pikseli. Przekłada to się na zmianę szerokości
przedziałów.
Wyrównywanie
Wyrównanie histogramu ma na celu doprowadzenie do równomiernego rozłożenia wartości jasności
w jego przedziałach.
MATLAB
Program komputerowy będący interaktywnym środowiskiem do wykonywania obliczeo naukowych i
inżynierskich, oraz do tworzenia symulacji komputerowych.
Operatory, funkcje i instrukcje niezbędne do wykonania ćwiczeń
Poniżej, opisanych zostanie kilka podstawowych elementów języka potrzebnych do wykonania
zamieszczonych dwiczeo.
Zmienne
Zmienne w mat labie tworzone są wraz z pierwszym użyciem danej nazwy, nie wymagają podawania
typów, np.:
X = 10; % utworzy zmienną X i nada jej wartość 10
Y = 1:1:20 % utworzy zmienną Y i przypisze jej wektor wartości od 1 do 20 z krokiem 1
Z = [1:1:3; 1:2:6] % utworzy macierz Z zawierająca 2 wiersze
|1 2 3|
|1 3 5|
Z2 = [1 2 3; 3 4 5] % macierz 3x2
|1 2 3|
|3 4 5|
!!! Aby odwoład się, do konkretnego elementu macierzy, wektora należy użyd () np. Z(1, 2), należy
także pamiętad ze struktury te w mat labie są numerowane od 1.
Pętla for
Pętla for w mat labie składa się ze słówka for, następnie nazwa zmiennej i zbiór wartości jakie ma
przyjmowad pętle kooczy słówko end.
for i = 1:1:20
instrukcje;
end
If, elseif, else
Instrukcja if składa się z słówka kluczowego a następnie warunku, oraz kooczy się słówkiem end, w
podanym przykładzie, sprawdzone zostanie czy zmienna a ma wartośd większą od 5 jeśli tak kod
zostanie wykonany jeśli nie pominie go.
if(a > 5)
instrukcje
end
Słówko elseif, pozwala na budowanie kaskady instrukcji, a else umożliwia wybranie instrukcji
mających się wykonad, gdy pozostałe warunki są nie prawidłowe.
if (a > 5)
instrukcje;
elseif(a < 2)
instrukcje;
else
instrukcje;
end
Funkcje
Funkcje w mat albie składają się ze słówka function, zwracanych parametrów w nawiasach
kwadratowych, „=”, nazwy funkcji, oraz parametrów w nawiasach ().
function [x, y] = foo (a, b c)
instrukcje;
end
Operatory
* - mnożenie macierzowe
.* - mnożenie odpowiadających sobie elementów macierzy
+ - dodawanie odpowiadających sobie elementów macierzy
- - odejmowanie odpowiadających sobie elementów macierzy
^ - potęgowanie macierzowe (Z ^2 == Z *Z)
.^ - potęgowanie (Z .^2 == Z.*Z )
Funckje wbudowane, niezbędne do wykonania ćwiczeń
[x, y] = size(
macierz
) – zwraca rozmiar wektora, macierzy
X = imread(
ścieżka
)- zapisuje bitmapa w formie macierzy
figure() - otwiera nowe okno
bar(
vec_x
,
vec_y
) – rysuje wykres słupkowy
x = min(
vec
) – zwraca najmniejszą liczbę w wektorze
x = min(
mac
) – zwraca wektor najmniejszych liczb dla każdego wiersza
macierzy, w celu zwrócenia najmniejszej liczby należy wywołać 2 krotnie
funkcje(x = min(min(
mac
)) )
x = max(
vec
) – zwraca największą liczbę w wektorze
x = max(
mac
) – zwraca wektor największych liczb dla każdego wiersza
macierzy
m = zeros(
x
,
y
) – tworzy macierz o rozmiarach x * y i wypełnia zerami.
[wiersz, kolumna] = find(
warunek
) – zwraca indeksy podanej macierzy, zgodne
z zadanym warunkiem, np. find(X == 5) zwróci indeksy liczb równych 5 w
macierzy X.
x = round(w) – zaokrągla liczbe.
Ćwiczenia
Plik główny:
skrypt.m
clc %czyszczenie konsoli
clear %czyszczenie zmiennych
close
all
%zamknięcie wszystkich okien
x = imread(
'02.png'
);
x = x(:,:,1); %wycięcie kanału niebieskiego i
%zielonego
x = double(x);
%funckje do napisania
histogram(x, 256, 1);
x1 = rozciagniecie(x);
histogram(x1, 256, 1);
x2 = wyrownaj(x);
histogram(x2, 256, 1);
Ćwiczenie 1
Wykonanie funkcji obliczania histogramu w odcieniach szarości z dowolną liczbą przedziałów
(zadawaną jako parametr).
%przewidywana postać funkcji
%zwracane parametry ilość przedziałów, wektor wartośći
%przyjmowane dane obraz, ilość przedziałów, czy rysować wykres
function
[prz, oy] = histogram(X, prz, rys)
%wyznaczenie ilości przedziałów
zakr = ???;
%stworzenie wektora na wartości histogramu
oy = zeros(1, prz);
%pobranie rozmiaru macierzy X, do pętli for
???
%zliczenie wartości pikseli, mieszczących się w danym przedziale
for
i = 1:prz
???
end
if
(rys == 1)
figure();
bar(0:prz - 1, oy);
end
end