l'image de fond

Traitements Multi Echelles

La Pyramide Gaussienne

Méthode

Programme

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

Exemple


pyramide gaussienne

Copyright © 2010-2014, tous droits réservés, contact : operationpixel@free.fr