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
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:

Výstupní obrazec:

Histogramy před a po ekvivalizací:
|
![]() |
Kumulativní histogramy před a po ekvivalizací:
|
![]() |
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:![]() |
Po převzorkování na 1/4 rozlišení:![]() |
Následné zvětšení:
Výstupní obrazec:
- pomocí funkce interp2

- filtrem typu dolní propust

- filtrem Gausián (sigma=11)

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

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

Šum Gasussian filtrovaný pomocí Adaptive 7x7

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 | ![]() |
Laplacian of Gaussian | ![]() |
|
| Prewitt | ![]() |
Canny Auto | ![]() |
|
| Roberts | ![]() |
Canny-malá Sigma | ![]() |
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:

Výsledky našeho programu:
Vstupní obraz:

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:

FFT2 masky b:

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

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:

% odsumeni
b=ones(3);
imed=dilate(erode(im,b),b);
figure;imshow(imed,[]);
Obraz po otevření:

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

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

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:
Odstranění šumu pomocí otevření a uzavření:












