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.