Pro zpracování předchozích úkolů jsem napsal program mor.m, který je standardním M-filem Matlabu.
Tento program načte vstupní obrázek segmorph.tif, na který aplikuje funkce opening a closing s vhodnými parametry, čímž odstraní šum salt and pepper. Tento šum následně odstraňuje i filtr median s velikostí 3x3. Pro segmentaci vodorovných pruhů jsem použil funkci opening a matici B=ones(1,100). Pro segmentaci svislých pruhů jsem použil opět matici B, ale inverzní.
% nacteni obrazku
im=double(imread('segmorph.tif'));
% zobrazeni poskozeneho obrazku
figure(1); imshow(im,[]);
% operace otevreni a uzavreni se zobrazenim obrazku
% s odstranenym sumem
b1=[1 0 1;0 1 0;1 0 1];
oim=opening(im,b1);
b2=ones(3);
cim=closing(oim,b2);
figure(2); imshow(cim,[]);
% odstraneni sumu pomoci filtru median (3x3)
med=medfilt2(im);
figure(3); imshow(med,[]);
% nalezeni svislych a vodorovnych pruhu
b3=ones(1,100);
vim=opening(cim,bh);
sim=opening(cim,bh');
% zobrazeni a ulozeni na disk
figure(4); imshow(vim,[]); imwrite(vim,'vodorovny.tif','tif');
figure(5); imshow(sim,[]); imwrite(sim,'svisly.tif','tif');
|
Funkce opening a closing jsou následující:
% OPENING(image) % % eroze nasledovana dilataci (skripta ZSO str. 184) % function [oim]=opening(im,b); oim=dilate(erode(im,b),b); |
% CLOSING(image) % % dilatace nasledovana erozi (skripta ZSO str. 185) % function [cim]=closing(im,b); cim=erode(dilate(im,b),b); |
| původní obrázek | po operacích opening a closing | filtrace mediánem 3x3 |
![]() |
![]() |
![]() |
Výsledkem jsou tyto dva obrázky (svisly.tif a vodorovny.tif), kde jsou odděleny svislé a vodorovné pruhy.
![]() |
![]() |