%利用最小二乘法进行图像倾斜校正
clear all
I=imread('F:\MyMATLAB\qxjz\qingxie.jpg');
imview(I);
A=0; %最小二乘法求解中的第1项
B=0; %最小二乘法求解中的第2项
C=0; %最小二乘法求解中的第3项
D=0; %最小二乘法求解中分母的第1项
N=0; %计算图像中为1的个数
I1=im2bw(I,0.3); %对输入图像进行二值化处理
[m,n]=size(I1);
II=ones(m,n);
II=-1*I1+II; %反色处理
[m,n]=find(II);
rowmin=min(m);
rowmax=max(m);
colummin=min(n);
colummax=max(n);
I2=II(rowmin:rowmax,colummin:colummax); %显示文字部分
[m,n]=size(I2);
for i=1:m
for j=1:n
A=A+I2(i,j)*i*j;
B=B+I2(i,j)*i;
C=C+I2(i,j)*j;
D=D+I2(i,j)*j*j;
N=I2(i,j)+N; %计算最小二乘法中的各项
end
end
U=N*A-C*B;
V=N*D-C*C;
a=U/V; %计算啮合直线的斜率
rotate=atan(a);
rotate=rotate*180/3.142;
J=imrotate(I2,rotate); %对图像进行旋转
figure,imshow(J); %显示经过校正的图像
评论3
最新资源