书籍翻拍畸变校正

1.畸变校正的基本原理:

  畸变矫正,首先应该知道畸变系数,然后做与畸变相反的变换,消除畸变。

  所以我们需要找到畸变系数。如何去找畸变系数?从书的边界线来确定畸变方程。

2.分析结果:

  二值化--剪裁书的边界--确定边界的曲线方程--校正

  二值化:直接黑白

  剪裁书的边界:通过角度突变,或是统计值变化很大。

  确定曲线方程,最小二乘法拟合曲线

  确定校正系数

  三次插值法插值

3.算法流程:

  

4.方案实现:matlab

算法整体流程:

获取图像->灰度化->二值化->边缘检测->寻找书的边界->拟合成线->得到畸变系数->畸变校正

  a).先获取图像并灰度化:

    
clc;

clear('all');

close all;

imgSrc=imread('E:\imgsrc.jpg');

imgGray=rgb2gray(imgSrc);

imwrite(imgGray,'E:\01灰度图.jpg');

figure(1);subplot(121);imshow(imgSrc);title('原图');

figure(1);subplot(122);imshow(imgGray);title('灰度图');

  b).二值化:

    
thresh=30/255;

imgbw=im2bw(imgGray,thresh);

imgbw=medfilt2(imgbw,[7 7]);

imwrite(imgbw,'E:\02二值图.jpg');

figure(2);subplot(111);imshow(imgbw);title('二值图');

 

  c).边缘检测粗略寻找信息

    

imgElog=edge(imgbw,'log');

imwrite(imgElog,'E:\03Laplacian算子.jpg');

figure(3);subplot(111);imshow(imgElog);title('Laplacian算子');

 


 

  d)书籍边缘检测:从右侧开始,寻找1/2区域的最大值和最小值作为我们的目标区域

    
[row col]=size(imgElog);

imgBoundary=zeros(row,col);

for j=1:col

 if j>col/2

 ystart1=0;

 for i=20:row/2

 if ystart1>0 && i-ystart1>20

 break;

 end

 ystart1=i;

 if imgElog(i,j)==1

 imgBoundary(i,j)=255;

 if imgElog(i+1,j)==0;

 break;

 end

 end

 end

 ystart2=0;

 for i=row-1:-1:row/2

 if ystart2>0 && ystart2-i>20

 break;

 end

 ystart2=i;

 if imgElog(i,j)==1

 imgBoundary(i,j)=255;

 if imgElog(i-1,j)==0;

 break;

 end

 end

 end

 end

end
 
 

imwrite(imgBoundary,'E:\04边缘检测图.jpg');

figure(4);subplot(111);imshow(imgBoundary);title('边缘检测图');

 

  e).寻找角点,确定书的边界:

    
right_start_x=0;

right_end_x=0;

right_start_y=0;

right_end_y=0;

for j=col*2/3:col-20

 for i=1:row/3

 if imgBoundary(i,j)==255 

 if right_end_y<i || right_end_y==0

 right_end_y=i;

 right_end_x=j;

 end

 end

 end

end

for j=col*2/3:col-20

 for i=row*2/3:row-20

 if imgBoundary(i,j)==255 

 if right_start_y>i || right_start_y==0

 right_start_y=i;

 right_start_x=j;

 end

 end

 end

end

imgCut=zeros(row,col);

for i=1:row

 for j=1:col

 if i<=right_start_y && i>=right_end_y && j>=right_start_x && j<=right_end_x

 imgCut(i,j)=255;

 end

 end

end

imwrite(imgCut,'E:\05书籍切分图.jpg');

figure(5);subplot(111);imshow(imgCut);title('05书籍切分图');

 


 

  f).拟合确定边界方程:对文字进行横行open,然后拟合直线方程,再行展平。

 

 

5测试数据.

转载于:https://www.cnblogs.com/xiaochenxi-cnblogs/p/5886063.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值