Dziś kilka zadanek gdzie zobaczymy jak działa filtr uśredniający. Zrobimy także proste menu wyboru, a także zapis naszej animacji do pliku video.

Najpierw przykład, za chwile dokładniej go omówimy. Naszym zadaniem jest wczytanie dowolnego obrazu i na jego połowie zastosowanie filtru uśredniającego.

L1=imread(’cameraman.tif’);
h=ones([9 9]);
L1=double(L1)/255;
figure;
L2=filter2(h,L1(:,1:128))/sum(h(:));
L2=mat2gray(L2);
L3=L1(:,129:end);
imshow([L2 L3])

filtr1
Wynik filtracji z zadania 1

Analizując nasz kod warto opisać kilka nowych funkcji, o których jeszcze nie mówiliśmy. Pierwsza z nich jest ones, oznacza stworzenie macierzy z samych jedynek o podanych w argumencie wymiarach. Filtr uśredniający czyli filter2 gdzie jako argumenty podajemy najpierw maskę a potem zmienną na której filtr ma zadziałać. Jeżeli nasza maska jest dodatnia to powinniśmy dodać /sum(h(:)). Następna funkcja to mat2gray, która konwertuje macierz do trybu szarości. Na końcu proste wyświetlanie dwóch obrazków połączonych w jedną całość [L2 L3].

Zadanie 2.
Tutaj mamy dokonać filtracji tylko jednej z zmiennych RGB (w tym przypadku kolor czerwony), więc wczytujemy obraz kolorowy.

L1=imread(’onion.png’);
h=ones([13 13]);
L1=double(L1)/255;
figure;
R=filter2(h,L1(:,:,1))/sum(h(:));
G=L1(:,:,2);
B=L1(:,:,3);
R=mat2gray(R);
L2=cat(3,R,G,B);
imshow(L2)

filtr2
Wynik z zadania 2

W tym zadaniu zastosowaliśmy bardzo podobne funkcje do poprzedniego, jednak operowaliśmy na kolejnej warstwie RGB. Filtrujemy tylko pierwszą warstwę z RGB czyli R (kolor czerwony). Resztę kolorów pozostawiamy bez zmian. Na końcu łączymy wszystkie trzy warstwy w jeden obrazek za pomocą polecenia cat.

Zadani 3.
Tutaj skorzystamy z funkcji filtru uśredniającego i zrobymy proste menu. Jeden przycisk, po kliknięciu którego zostanie nałożony filtr uśredniający na obrazek:

L1=imread(’cameraman.tif’);
figure;imshow(L1)
a=0;
h=ones([1 20]);
L1=double(L1)/255;
while a<2
a=menu(’MENU’, ‘F.usredniajaca’, ‘Zamknij’);
if a==1
L1=filter2(h,L1)/sum(h(:));
L1=mat2gray(L1);
imshow(L1)
end
end

Wyniki:

filtr3a
filtr3b

Kod zawiera kilka nowych poleceń. Do generowania menu służy polecenie menu, którego zawartość (liczba) wczytywana jest do zmiennej. Tą zmienną możemy nastpęnie sprawdzać za pomocą IF lub Case. Oczywiście zmienna powinna zostać na początku wyzerowana oraz jeżeli chcemy aby program mógł być wykonywany dopóki ktoś nie będzie chciał go zakończyć należy pamiętać o pętli while.

Jedna odpowiedź na “Matlab filtrowanie”
  1. Michael napisał:

    Hello. Naprawde bardzo przydatny jest ten mini-kurs , a mam pytanie czy można by tak prosić jak zrobić suwak w matlabie , który np prozjasniałby kolor czerwony ?? pozdrowienia

Pozostaw odpowiedź

(c) 2007 by Michał Terbert