matlab 实现车牌的倾斜校正
2014-10-16 10:28
239 查看
clear,clc,close all;
%[fn,pn,fi]=uigetfile('*.jpg;*.bmp','选择图片');
I=imread('E:\picture\12.jpg');figure,imshow(I);title('原始图像');
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
% A = imrotate(I,-angle,'bilinear');% imrate 是逆时针的所以取一个负号
% figure,imshow(A);
K1=-((xy_long(2,2)-xy_long(1,2))/(xy_long(2,1)-xy_long(1,1)))
%K1=-((xy_long(1,2)-xy_long(2,2))/(xy_long(1,1)-xy_long(2,1)))
angle=atan(K1)*180/pi
A = imrotate(I,-angle,'bilinear');% imrate 是逆时针的所以取一个负号
figure,imshow(A);
%[fn,pn,fi]=uigetfile('*.jpg;*.bmp','选择图片');
I=imread('E:\picture\12.jpg');figure,imshow(I);title('原始图像');
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
% A = imrotate(I,-angle,'bilinear');% imrate 是逆时针的所以取一个负号
% figure,imshow(A);
K1=-((xy_long(2,2)-xy_long(1,2))/(xy_long(2,1)-xy_long(1,1)))
%K1=-((xy_long(1,2)-xy_long(2,2))/(xy_long(1,1)-xy_long(2,1)))
angle=atan(K1)*180/pi
A = imrotate(I,-angle,'bilinear');% imrate 是逆时针的所以取一个负号
figure,imshow(A);
相关文章推荐
- 车牌的倾斜校正
- matlab_关于倾斜校正的函数
- matlab练习程序(倾斜校正,透视变换)
- 分享:matlab实现车牌字符分割与识别
- MATLAB实现的车牌定位系统
- matlab练习程序(倾斜校正,透视变换)
- 文档图像倾斜角检测及校正(二)(Matlab)
- 车牌图像倾斜校正
- matlab实现图像校正
- MATLAB实现一个简单的车牌识别小程序
- 车牌识别系统Matlab算法实现
- 文档图像倾斜角检测及校正(一)(Matlab)
- 实现-汽车牌照识别系统中车牌定位与校正及字符分割的研究
- 车牌识别系统Matlab算法实现
- 文档图像倾斜角检测及校正(三)(Matlab)
- matlab练习程序(倾斜校正,透视变换)
- 多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(3)编码过程——主程序
- 如何实现C#与matlab交互
- 快速傅立叶变换(FFT)的C++实现与Matlab实验
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(1)算法概述