l'image de fond

fr       en

Traitements d'Images en Niveau de Gris

La Translation

Méthode

Afin de réaliser ce traitement, il nous suffit juste de déplacer les valeurs des pixels d'un nombre défini de pixel verticalement (en haut ou en bas) et horizontalement (à gauche ou à droite). L'opération est simple puisqu'il faut réassigner les valeurs des pixels à d'autres positions.
translation

img2(i,j) = img(i+bas,j+droite);

Ici, pour chaque pixel de la nouvelle image img2 nous assignons le pixel se situant à x1 pixels plus bas et x2 pixels à droite (x peut être négatif). Un simple test doit être fait pour savoir si le pixel qui doit être assigné existe. S'il n'existe pas (il ne fait pas partie de l'image d'origine) alors le nouveau pixel prend la valeur 0 si nous voulons un fond noir ou 255 si nous préférons un font blanc.

Le programme

function guitranslation
clear all;
close all;
figure(  'name','translation',...
            'NumberTitle','off',...
            'MenuBar','none');
       
a(1)=axes('units','normalized',...
    'position',[0.05 0.4 0.4 0.4]);
a(2)=axes('units','normalized',...
    'position',[0.5 0.4 0.4 0.4]);


uicontrol(  'style','pushbutton',...
            'string','load',...
            'Position', [10 10 50 20],...
            'callback',@loadimage);

uicontrol(  'style','slider',...
            'string','droite',...
            'Min' ,-100,'Max',100, ...
            'Position', [70 10 100 20],...
            'Value', 0,...
            'SliderStep',[0.01 0.1], ...
            'callback',{@translation,'bas'});
text(1)=uicontrol(  'style','text',...
            'string','translation droite ',...
            'Position', [70 30 100 20]);
uicontrol(  'style','slider',...
            'string','bas',...
            'Min' ,-100,'Max',100, ...
            'Position', [180 10 100 20],...
            'Value', 0,...
            'SliderStep',[0.01 0.1], ...
            'callback',{@translation,'droite'});
text(2)=uicontrol(  'style','text',...
            'string','translation bas ',...
            'Position', [180 30 100 20]);

%parametre initial
setappdata(gcf,'k',8);
setappdata(gcf,'x',1);
setappdata(gcf,'bas',0);
setappdata(gcf,'droite',0);      
function loadimage(~,~)
    % appeler quand appui check box
    [filename, pathname] = uigetfile({'*.jpg;*.tif;*.PNG;*.gif;*.bmp','All Image Files';...
          '*.*','All Files' },'mytitle',...
          'C:\Work\myfile.jpg')

    x = imread(filename);
    if (length(size(x))>2)
        x=x(:,:,1);% on prend une seul plan image noir et blanc chaque plan sont egaux
    end
    k = whos('x');
    if k.class == 'uint8'
        k=8;
    end
    setappdata(1,'k',k);
    setappdata(1,'x',x);
    axes(a(1))
    imshow(x)
    axes(a(2))
    imshow(x)
   
end
function translation(hObj,~,name)
     val = round(get(hObj,'Value'));
     setappdata(1,name,val);
     bas = getappdata(1,'bas');
     droite = getappdata(1,'droite');
     set( text(1), 'String', bas );
     set( text(2), 'String', droite );
     img = getappdata(1,'x');
     k = getappdata(1,'k');
     
     [ligne colonne]=size(img);
     img2=uint8(zeros(ligne,colonne));
     bas = round(ligne*bas/100);
     droite = round(colonne*droite/100);
     for i=1:ligne
       for j=1:colonne
           if ( (i+bas)>0 && (i+bas)<=ligne && (j+droite)>0  && (j+droite)<=colonne )
               img2(i,j) = img(i+bas,j+droite);
           else
               img2(i,j)=0;
           end
       end
     end
     axes(a(2))
     imshow(img2)
     
end
end

Exemple


translation d'une image

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