« zpět / back

ZSO - Zpracování Signálů a Obrazů

Úlohy zpracování obarazu

ČVUT FEL

David Šilhan
[email protected]
ČVUT FEL, kybrenetika a měření
poslení aktualizace: 25.12.2001

1) Ekvivalizace histogramu
2) Vzorkování obrazu. Rekonstrukce obrazu z navzorkovaných dat
3) Filtrace obrazu, detekce hran
4) Obnovení obrazu. Odstranění rozmazání způsobeného pohybem
5) Odstranění šumu a segmentace obrazu pomocí binární morfologie

1) Ekvivalizace histogramu

Specifikace:

 

Řešení:
IM=imread('still.tif','tif');
colormap gray
figure(1); imshow(IM,[]);
h=imhist(IM(:),256);
heq=zeros(256);
sumh=0;
for n=1:256 sumh=sumh+h(n);end;
sumh2=0;
for n=1:256
if (not(h(n)==0)) sumh2=sumh2+h(n);heq(1+255*(sumh2/sumh))=h(n);end;
end;
figure(2);plot(h);
cumh=cumsum(h);
figure(3);plot(cumh);
IMEQ = histeq(IM,heq);
figure(4); imshow(IMEQ,[]);
figure(5);plot(heq);
cumheq=cumsum(heq);
figure(6);plot(cumheq);

 

Vstupní obrazec:
1_IM.jpg (175125 bytes)

Výstupní obrazec:
2_IMLS4.jpg (53386 bytes)

 

Histogramy před a po ekvivalizací:

1_IM_imhist.gif (4255 bytes)

1_IM_cumhist.gif (4697 bytes)

 

Kumulativní histogramy před a po ekvivalizací:

1_IM_cumhist.gif (4320 bytes)

1_IMEQ_cumhist.gif (4535 bytes)

Diskuse:

Počet jasových úrovní v ekvalizovaném obrázku je stejný jako u původního obrázku, změnila se hodnota jasu.
Při ekvalizaci barevného obrázku bych postupoval po jednotlivých složkách RGB. Zjevně by došlo k barevnému zkreslení, ale to by mělo přispět ke zvýšení kontrastnosti předlohy.

2) Vzorkování obrazu. Rekonstrukce obrazu z navzorkovaných dat

Specifikace:

Vstupní data: circles.m -> vstupní obraz v IM

 

 

Řešení:
figure(1);colormap gray;imagesc(IM); axis equal
% filtruji
N=5;SIGMA=0.8;
HG = FSPECIAL('gaussian',N,SIGMA);
HS=ones(N)*(1/N);
IMLG=conv2(IM,HG,'same');
IMLS=conv2(IM,HS,'same');
% prevzorkuji /4
IMSG=IMLG(1:4:end,1:4:end);
IMSS=IMLS(1:4:end,1:4:end);
%prevzorkuji zpet x4
IMLG=interp2(interp2(IMSG));
IMLS=interp2(interp2(IMSS));
% zobrazim
figure(2);colormap gray;imagesc(IMLG); axis equal
figure(3);colormap gray;imagesc(IMLS); axis equal
imwrite(IMLG,'IMLG.TIF','tif')
imwrite(IMLS,'IMLS.TIF','tif')

% funkce filter2.
% zpetna fourierka: figure(2);imagesc(real(ifft2(ifftshift(im)))); axis equal

Převzorkování:

Originál:
2-im0.jpg (15287 bytes)
Po převzorkování na 1/4 rozlišení:
2-im4.jpg (1901 bytes)

Následné zvětšení:

Výstupní obrazec:

- pomocí funkce interp2

2-im11.jpg (13722 bytes)

- filtrem typu dolní propust

2-im12.jpg (13045 bytes)

- filtrem Gausián (sigma=11)

2-im13.jpg (6622 bytes)

Diskuse:

při zmenšování dojde ke ztrátě dat a tudíž při opětovné interpolací dostaneme zkreslený obrázek. Filtrováním dojde jen k překkrytí zkreslených oblastí. Nejlepších  výsledků dosahuje filtr typu dolní propust.

3) Filtrace obrazu, detekce hran

Specifikace:

Diskuse:

Nejlepší filtrace šumu Salt & Pepper je dosaženo pomocí fitru Median a velikostí 3x3 až 7x7
3-1.gif (22897 bytes)

