前言
最近在开发一个ocr相关的产品,调研了百度AI,tesseract等接口,最后选择了开源的tesseract。但是识别的准确度不是很高,所以准备通过对图像的一些预处理来提高ocr的识别精度。
这是我看了伍斯特大学理工学院数字图像处理这门课程的讲义过程中的一些简单记录,英语水平不是很好,有误读或者不正确的地方欢迎大家批评指正。
出自:https://web.cs.wpi.edu/~emmanuel/courses/cs545/S14/
课程目录
● Lecture 1 [ Introduction to Image Processing and ImageJ ]
● Lecture 2 [ Histograms & Point Operations (Part 1) ]
● Lecture 3 [ Point Operations (Part 2) & Filters (Part 1) (Neighborhood and Spatial Processing)]
● Lecture 4 [ Filters (Part 2) & Edges and Contours ]
● Lecture 5 [ Edge Detection (Part 2) & Corner Detection ]
● Midterm review [ Midterm review slides ]
● Lecture 6 [ Curve Detection & Morphological Filters (part 1)]
● Lecture 7 [ Morphological Filters (part 2) & Regions in Binary Images (Part 1)]
● Lecture 8 [ Regions in Binary Images (Part 2) & Color Images (Part 1)]
● Lecture 9 [ Color Images (Part 2) & Introduction to Spectral Techniques]
● Lecture 10 [ Discrete Fourier Transform ]
● Lecture 11 [ Geometric Operations, Comparing Images and Future Directions ]
L01 介绍图片处理和ImageJ
- 数字图像处理的几个关键阶段
a. 图片获取 b. 图片增强 c. 图片恢复 d. 形态处理 e. 分割 f. 表示&描述 g. 物体识别 h. 图片压缩 i. 处理图片色彩
- 图片获取,人眼感知,采集量化,建立函数模型
- 空间分辨率:最小的可辨别图像细节,dots per inch
- 强度等级分辨率:强度等级的数量,用于表示图像 a. 使用的强度级别越高,细节级别越精细在图像中可辨别 b. 强度等级分辨率通常以数字表示用于存储每个强度等级的比特
- 饱和度:最高强度值,高于该值可以消除颜色
- noise:粒状纹理图案
- 解析度:取决于图像中的内容(细节)和你想怎么用它(应用)
- java开源软件ImageJ,图片倒置插件开发
L02 直方图&点操作1
- 直方图绘制出现在图像中的每个强度值的次数(频率) a. 不同的图片可以有相同的直方图,所以不可通过它来重组图片 b. h(i) = card{ (u,v) | I (u,v) = i} 0<=i<= 255
- 直方图可以检查的问题 a. 过度曝光和曝光不足 b. 亮度 c. 对比度 d. 动态范围
- 亮度:图像中所有像素的强度之和的平均值
- 对比度:识别图片中物体的容易程度,高对比度图片拥有很多不同的强度值
- 动态范围:图像中不同像素的数量
- 使用直方图检查图片缺陷:图片压缩
- 如果图片分辨率较高,直方图列数较多可以采用分档的方法
- 操作图片每个像素点(加,乘,各种数学函数)来改变图片亮度、对比度、饱和度、倒置图片等等
a. 图片倒置:更详细清楚的看到图片中暗色部分
b. 设置图片灰度阈值:a0—a1
c. 对数变换
d. 指数变化
- 均衡图像(扩展图像中的频率)可以改善较暗的图片
L03 点操作2&过滤1
- 直方图线性均衡
- 分段调整线性分布
- 图片中可以对每个像素点进行的操作
- 图像增强:
- 突出图趣的细节
- 消除图像噪声
- 使图像更具视觉吸引力.
a. 图像增强的两个重要技术- i. 空间域技术:直接操作图片像素点
- ii. 频率域技术:对图片进行傅立叶变换和小波变换操作v
- 空间过滤:
a. 模糊,生成平滑图像:用临近像素点的平均值代替这个像素点
b. 图片像素33,55,等矩阵
c. 定义含有权重的过滤矩阵 (提取系数,让矩阵元素为整数)
d. 计算出来的像素值可能超出范围,设置偏移量或者上下限保证像素可见性
e. 两种典型的线型过滤- i. 平滑过滤:盒子,拉普拉斯
- ii. 差异过滤:高斯
- 过滤可以被描述为一个线型的卷积过程
- 卷积的性质.
a. 交换性.
b. 线型.
c. 关联性.
d. 可分离.
L04 过滤2&边缘和轮廓
- 图片噪声.
a. 产生原因:焦点模糊或者由于相机抖动造成的模糊
b. 去除噪声成为图像恢复.
c. 图像恢复也可以在空间域或者频率域完成
d. 噪声类型:不同类型的噪音有不同适合自己的最好的过滤器
i. 随机黑白像素点:脉冲噪音,点噪音,二进制噪音。由突然的剧烈干扰引起的 ii. 高斯噪声:图像添加了正太分布的白色噪声 iii. 斑点噪声:像素点乘以随机噪声 iv. 周期噪声:由周期性干扰引起的 v. 前三个使用空间域过滤去除噪声,周期噪声使用频率域过滤来去除 - 非线性过滤:线型过滤模糊了图片点、边、线,降低图片质量。因此线型滤波不会用于消除噪声
a. 最简单的非线性过滤:最大值滤波和最小值滤波
b. 中位数滤波:可以更好 去除噪声并且保持图片结构
c. 异常过滤法 i. 选择阈值D. ii. 对于给定像素,将其值p与8个相邻像素的平均值进行比较 iii. 如果| p - m | > D,将像素分类为噪声,否则不是 iv. 如果像素是噪声,用m替换它的值; 否则保持其值不变
- 沿边界扩展图像.
a. 通过边框附近的像素点扩展边界.
b. 沿着坐标轴周期重复像素. - 边界探测.
a. 特点:
i. 亮度急剧变化.
ii. 理想的边界是某个方向的阶梯函数(step function).
iii. 实际的边界是一个稍微模糊的阶梯函数.
iv. 边界可以使用一阶导数极值表示.
b. 导数过滤c. 探测方法.
i. Prewitt and Sobel Edge Operators.
ii. Roberts Edge Operators.
iii. Compass Operators.
L05 边界探测2&拐角探测
1、不同比例的边界探测
- 分层或金字塔技术:
- 对于每个图像位置(u,v),应用多个比例的边缘检测滤波器
- 使用检测到的最主要边缘/比例(如果有)
- canny边界探测
2、边缘映射
- 最常见的方法:通过将阈值(固定或自适应)应用于由边缘算子计算的边缘强度来生成边缘图
3、 图像锐化
- 使用Laplace滤波器
- 锐化操作
- 效果
- 锐化操作
- usm-Unsharp masking
- 和laplace相比优点:由于平滑而降低了噪音灵敏度;通过参数σ和a改进控制
- 效果
4、拐角探测
- Harris探测 :理念
- 平坦区域:各个方向没有强度变化
- 边界:沿着边界方向没有变化
- 拐角:在许多方向有很大的强度变化
- Harris探测 :数学运算
- Harris探测 :特征值分类
- Harris探测 :探测示例
- Harris探测 :算法
- step1 计算harris拐角响应函数
预过滤:图像平滑 梯度过滤:计算图像在水平和垂直方向导函数 模糊过滤:计算每个成分的结构矩阵,使用可分离高斯过滤器 计算拐角响应函数
- step2 选择合适的拐点
比较各个点之间的平方距离,排除不在圆半径内的点
L06 简单曲线探测
1、霍夫变换
霍夫变换:找到可以在点分布范围内参数化定义的任何形状