我们在日常生活中有时看到的pdf文档是扫描件,那扫描的结果有时很不好 ,歪歪斜斜还有阴影。这样就会影响到我们的阅读心情。例如我前两天找到的一本《矩阵论》的pdf文档就是扫描件,给大家看一下。

很明显可以看到左边这张歪了,而且中间还有一条黑线,看着不太舒服。

对于以上这种情况,我们要做的就是1.把中间的黑线去掉。2.把图像一分为二,因为是两页。3.把图像矫正过来。针对以上步骤,可以参照我下面给出的代码,理解其内容。

clc
clf
clear
path='C:\Users\ASUS\Desktop\juzhen\'; %%需要处理的图像文件夹
list=dir(path);
path1='C:\Users\ASUS\Desktop\矩阵论处理1\'; %%处理后图像所在文件夹
for i=3:length(list)
% i=66;
path2=[path list(i).name];
I=imread(path2);%读取图片
[a,b,c]=size(I);
if c==3I=rgb2gray(I);
end
BW=imbinarize(I,graythresh(I));BW(:,round(b/2)-200:round(b/2)+200) = 1;
A=BW(:,1:round(b/2));
B=BW(:,round(b/2)+1:end);A1=~A(600:1200,:);
% A1=~A(400:1600,:);
A1=imclearborder(A1,8);
stats_1 = regionprops(A1,'Eccentricity');
statsangle_1=regionprops(A1,'Orientation');
m1=cell2mat(struct2cell(stats_1));
[~,maxnum1]=max(m1);
statsangle_1=cell2mat(struct2cell(statsangle_1));
angle_1=statsangle_1(maxnum1);
if abs(angle_1)>=0.1pic_1=imrotate(~A,-(angle_1),'bilinear','crop');
elsepic_1=~A;
endB1=~B(600:1200,:);
% B1=~B(400:1600,:);
B1=imclearborder(B1,8);
stats_2 = regionprops(B1,'Eccentricity');
statsangle_2=regionprops(B1,'Orientation');
m2=cell2mat(struct2cell(stats_2));
[~,maxnum2]=max(m2);
statsangle_2=cell2mat(struct2cell(statsangle_2));
angle_2=statsangle_2(maxnum2);
if abs(angle_2)>=0.1pic_2=imrotate(~B,-(angle_2),'bilinear','crop');
else  pic_2=~B;
end      name1=num2str(2*i-1);
name2=num2str(2*i);
imwrite(~pic_1,[path1,name1,'.png']);
imwrite(~pic_2,[path1,name2,'.png']);
% imshow(B1)
end

这个处理流程比较简单。但是前提得是你把pdf文档先转换成图片。

1.首先根据路径读取图片列表,然后依次读取图片进行处理。

2.对于读取到的图片判断其大小,如果是正常的三通道图片就要转换成灰度图像,否则就跳过该步骤。

3.对读取的图像进行二值转换,然后用BW(:,round(b/2)-200:round(b/2)+200) = 1覆盖其中间的黑线(注意这个范围要根据实际适当的调整)。

4.将二值图像进行分离,分成A,B两个图像A=BW(:,1:round(b/2));B=BW(:,round(b/2)+1:end);

5.采集其标头部分的横线,这是本次处理的重点,因为横线的方向就代表了页面的倾斜程度。所以要完整的采集此线条。(适当调整A1=~A(600:1200,:)的范围)

6.计算不同连通域的离心率,并找出最大的离心率。(regionprops(A1,'Eccentricity');是标量,与区域具有相同标准二阶中心矩的椭圆的离心率(可作为特征)。本属性只支持二维标注矩阵)

stats_1 = regionprops(A1,'Eccentricity');
m1=cell2mat(struct2cell(stats_1));
[~,maxnum1]=max(m1);

7.计算每个连通域的倾斜角度,并按照上一步的结果找到离心率最大的连通域的倾斜角度。实际上就是本线条的倾斜角度。(regionprops(A1,'Orientation');是标量,与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角(度)。本属性只支持二维标注矩阵)

statsangle_1=regionprops(A1,'Orientation');
statsangle_1=cell2mat(struct2cell(statsangle_1));
angle_1=statsangle_1(maxnum1);

8.根据计算结果进行旋转矫正。这里面的'crop'意思是不改变图片尺寸大小。

if abs(angle_1)>=0.1pic_1=imrotate(~A,-(angle_1),'bilinear','crop');
elsepic_1=~A;
end

9.最后,将处理好的图片存储到准备好的文件夹中。

本方法利用的就是页眉横线,没有页眉横线的文档该处理方法不适用。而且本文所述方法仅适用于纯黑白的pdf文档。这里有一点要注意就是matlab的imread函数读进去的图像是uint8精度的,所以说如果你的图像是uint16的就要提前转换一下,转成uint8,转换的方法详见下面的连接。

https://mp.csdn.net/mp_blog/creation/editor/126846683

