Like for the translation, we will assign the value of a pixel in the original image to another coordinate.
The associations are defined as follows:
Where n are the pixels of the new image and p pixels in the original image.
To make a correct rotation,
a point must be defined to be the center of rotation, we use the variables and centrecolonne to define the center.
The center will be the middle of the image. In addition, the final image will be larger than the original image, otherwise
the image will be truncated. To avoid this we use the variable radius, it contains the modulus of the diagonal of the image.
The size of the new image will be radius * radius.
Of course, the coordinates must be tested to know if they exist in the original image. If they do not exist, we put the new pixel to zero.
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, all rights reserved, contact: operationpixel@free.fr