How to find angle of rotation between two images

8 次查看(过去 30 天)
Hi I'm using matlab to try and detect the angle by which the rectangles are inclined in the image. The code I used so far is below. I need to find the rotation between two images so I tried rotating one image and comparing it with the other image but that doesn't work as the image dimensions change on rotating. I know I need to use hough transform but can't figure out how. I have attached the three images i am using as lhs.jpg, center.jpg and rhs.jpg depending on the view the picture has been taken from.
clc;
clear all;
%%Procedure for RHS
I = imread('rhs.jpg');
% creating RGB matrices and storing dimensions
R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);
size = size(R);
rows = size(1,1);
columns = size(1,2);
% Manipulating pixels
for i = 1:rows
for j = 1:columns
if B(i,j) <= 70;
I(i,j,:) = 255;
end
end
end
figure, imshow(I)
%edge detection
I = rgb2gray(I);
I = imadjust(I, [0.3 0.9], [0 1]);
BW1 = edge(I,'canny',0.15);
figure, imshow(BW1);
[H,theta,rho] = hough(BW1);
% figure, imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,...
% 'InitialMagnification','fit');
xlabel('\theta (degrees)'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot)
P = houghpeaks(H,75,'threshold',ceil(0.11*max(H(:))));
lines = houghlines(BW1,theta,rho,P,'FillGap',5,'MinLength',5);
figure, imshow(BW1), hold on
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',3,'Color','green');
end
%%Procedure for LHS
clear I;
clear R;
clear G;
clear B;
clear size;
I = imread('lhs.jpg');
% creating RGB matrices and storing dimensions
R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);
size = size(R);
rows = size(1,1);
columns = size(1,2);
% Manipulating pixels
for i = 1:rows
for j = 1:columns
if B(i,j) <= 70;
I(i,j,:) = 255;
end
end
end
figure, imshow(I)
%edge detection
I = rgb2gray(I);
I = imadjust(I, [0.3 0.9], [0 1]);
BW2 = edge(I,'canny',0.15);
figure, imshow(BW2);
[H,theta,rho] = hough(BW2);
% figure, imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,...
% 'InitialMagnification','fit');
xlabel('\theta (degrees)'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot)
P = houghpeaks(H,75,'threshold',ceil(0.11*max(H(:))));
lines = houghlines(BW2,theta,rho,P,'FillGap',5,'MinLength',5);
figure, imshow(BW2), hold on
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',3,'Color','green');
end
%%Finding angle of rotation by rotating by trial and error angles
diff = BW1 - BW2;
for i = 1:180
BW1 = imrotate(BW1,i);
newdiff = BW1-BW2;
if newdiff < diff
diff = newdiff;
angle = i;
end
end

回答(2 个)

Sean de Wolski
Sean de Wolski 2012-8-16

Sharvil
Sharvil 2013-10-20
Heyy..This code is perfect but it shows an error in the last if condidion that : "Matrix dimensions must be same" Can you please resolve this error?

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by