书籍翻拍展平方案
- 畸变校正基本原理
- 畸变校正的关键在于确定基点和畸变方程
- 基点:书本畸变是水平方向的畸变,以书本中间的分界线为基点
- 畸变方程:用书本的边界线来确定
- 书籍翻拍特征分析
- 书本的颜色信息有各种各样的,会影响二值化信息
- 书本厚薄会影响边界分界点的表现形式
- 厚书两边会有梯度
- 薄书中间位置会有最大最小值或是平行直线
- 书本的摆放角度会影响最终的表达式
- 执行方案流程
-
- 代码实现
- 获取图像并灰度化
%read image to cache imgSrc=imread('G:\01_work_project\06book_image\01source\厚薄\PIC_0005_Left.jpg'); %grayscale image with Max(R,G,B) [srcrow srccol]=size(imgSrc); for i=1:srcrow for j=1:srccol/3 imgGray(i,j)=max(imgSrc(i,j,1),max(imgSrc(i,j,2),imgSrc(i,j,3))); end end imwrite(imgGray,'E:\01灰度图.jpg'); figure(2);subplot(111);imshow(imgGray);title('灰度图');
- 二值化
%二值化 thresh=30/255; imgbw=im2bw(imgGray,thresh); imgbw=medfilt2(imgbw,[7 7]); imwrite(imgbw,'E:\02二值图.jpg');figure(3);subplot(111);imshow(imgbw);title('二值图');
- 边缘检测
imgEdge=edge(imgbw,'canny'); imwrite(imgEdge,'E:\03canny边缘检测.jpg');figure(4);subplot(111);imshow(imgEdge);title('canny算子边缘检测'); imgsmalledeg=bwmorph(imgEdge,'thin',Inf); imwrite(imgsmalledeg,'E:\04骨架.jpg');figure(5);subplot(111);imshow(imgsmalledeg);title('imgsmalledeg');
- 确界曲线
[row col]=size(imgsmalledeg); imgconfine=zeros(row,col); ytop(col)=0; ybot(col)=0; for j=20:col-20 for i=20:row/4 if imgsmalledeg(i,j)==1 imgconfine(i,j)=255; ytop(j)=i; break; end end for i=row-20:-1:row/4*3 if imgsmalledeg(i,j)==1 imgconfine(i,j)=255; ybot(j)=i; break; end end end imwrite(imgconfine,'E:\05结构点.jpg');figure(5);subplot(111);imshow(imgconfine);title('imgconfine');
- 寻找中间分界线
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%寻找右角点
%求出数值统计信息——————1.平均值2.变化率3.变化绝对值4.
top_dvalue(col-500)=0;
top_mvalue(col-500)=0;
top_ratevalue(col-500)=0;
bot_ratevalue(col-500)=0;
top_5poing(col-500)=0;
for i=col-25:-1:col-500
top_mvalue(i)=(ytop(i)+ytop(i-1)+ytop(i-2)+ytop(i+1)+ytop(i+2))/5;
top_ratevalue(i)=abs((ytop(i+5)-ytop(i))-(ytop(i)-ytop(i-5)));
bot_ratevalue(i)=abs((ybot(i+5)-ybot(i))-(ybot(i)-ybot(i-5)));
top_5poing(i)=ytop(i)-ytop(i-5);
end
for i=col-25:-1:col-500
top_dvalue(i)=ytop(i)-top_mvalue(i);
end
figure(7);subplot(221),bar(top_mvalue);
figure(7);subplot(222),bar(top_5poing);
figure(7);subplot(223),bar(top_ratevalue);
figure(7);subplot(224),bar(top_dvalue);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Maxratetop=0;
Maxratebot=0;
for i=col-25:-1:col-500
if top_ratevalue(i)>Maxratetop
Maxratetop=top_ratevalue(i);
Mattateitop=i;
end
if bot_ratevalue(i)>Maxratebot
Maxratebot=bot_ratevalue(i);
Mattateibot=i;
end
endimgright=imgconfine;
for j=1:col
for i=1:row
if j==Mattateitop
imgright(i,j)=255;
end
if j==Mattateibot
imgright(i,j)=64;
end
end
end
imwrite(imgright,'E:\06右上点.jpg');
figure(8);subplot(111);imshow(imgright);title('imgright');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- 获取图像并灰度化
- 测试调整
posted on 2016-10-09 10:03 xiaochenxi_cnblogs 阅读(1242) 评论(0) 编辑 收藏 举报