【手写填空题答案评分】2.PIL图像预处理:阈值调参

所需模块

numpy 1.18.1
PIL.Image 7.1.2
matplotlib 3.1.3

调参目标

上一节的binarization_adjusted函数有两个threshold参数,需要选定一组最合适的参数来保证第一步修边效果与第二步二值化效果。

整体感知

threshold1

该参数主要控制修边阈值,但在调参时发现其对第一步输出效果也有一定影响,当数值过于大时(大于等于130),第一步输出的图像中会夹杂很多黑点。
在这里插入图片描述
在这里插入图片描述
但如果数值较小(小于等于60),则会出现笔画缺失的情况。
原图
在这里插入图片描述
threshold1=60时第一次输出
在这里插入图片描述
第二次输出
在这里插入图片描述
可以看到“10”指数上的“7”被吞成了“1”,这对识别是非常不利的。

同时当threshold1增大时可以看到第一步输出的图笔画部分是逐渐突出显示的(黑色越来越深),这对第二步二值化也是有利的。
在这里插入图片描述
因此第一个参数较大时效果较好。

threshold2

第二个参数是二值化时的阈值,若像素点的值高于这个阈值则该点取值为255(白色),低于这个值则取值为0(黑色)。
当该值较大时(大于120)显示的黑像素点越多,容易使原图出现黑点。
在这里插入图片描述
在这里插入图片描述
如果该值太小(小于等于80)则空缺笔画出现较多。
在这里插入图片描述
综上,可以对两个阈值参数确定大致的范围。再对范围内的阈值进行组合来分别比较预处理效果。

调参准备

选定两个阈值的范围为
threshold1:85-120
threshold2:95-120
通过numpy数组中的arange与meshgrid来生成两个阈值的组合。

th1=np.arange(85,125,5)
th2=np.arange(95,125,5)
trials=[i for i in zip(np.meshgrid(th1,th2)[0].flatten(),np.meshgrid(th1,th2)[1].flatten())]

meshgrid在这里的作用就是搭配两个数组,生成所有搭配方式。下面将组合效果进行绘制,可以更加直观地观察搭配结果。

运行

plt.scatter(np.meshgrid(th1,th2)[0],np.meshgrid(th1,th2)[1])

结果
在这里插入图片描述

接下来分别查看各个图片输出情况

for group in trials:
    t1,t2=group
    print('*'*10)
    print(t1,t2)
    for each in path1:
        path=path0+each
        get_image(path,4096,t1,t2)

图片很多,输出比较慢。

调参结果

总体来说,当参数一比较小的时候,背景较亮的图容易缺失笔画,参数一较大时效果较好,但当两个参数都较大时,笔画较粗的线或者比较模糊的照片容易出现连片现象(笔画聚成一片黑),如下图。
在这里插入图片描述
同时,对于笔画较细的或者细节不明显的图像来说效果较差(参数较小时容易缺失,较大时容易连片)。

缺失
在这里插入图片描述
连片
在这里插入图片描述
对于背景较暗的图,需要单独设置参数,因为上面选取的范围下,暗图识别效果都很差。

原图
在这里插入图片描述
输出1
在这里插入图片描述
输出2
在这里插入图片描述

最终,下面几种组合是效果较好的组合

(110,115) (115,115)(120,115) (115,120) (120,120)(100,120) (105,120) (110,120)
亮图有略微空缺,总体较好粗笔画有点连片,总体较好总体较好
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值