Nejlepší filtrace šumu Gaussian je dosaženo pomocí fitrů Median a Adaptive s  velikostí 3x3 až 7x7, příčemž při rozměru 7x7 dochází ke znatelnému rozostření hran obrazu.
Celkově je tento typ šumu hůře odstranitelný, jelikož povaha signálu náhodná s rovnoměrným rozložením.
Šum Gaussian filtrovaný pomocí Median 3x3
3-2.gif (33314 bytes)

Šum Gasussian filtrovaný pomocí Adaptive 7x7
3-3.gif (30706 bytes)

 

Detekce hran

Použité detektory:

Detektor volba Sigma Vlastnosti
Sobel ne Dobrá detekce hran
Prewitt ne Dobrá detekce hran
Roberts ne Hrubý filtr s malým množstvím neplatných detekcí ale chybí i u jiných metod zdetekované hrany
Laplacian of Gaussian ne Filtr bez falešných hran s nežádoucím orámováním obrazu
Canny ano Velice kvalitní hranová detekce (nejlepší výsledky mezi porovnávanými ), ale s četnými falešnými hranami

 

Detektor   Výstup Detektor Výstup
Sobel   3-5.gif (3935 bytes) Laplacian of Gaussian 3-8.gif (4086 bytes)
Prewitt   3-6.gif (3884 bytes) Canny Auto 3-9.gif (4743 bytes)
Roberts   3-7.gif (3799 bytes) Canny-malá Sigma 3-9a.gif (6089 bytes)

Při změně parametru Sigma dochází ke změně schopnosti filtru rozeznávat detaily. Při volbě příliš malého sigma je šum obsažený v plošné výplni interpretován jako nežádoucí hrany, resp. zvyšováním sigma docházelo postupně k většímu rozmazání obrázku tedy se detekovalo stále méně hran.

4) Obnovení obrazu. Odstranění rozmazání způsobeného pohybem

Specifikace:

Ukázkový program:

4-1.gif (3113 bytes)    4-2.gif (13944 bytes)   4-3.gif (3284 bytes)

Výsledky našeho programu:

Vstupní obraz:

4-4.gif (9446 bytes)

Výpis programu:

close all;
im=imread('test.tif');
fim=fft2(im);
imshowl(abs(fim));
b = zeros(200,400);
L=10;
b(1:L,1) = 1/L;
fb = fft2(b);
vysledek = abs(ifft2(fim./(fb+0.005)));
figure; imshow(vysledek, []);

FFT2 vstupního obrazu:

4-6.gif (36907 bytes)

FFT2 masky b:

4-7.gif (5056 bytes)

Výstupní obraz s odstraněným rozmazáním:

4-5.gif (14175 bytes)

Diskuse:
Smer a velikost posunutí lze určit ze spektra původní předlohy.
Co dodat, funguje to.

5) Odstranění šumu a segmentace obrazu pomocí binární morfologie

close all;
im=imread('segmorph.tiff');
figure;imshow(im,[]);

Vstupní obraz:
5-1.gif (10136 bytes)

% odsumeni
b=ones(3);
imed=dilate(erode(im,b),b);
figure;imshow(imed,[]);

Obraz po otevření:
5-2.gif (4035 bytes)

b=ones(10);
imde=erode(dilate(imed,b),b);
figure;imshow(imde,[]);

Obraz po uzavření:
5-3.gif (2547 bytes)

 

%segmentace vertikalni
n=20;
b=ones(n,1);
imde2=erode(imde,b);
imde2=dilate(imde2,b);
figure;imshow(imde2,[]);

5-4.gif (2405 bytes)

 

%segmentace horizontalni
n=50;
b=ones(1,n);
imde2=erode(imde,b);
imde2=dilate(imde2,b);
figure;imshow(imde2,[]);

5-5.gif (1821 bytes)

Diskuse:

Porovnání metod odstranění šumu pomocí otevření a uzavření a pomocí mediánové filtrace (funkce medfilt2)

Odstranění šumu pomocí mediánové filtrace:                                                               
5-3.gif (2547 bytes)   

Odstranění šumu pomocí otevření a uzavření:
5-6.gif (2581 bytes)

zpět

bsp;                
5-3.gif (2547 bytes)   

Odstranění šumu pomocí otevření a uzavření:
5-6.gif (2581 bytes)

home


e-mail: david [zavináč] kvik [tečka] cz