https://blog.csdn.net/qq_41301570/article/details/131615671
之前的文章中,我们基于霍夫变换(Hough)对文档图片进行了校正,详细内容点击上方蓝字进行查看。今天再次以基于霍夫变换为出发点,考虑实际环境中的影响因素,进一步探讨了该方法在车牌图片校正中的适用性。此外,本文还介绍了基于Radon变换算法进行的车牌纠正。
1、基于Hough变换车牌校正
clear
clc
I=imread('1.jpg');
I1=rgb2gray(I); %转换成灰度图像
I2=wiener2(I1,[5,5]); %对图像进行维纳滤波
I3=edge(I2,'sobel', 'horizontal'); %用Sobel水平算子,检测图像边缘直线
[m,n]=size(I3); %计算图像大小
rou=round(sqrt(m^2+n^2)); %获取rou最大值
thetaMax=180; %获取theta角最大值
countMatrix=zeros(rou,thetaMax); %产生量化初值为0的计数矩阵
for i=1:m
for j=1:n
if I3(i,j)==1
for theta=1:thetaMax
ru=floor(abs(i*cos(theta*pi/180)+j*sin(theta*pi/180)));
countMatrix(ru+1,theta)=countMatrix(ru+1,theta)+1; %对矩阵记数
end
end
end
end
r_max=countMatrix(1,1);
for i=1:rou
for j=1:thetaMax
if countMatrix(i,j)>r_max
r_max=countMatrix(i,j);
angle=j; %把矩阵元素最大值所对应的列坐标赋给c
end
end
end
if angle<=90
rot_theta=-angle; %确定旋转角度
else
rot_theta=180-angle;
end
I4=imrotate(I,rot_theta,'crop'); %对图像进行旋转矫正
figure
subplot(121),imshow(I)
subplot(122),imshow(I2)
figure,
subplot(121),imshow(I3)
subplot(122),imshow(I4)
2、基于Radon变换车牌校正
clear
clc
I=imread('1.jpg'); %图像输入
I1=rgb2gray(I); %转换成灰度图像I1
I2=wiener2(I1,[5,5]); %对图像进行维纳滤波I2
I3=edge(I2,'sobel', 'horizontal');%用Sobel水平算子对图像边缘化
theta=0:179; %设置选择角度
r=radon(I3,theta); %对图像进行Radon变换
[m,n]=size(r);
c=1;
for i=1:m
for j=1:n
if r(1,1)<r(i,j)
r(1,1)=r(i,j);
c=j;
end
end
end %检测Radon变换矩阵中的峰值所对应的列坐标
rot=90-c;%确定旋转角度
I4=imrotate(I,rot,'crop'); %对图像进行旋转矫正
figure
subplot(221),imshow(I)
subplot(222),imshow(I2)
subplot(223),imshow(I3)
subplot(224),imshow(I4)
本文介绍了如何使用Hough变换和Radon变换实现车牌图片校正。通过预处理图片、检测直线、筛选直线、计算旋转角度和调整图片角度等步骤,可以获得更准确的视觉效果。通过进行车牌校正,有助于进行车牌区域提取。关于车牌区域提取,可参考下方蓝色链接:
https://blog.csdn.net/qq_41301570/article/details/131615702
最后:
如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!