这是前年年底我做过的一个项目,项目中我用到了大津法来处理omr识别的自动阈值问题,经过测试,该算法可以对不规范的涂写答题卡进行高效识别(比如以打对勾进行涂写的),而且是仅仅是几十行代码就实现了这样的功能。

看如果对如下这样的调查问卷进行识别:

在用大津法之前会有很多图像预处理及复杂的识别过程,这里略去,感兴趣的读者可以参看相关的文章。

我们这里假设成功的完成以上的步骤,成功的分割了卡片,分离出若干的基于二值或者灰度的答题框(这里,为表达方便,对答题框简写为CM,下文将均采用CM来代表分离出的答题框位图),如下:

涂了的CM,黑像素的比率自然就大些,我们下面要做的就是要在这些若干个CM中选出涂改了的CM。这里先简单介绍一下大津法。

大津法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫最大类间方差法,简称OTSU。它是用来对图像阈值化的。我们说大津法实际上是对集合的一个二分类,大津法是作用于某覆范空间M,如果M有进行二分类的需求。可以用大津法进行集合的两分类。

再回到omr识别上来,像素比率是实数域上的覆范空间,定义范数为其绝对值,而且我们这里的识别是否涂写就是二分类(涂写了和没有涂写),所以说完全的符合大津法的要求。

我们简述一下大津法的过程:

对于图像I(x,y),涂改的和未涂改的黑像素比率的分割阈值记作,属于已经涂写的CM个数占CM的总数比例记为,其平均黑像素比率;未涂写的CM个数占CM的总数的比例为,其平均黑像素比率为。图像的总平均黑像素比率记为,类间方差记为

图像的大小为,图像中黑像素比率大于阈值的CM个数记作,黑像素比率小于阈值的CM个数记作,则有:

将式(1.5)代入式(1.6),得到等价公式:

采用遍历的方法得到使类间方差最大的阈值,即为所求。

我们对答题卡涂写一般是用2B铅笔全涂(要尽可能的适用于不规范的情况),对调查问卷则可能打对勾等,我们要适用于各种情况,所以绝不能用固定阈值来处理。大津法恰恰能动态的对目标和背景进行区分,最大限度的保证它的稳定性。

参考资料:

[1] 大津法原理

用大津法进行omr识别相关推荐

  1. Google Earth Engine(GEE) ——使用大津法(OTSU)sentinel-1影像进行长时序水域面积计算和动态图加载

    本文使用大津法进行阈值分析,获取水域面积,并加载研究区动态图. 函数: Map.getBounds(asGeoJSON) Returns the bounds of the current map v ...

  2. C++ OpenCV使用大津法求自适应阈值

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为1245字,预计阅读3分钟 前言 上篇<C++ OpenCV自适应阈值Canny边缘检测>中,使用的求中值的方式来获 ...

  3. 动态阈值--大津法理解

    原文在这儿:点击打开链接 简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图 ...

  4. java大津法确定阈值,大津法得到自适应阈值

    大津法是一种能得到自适应阈值的方法,参考下面的博客 matlab代码修改完善后如下 function [ grayThresh ] = myotsu( GrayIm ) % 使用大津法求动态灰度阈值 ...

  5. 图像阈值分割:大津法(Otsu)

    大津法(OTSU法)是由大津于1979 年提出的,对图像I,记T为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0:背景点数占图像比例为w1,平均灰度为u1.从最小灰度值到最大灰度值遍历 ...

  6. 大津法(Python实现)

    在计算机视觉和图像处理中,大津法被用于自动获取图像的阈值,或者将灰度图像转换为二值化图像.该算法假设图像包含两个类别的像素(前景像素和背景像素),然后它计算一个最优的阈值用于分离前景和背景,使得前景和 ...

  7. otsu阈值分割算法原理_大津法---OTSU算法

    简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...

  8. 【opencv-python】大津法(Otsu)阈值分割原理深入分析

    大津法(Otsu)是图像处理领域里面较为重要的阈值分割方法,适用于处理双峰图像.但大多数开发人员并不熟悉其原理,因此有必要对其进行详细说明与分析. opnecv的实例代码链接为: opencv-pyt ...

  9. opencv学习日志12-大津法二值化

    前言 这篇文章中主要讲述opencv中如何使用大津法对图像进行二值化操作. 一.大津法二值化 //第三题 大津法二值化 #include <opencv2/opencv.hpp> #inc ...

最新文章

  1. Unity Game窗口中还原Scene窗口摄像机操作 强化版
  2. CSS设置段落的垂直对齐
  3. 【云计算的1024种玩法】云端打造家庭文件备份中心
  4. XGBoost-工程实现与优缺点(中)
  5. Linux基本的网络配置
  6. 不错的网络协议栈測试工具 — Packetdrill
  7. 表妹即将去读研,我送了她11个建议
  8. python 中gcd用法_Python中while语句的基本用法不了解一下嘛?
  9. python编程符号大全-python符号表
  10. 三种最常用的日志分析软件
  11. Pycharm下载及安装保姆级教学(Mac)
  12. uni-app ios 添加测试新设备,只需下载描述文件
  13. 怎么在笔记本电脑上弄html,笔记本电脑怎么设置wifi,小编教你笔记本电脑如何设置WIFI热点...
  14. 【Debug】安装labelme过程中出现的问题
  15. iOS-Building for iOS Simulator, but the linked and embedded framework ‘XX.framework‘ was built for
  16. 机器学习必知的八大神经网络架构
  17. 政策红利:广州政府发布政务区块链工作方案|链塔智库
  18. 基于openssl的EVP对称加密C语言实战案例
  19. 伪造工作经历,请止步!!!
  20. Caffe编译踩坑(一):/usr/include/boost/system/error_code.hpp:233:21: error: looser throw specifier

热门文章

  1. Fedora31升级Fedora32命令行模式操作过程
  2. 选型宝访谈:如何借助API生态平台,一站式快速搞定APP开发?
  3. UGNX Imachining VoluMill动态与高速铣视频教程
  4. matlab圆心提取【你想要的方法这里都有】
  5. 安卓怎么禁止指定两个应用分屏功能,但是和别的应用可以分屏
  6. Linux网络相关命令
  7. 缓存算法(FIFO 、LRU、LFU三种算法的区别)
  8. CQ40 开机 caps lock scroll灯闪 一直闪 黑屏啊·进不了windows界面
  9. ubuntu系统关机、重启等命令
  10. 获取手机IMEI(包括各种平台的双卡双待手机)