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 :
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.
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.
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
Copyright © 2010-2014, tous droits réservés, contact : operationpixel@free.fr