l'image de fond

fr       en

Traitements d'Images en Niveau de Gris

La Rotation

Méthode

Comme pour la translation, nous allons assigner la valeur d'un pixel de l'image d'origine mais à une certaine coordonnée de l'image résultante. Les associations sont définies comme suit :


rotation1

Où n sont les pixels de la nouvelle image et p les pixels de l'image d'origine.
Afin de faire une rotation correcte, il faut définir le point qui sera le centre de rotation, nous utiliserons les variables centreligne et centrecolonne pour définir ce centre. Le centre sera le milieu de l'image. De plus, l'image finale devra être plus grande que l'image d'origine, sinon l'image sera tronquée. Afin d'éviter ce phénomène nous utiliserons la variable rayon, elle contient le module de la diagonal de l'image. La taille de la nouvelle image sera de rayon * rayon.


rotation3

Bien entendu, il faut tester si les coordonnées existent dans l'image d'origine. S'ils n'existent pas, nous mettons le nouveau pixel à zéro.

Programme

function guitranslation
clear all;
close all;
figure(  'name','translation',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
       
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','degree',...
            'Min' ,0,'Max',360, ...
            'Position', [70 10 100 20],...
            'Value', 0,...
            'SliderStep',[0.01 0.1], ...
            'callback',{@translation,'degree'});
text(1)=uicontrol(  'style','text',...
            'string','translation droite ',...
            'Position', [70 30 100 20]);

%parametre initial
setappdata(gcf,'k',8);
setappdata(gcf,'x',1);
setappdata(gcf,'degree',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);
     degree = getappdata(1,'degree');
     set( text(1), 'String', strcat(num2str(degree),'°'));
     img = getappdata(1,'x');
     k = getappdata(1,'k');
     
     [ligne colonne]=size(img);
     
     rayon = round((ligne^2+colonne^2)^0.5);
     rayon2 = round(rayon/2);
     centreligne = round(ligne / 2);
     centrecolonne = round(colonne/2);

     img2=uint8(zeros(rayon,rayon));

     degree = degree*2*pi/360;
     for i=1:rayon
       for j=1:rayon
           n1=round(cos(degree)*(i-rayon2) - sin(degree)*(j-rayon2))+ centreligne;
           n2=round(sin(degree)*(i-rayon2) + cos(degree)*(j-rayon2))+ centrecolonne;
           if ( (n1)>0 && (n1)<=ligne && (n2)>0  && (n2)<=colonne )
               img2(i,j) = img(n1,n2);
           else
               img2(i,j)=0;
           end
       end
     end
     axes(a(2))
     imshow(img2)
     
end
end

Exemple


rotation d'une image

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