# Rotating images in matlab

1. Mar 24, 2005

### gnome

OK here I am, bigshot, giving out advice on how to rotate an image when I'm just trying to learn that myself.

I'm trying to do this in Matlab; it's rotating, but for some reason the rotated image is acquiring a black background and has various lines and dots superimposed on it. Can anyone tell me why?

Here's the code:
Code (Text):
% rotation.m

% reads in and rotates a figure in file triangles.png

image(a);         % this just displays the original image
pause;
close;              % this closes it
[rows cols layers] = size(a);     % this declares 3 variables named rows, cols
% &  layers & assigns to them the dimensions of array a
s = min(rows,cols);
%% want to make sure the new image is square, just for convenience
rows=s;
cols=s;
%% declare a 32-bit int vector p (1 x 2) to hold the coordinates of the new point, initialized (0 0)
p=int32(zeros(1,2));
%% for simplicity, I will only deal with one color so define two 2D matrices, size rows x cols,
%% type double to allow multiplication, initialized to all 0s
b = double(zeros(rows,cols));
c = double(zeros(rows,cols));
%% loop through the array, copying just the red layer of a to the corresponding pixels of b
for row = 1:rows,
for col = 1:cols,
b(row,col)=a(row,col,1);
end
end

%% define the transformation matrix t
t = [ cos(pi/4) -sin(pi/4); sin(pi/4) cos(pi/4)];
%% now loop through the arrays computing rotated & shifted coordinates for array c
%% and copy pixels from b to their new locations in c
for row = 1:rows,
for col = 1:cols,
%% first compute the coords of the new point; note I'm rotating
%% and shifting to prevent any negative indices
%% got the 140 right-shift by trial & error
p = round([row col]*t) + [0 140];
%% now copy the current pixel value to the new matrix
c(p(1,1),p(1,2)) = b(row,col);
end
end

image(c);
hold on;         % this holds the image window open so I can view one superimposed over  the other
image(b);
imwrite(b,'tri.png');
imwrite(c,'newtri.png');

Images are attached. triangles.png is the original image. tri.png is just the red layer of that file; that's the array I'm rotating. newtri.png is the result.

Edit: I just noticed that tri.png got rotated somehow in the process of uploading, so it wasn't oriented the same as the original image. Now it's OK.

Edit: added more comments to the code (everything starting with % is a comment)

#### Attached Files:

File size:
3.2 KB
Views:
291
File size:
1.9 KB
Views:
243
• ###### tri.png
File size:
618 bytes
Views:
231
Last edited: Mar 25, 2005
2. Mar 24, 2005

### gnome

On second thought, I guess what's surprising is that it works at all. Even though I've shifted it so that my triangle figure ends up within the boundaries of the original image frame, no matter where I put it, after rotation there will be corners "hanging out" of the boundaries of the original frame. So apparently Matlab is already doing something to handle that for me, but obviously not perfectly.

So, do I have to change the program so that pixels that get rotated out of the frame are simply dropped?

3. Mar 24, 2005

### eNathan

I have no idea how to understand the 'Matlab" lanuage lol. I am still trying to figure this out :P

4. Jun 19, 2007

yaa

Yaa may it's th case withthe location of the triangle for every movement u do in the for loop. tryin assigning using the regioprops and centroid of the triangle , and maintain the same coordintes of the centroid even after rotation. that might help U.

5. Mar 24, 2008

### djmc993150

Wrong Matrix?

I havent tested the code, but off the cuff I think your transformation matrix is wrong:

You have:
t = [ cos(pi/4) -sin(pi/4); sin(pi/4) cos(pi/4)];

I think it should be:

t = [ cos(pi/4) sin(pi/4); -sin(pi/4) cos(pi/4)];