Using homogeneous coordinates to rotate an image Currently, I have this code snippet, but it's a little bit slow:

% input image
input_matrix = imread('placa.bmp');
[rows cols] = size(input_matrix);


% rotation
degree = 30;
radians = (pi * degree) / 180; 
theta = radians;


% output matrix
t_matrix = input_matrix;
t_matrix(t_matrix == input_matrix) = NaN;

% transformation matrix
T = [cos(theta) -sin(theta) 0; sin(theta) cos(theta) 1; 0 0 1];


% loop over each input_matrix coordinate
for n = 1:numel(input_matrix)

    % current coordinate
    [x y] = ind2sub([rows cols], n);

    % transpose
    v = [x y 1]';

    % homogeneous coordinate
    v = T*v;

    % transponse again
    v = v';

    % only integer values
    a = floor(v(1));
    b = floor(v(2));

    if a &gt; 0 &amp;&amp; b &gt; 0

        % replace in t_matrix
        t_matrix(a,b) = input_matrix(x,y);
    end
end

% get only a part of t_matrix
t_matrix = t_matrix(1:rows, 1:cols);

figure; imshow(input_matrix); % original image
figure; imshow(t_matrix)


How can I improve it? 

Condition: keep using this matrix: 

% transformation matrix
T = [cos(theta) -sin(theta) 0; sin(theta) cos(theta) 1; 0 0 1];
Rather than looping over all x and y values you could put them into a vector, that should speed things up considerably.

y=repmat(1:cols,rows,1)
x=repmat((1:rows)',cols,1)

M=[x(:) y(:) ones(rows*cols,1)];


Now you just need to multiply M or M' with T or T' and you have subsitituted that part of the code.