码迷,mamicode.com
首页 > 其他好文 > 详细

图像旋转

时间:2018-04-07 15:03:54      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:double   gray   for   旋转   ble   log   white   cat   jpg   

clear,clc,close all;
I=imread(‘timg2.jpg‘);
bw=rgb2gray(I);
bw=im2bw(I,graythresh(bw));
bw=double(bw);
BW=edge(bw,‘canny‘);
imshow(BW);title(‘canny 边界图像‘);
[H,T,R]=hough(BW);
figure,imshow(H,[],‘XData‘,T,‘YData‘,R,‘InitialMagnification‘,‘fit‘);
xlabel(‘\theta‘),ylabel(‘\rho‘);
axis on, axis normal,hold on;
P=houghpeaks(H,4,‘threshold‘,ceil(0.3*max(H(:))));
x=T(P(:,2)); y = R(P(:,1));
plot(x,y,‘s‘,‘color‘,‘white‘);
lines=houghlines(BW,T,R,P,‘FillGap‘,50,‘MinLength‘,7);
figure,imshow(BW),title(‘直线标识图像‘);
max_len = 0;
hold on;
for k=1:length(lines)
xy=[lines(k).point1;lines(k).point2];
% 标出线段
plot(xy(:,1),xy(:,2),‘LineWidth‘,2,‘Color‘,‘green‘);
% 标出线段的起始和终端点
plot(xy(1,1),xy(1,2),‘x‘,‘LineWidth‘,2,‘Color‘,‘yellow‘);
plot(xy(2,1),xy(2,2),‘x‘,‘LineWidth‘,2,‘Color‘,‘red‘);
len=norm(lines(k).point1-lines(k).point2);
Len(k)=len;
if (len>max_len)
max_len=len;
xy_long=xy;
end
end
% 强调最长的部分
plot(xy_long(:,1),xy_long(:,2),‘LineWidth‘,2,‘Color‘,‘blue‘);
[L1 Index1]=max(Len(:));
% 最长线段的起始和终止点
x1=[lines(Index1).point1(1) lines(Index1).point2(1)];
y1=[lines(Index1).point1(2) lines(Index1).point2(2)];
% 求得线段的斜率
K1=-(lines(Index1).point1(2)-lines(Index1).point2(2))/...
(lines(Index1).point1(1)-lines(Index1).point2(1));
angle=atan(K1)*180/pi
if(angle>0)
angle=angle-90;
elseif(angle<0)
angle=90+angle;
end
A = imrotate(I,-angle,‘bilinear‘);% imrate 是逆时针的所以取一个负号
figure,imshow(A);

图像旋转

标签:double   gray   for   旋转   ble   log   white   cat   jpg   

原文地址:https://www.cnblogs.com/hsyv123ve/p/8733109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!