基于MATLAB图像处理的pdf矫正相关推荐

  1. 基于MATLAB图像处理的硬币个数识别系统

    基于MATLAB图像处理的硬币个数识别系统 1.课题介绍 本设计为基于MATLAB的硬币图像识别统计装置,通过数码相机获取平铺无重叠堆积的硬币的图像,并通过Matlab工具处理后统计硬币的数目.通过控 ...

  2. matlab中提取裂缝图像,基于Matlab图像处理的水泥路面裂缝检测研究

    路面裂缝检测是计算公路状况指数的重要依据[1],传统的检测方法主要是靠人工检测,测量精度差.检测效率低.同时检测人员会有安全隐患[2-3].现在多采自动检测的方法对路面裂缝的损害进行检测,其中使用数字 ...

  3. 基于MATLAB图像处理交通信号灯识别

    基于MATLAB图像处理交通信号灯识别 摘 要:交通信号灯是智能车辆在城市环境中行驶的主要指示信号,在城市交通安全中发挥了不可或缺的作用.交通信号灯通常设在交叉口,能够供应智能车辆的方位信息,查看和辨 ...

  4. 基于MATLAB图像处理的恶劣天气自动车牌识别

    基于MATLAB图像处理的恶劣天气自动车牌识别系统设计 摘要 针对恶劣天气环境下传统的自动车牌识别系统存在运行时间长.输出车牌信息不准等问题,本文提出了借助MATLAB的图像处理功能从图像去雾.车牌定 ...

  5. matlab与卡尔曼滤波pdf,Kalman滤波器理论与应用:基于MATLAB实现 完整pdf高清版[3MB]...

    <Kalman滤波器理论与应用:基于MATLAB实现>以Kalman滤波器为主要介绍对象,包含基本原理.推导方法及其在跟踪系统中的应用,同时配套MATLAB源程序.具体内容包括Kalman ...

  6. 基于MATLAB图像处理

    设计题目 图片叠加. 设计要求 将一幅礼花图片和一幅夜景图片做叠加运算,使达到烟花夜景的美图效果. 设计方案 3.1.设计思路 利用matlab强大的图像处理功能,通过编写程序,实现对两幅图片的像素进 ...

  7. matlab计算表面粗糙度,基于MATLAB图像处理的铸造表面粗糙度测量方法

    铸造表面粗糙度严重影响铸件的外观质量和使用性能,表面粗糙度还影响机械设备配合性质的稳定性和动力的消耗,而且表面越粗糙,越容易产生噪声.振动等[1-2].所以,控制和提高铸件表面粗糙度,不仅能够有效提高 ...

  8. 基于matlab的几何失真矫正,使用imatest软件帮助校正畸变

    Imatest的测试卡和软件可以帮助用户测量和分析成像系统的特性和参数.很多时候,这些测试结果被用来作为图像质量的度量,或者预测你拍摄图像质量的极限水平. 有一些Imatest给出的测试结果,是可以用 ...

  9. matlab 车辆 pdf,关于MATLAB图像处理车辆检测与识别.PDF

    第24卷增刊 数 据 采 集 与 处 理 V01.24No.S ofData 8L oct.2009 2009年10月 Journal AcquisitionProcessing 文章编号:1004- ...

最新文章

  1. CSS学习01之我的第一css程序
  2. php星座判断源码,php根据日期判断星座的函数分享
  3. 优化DOTTEXT之三:完善Trackback
  4. (Eclipse打包问题)Export aborted because fatal lint er
  5. OpenCV的dnn模块调用TesorFlow训练的MoblieNet模型
  6. 固定资产分类与代码_促进产业技术升级换代!固定资产加速折旧优惠政策了解一下...
  7. ubuntu上安装CLucene
  8. 2021 年高教社杯全国大学生数学建模竞赛题目
  9. 深度学习相关的硬件配置
  10. 自己编写代码去听网易云音乐的歌曲,以及观看MV,还可以下载奥
  11. mysql 服务没有报告任何错误_mysql无法启动服务没有报告任何错误
  12. IPTV的前世今生与发展
  13. 随机抽奖转盘微信小程序项目源码
  14. 《从1到N企业数字化生存指南》读书笔记
  15. Golang单元测试快速上手(三) 高级技巧
  16. 谷歌浏览器提示密码泄露弹窗关闭
  17. 英语语法——特殊结构
  18. 【Unity3D】利用物体碰撞检测、键盘输入处理完成平衡球游戏
  19. java必备十大技术网站
  20. 国家公务员录用考试的一般流程

热门文章

  1. 大学物理复习——量子力学基础
  2. CSS雪碧:要还是不要?
  3. Java调用PDFBox打印自定义纸张PDF
  4. 百问网七天物联网智能家居第2篇
  5. 我们普通女孩自己的专属婚纱照
  6. Unity3D AVProVideo开始播放跟播放完成
  7. 移动端网页在本地模拟线上测试的方法
  8. 技术理论-【socket】- 计算机网络
  9. PYTORCH学习(3):多维tensors求余弦相似度和欧氏距离
  10. requests模块已经安装,vs code下无法导入requests模块