字符切变校正

字符在进行二值化之后,大多数需要进行倾斜校正,一般用hough变换、搜索扫描角度等算法,也有一些字符存在切变,因此需要进行切变变换(剪切变换)。
主要参照论文《投影点坐标方差最小化车牌垂直倾斜校正》,可自行去知网下载。当字符不存在切变时,其在x轴上的投影坐标方差最小,利用这个特点可以求出切变角,然后进行仿射变换。前提是已经进行了倾斜校正。

clear;clc;
img=imread('chepai1.bmp');
img=rgb2gray(img);

grayimg=im2bw(img,180/255);
figure,
subplot(211),imshow(grayimg);
title('原图')
% bwimg1=bwareaopen(grayimg,65);
%figure,imshow(bwimg1);
[L,n]=bwlabel(grayimg);
%根据投影方差最小的特点求切变角,x轴
for l=1:n
    [r,c]=find(L==l);

    %STATS = regionprops(L,'area');

    xlength=length(c);
    ux=0;
    vy=0;
    for i=1:xlength
        ux=ux+c(i);
        vy=vy+r(i);
    end
    ux1=ux/xlength;
    vy1=vy/xlength;

    clear i;
    fenmu=0;
    fenzi=0;
    for i=1:xlength
        fenzi=fenzi+(c(i)-ux1)*(r(i)-vy1);
        fenmu=fenmu+(r(i)-vy1)*(r(i)-vy1);
    end

    qingxie(l)=fenzi/fenmu;
    jiaodu(l)=atan(qingxie(l))*57.3;
end
jiao=sum(jiaodu)/n;%切变角
tform=maketform('affine',[1 0 0;-tan(jiao/57.3) 1 0;0 0 1]);
ff=imtransform(grayimg,tform);%仿射变换矫正
subplot(212),imshow(ff);
title('矫正图')

效果如下:
字符切变校正_第1张图片
字符切变校正_第2张图片

你可能感兴趣的:(图像处理)