本程序是基于 MATLAB 的 GUI 界面的类 Office Lens 应用,还有很多待提高

其中主要功能有

  • GUI 界面,方便快捷的操作
  • 文件选择功能
  • 透视变换
  • 图像手动剪切
  • 图像降噪
  • 调节对比度
  • 图像二值化
  • 无限撤销功能
  • 保存图像

详细说明

  • GUI 界面
    这次是简单的尝试了下 matlab 自带的 VB 似的 GUI 界面,异常的好用,连监听啊什么的都不用自己写。
  • 文件选择功能
    利用 uioutfile 函数,调用 Windows 熟悉的文件选择

  • 透视变换
    透视变换时本程序效率最低,大概需要跑 2min 的功能,利用 MIT 的算法,从左到右从上到下选择要进行透视变换的四个点,这四个点之间的图像将被处理变换为矩形,其原理是将这四个点的坐标,转换为矩形定点,联立求解四元四次方程组,得到透视变换矩阵,将透视变换矩阵作用到四个点中间的其他坐标进行变换。
    效率最低的地方应该就是解方程的步骤。

  • 图像手动剪切
    利用 imcrop 函数,本想在透视变换后直接利用顶点坐标进行裁剪,但其实透视变换后,处理后的图像会对变换后没有像素的地方进行黑色填补,导致顶点坐标发生变化。

  • 图像降噪
    对图像进行进行高斯滤波。

  • 调节对比度

  • 图像二值化
    利用 im2bw 进行二值化,本想是在二值化后进行 OCR 功能,但微软的 API 接口变了,百度的接口变成收费的了,而且还需要考虑利用 MATLAB 调用 Python,所以没有实现。

  • 无限撤销功能
    在每一步进行图像处理时,将图像 push 进一个数组,撤销时 pop 出数组并移动指针。不过发现想增加前进功能时,需要考虑很多操作逻辑,必须撤销三步之后又操作了一步,这个时候又前进,等等等等,所以取消了前进功能。

  • 保存图像
    将处理后的图像保存到本地。

感想

最可惜的是没有实现 ocr 功能,和自动进行边缘检测之后进行透视变换,再自动剪裁。
OCR 需要的是接口,自动边缘检测的难度在于图像二值化的效果必须很理想,然后选择合适的算子。
令人开心的是,已经基本完成大部分功能,自动化是进行优化。
不过以下有一些疑问:

  • 如何将 .m 文件编译成不需要 MATLAB 的可执行文件
  • 如何对透视变换进行优化