clear all; close all;
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...
'*.*','All Files' },'mytitle',...
'C:\Work\myfile.jpg')
f = imread(filename);
% image sur un plan
if (length(size(f))>2)
f=f(:,:,1);% passage de 3 dimensions à 1 ( couleur->niveau de gris)
end
% nombre de bit
k=8;
ordre=1; % ordre du filtre.
gamma = 0.7;
%rectification de la taille de l'image pour avoir matrice carré de taille
%d'une puissance de 2
[M N]=size(f);
tailleligne = log2(M);
taillecolonne = log2(N);
dimension = floor(min(tailleligne,taillecolonne))
f1=f(1:2^dimension,1:2^dimension);
%taille de la matrice
[M N]=size(f1);
f1=double(f1);
F1=double(zeros(floor(M/2),floor(N/2)));
if ordre == 1
for i = -ordre : ordre
for j = -ordre : ordre
distance = ( i^2 + j^2 )^0.5;
w(i+ordre+1,j+ordre+1)=exp(-distance^2/(2*gamma)^2);
end
end
moyenne = sum(sum(w));
w=w./moyenne;
elseif ordre == 2
for i = -ordre : ordre
for j = -ordre : ordre
distance = ( i^2 + j^2 )^0.5;
w(i+ordre+1,j+ordre+1)=exp(-distance^2/(2*gamma)^2);
end
end
w=w./moyenne;
end
%effet de bord
%decomposition
for d = 1 : dimension
if d == 1
f=f1;
else
eval(['f=F',num2str(d),';']);
end
[M N]=size(f);
f=double(f);
F=double(zeros(floor(M/2),floor(N/2)));
for i= 1: ordre
f=[f(1,1),f(1,:),f(1,end) ; f(:,1),f,f(:,end) ; f(end,1),f(end,:),f(end,end)];
end
for p = ordre : floor(M/2)
for q = ordre : floor(N/2)
for m = -ordre : ordre
for n = -ordre : ordre
F(p-ordre+1,q-ordre+1) =F(p-ordre+1,q-ordre+1) + f(2*p+m,2*q+n)*w(m+ordre+1,n+ordre+1);
end
end
end
end
eval(['F',num2str(d+1),'=F;']);
end
figure( 'Name','Gaussian Pyramid',...
'NumberTitle','off',...
'color',[0.3137 0.3137 0.5098]);
for d = 1 : dimension+1
eval(['subplot(2',num2str(ceil((dimension+1)/2)),num2str(d),');']);
if d == 1
imshow(uint8(f1));
title('f1');
else
eval(['imshow(uint8(F',num2str(d),'));']);
eval(['title(''F',num2str(d),''');']);
end
end
Copyright © 2010-2014, tous droits réservés, contact : operationpixel@free.fr