Learn How to Rotate Images in Matlab: Step-by-Step Guide | Expert Tips

Click For Summary

Discussion Overview

The discussion centers around the challenges of rotating images in Matlab, specifically addressing issues related to unexpected artifacts such as a black background and superimposed lines and dots. Participants share code snippets, seek advice, and explore potential solutions related to image transformation and handling pixel coordinates during rotation.

Discussion Character

  • Exploratory
  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant describes their experience with rotating an image in Matlab and notes the appearance of a black background and artifacts after rotation.
  • Another participant suggests that even with adjustments, corners of the rotated image may extend beyond the original frame, indicating that Matlab may handle this issue but not perfectly.
  • A different participant expresses confusion about the Matlab language and their current understanding of the code.
  • One participant proposes using region properties and centroids to maintain the triangle's position during rotation, suggesting this might resolve some issues.
  • Another participant questions the correctness of the transformation matrix used in the code, proposing an alternative formulation for the rotation matrix.

Areas of Agreement / Disagreement

Participants express varying levels of understanding and propose different approaches to the problem, indicating that there is no consensus on the best method to resolve the issues with image rotation in Matlab.

Contextual Notes

Participants discuss the handling of pixels that may rotate out of the frame and the implications of the transformation matrix used, highlighting potential limitations in the current approach without resolving these concerns.

gnome
Messages
1,031
Reaction score
1
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:
% rotation.m

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

a = imread('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)
 

Attachments

  • triangles.png
    triangles.png
    1.6 KB · Views: 954
  • newtri.png
    newtri.png
    1.9 KB · Views: 865
  • tri.png
    tri.png
    632 bytes · Views: 934
Last edited:
Physics news on Phys.org
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?
 
I have no idea how to understand the 'Matlab" lanuage lol. I am still trying to figure this out :P
 
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.


:smile:
 
Wrong Matrix?

I haven't 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)];
 

Similar threads

Replies
1
Views
3K
  • · Replies 4 ·
Replies
4
Views
10K
  • · Replies 7 ·
Replies
7
Views
4K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K
Replies
3
Views
3K
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 3 ·
Replies
3
Views
6K
  • · Replies 2 ·
Replies
2
Views
2K