• atitit.验证码识别step4图形二值化 灰度化


    atitit.验证码识别step4--------图形二值化 灰度化

    1. 常见二值化的方法原理总结 1

    1.1. 方法一:该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于127的将像素值设为0(黑色),值大于等于127的像素值设为255(白色)1

    1.2. 方法二:最常见的二值处理方法是计算像素的平均值K2

    1.3. 方法三:使用直方图方法来寻找二值化阈值, 2

    1.4. 方法四:使用近似一维Means方法寻找二值化阈值,(推荐) 3

    2. 使用类库imageio 3

    3. 参考 4

    1. 常见二值化的方法原理总结

    要本文讨论的方法仅针对RGB色彩空间。

     

    1.1. 方法一:该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于127的将像素值设为0(黑色),值大于等于127的像素值设为255(白色)

    该方法的好处是计算

    量少速度快。缺点更多首先阈值为127没有任何理由可以解释,其次完全不考虑图像的

    像素分布情况与像素值特征。可以说该方法是史最弱智的二值处理方法一点也不为过。

     作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

    转载请注明来源: http://blog.csdn.net/attilax

     

    1.2. 方法二:最常见的二值处理方法是计算像素的平均值K

    描图像的每个像素值如像素值大于K

    像素值设为255(白色),值小于等于K像素值设为0(黑色)。该方法相比方法一,阈值的

    选取稍微有点智商,可以解释。但是使用平均值作为二值化阈值同样有个致命的缺点,

    可能导致部分对象像素或者背景像素丢失。二值化结果不能真实反映源图像信息。

     

    1.3. 方法三:使用直方图方法来寻找二值化阈值,

    直方图是图像的重要特质,直方图方法选择二值

    化阈值主要是发现图像的两个最高的峰,然后在阈值取值在两个峰之间的峰谷最低处。

    该方法相对前面两种方法而言稍微精准一点点。结果也更让人可以接受。

     

    1.4. 方法四:使用近似一维Means方法寻找二值化阈值,(推荐)

    http://en.wikipedia.org/wiki/Thresholding_(image_processing)

    使用近似一维Means方法寻找二值化阈值,该方法的大致步骤如下:

    1.      一个初始化阈值T,可以自己设置或者根据随机方法生成。

    2.      根据阈值图每个像素数据P(n,m)分为对象像素数据G1与背景像素数据G2(n

    行,m为列)

    3.      G1的平均值是m1, G2的平均值是m2

    4.      一个新的阈值T’ = (m1 + m2)/2

    5.      回到第二步,用新的阈值继续分像素数据为对象与北京像素数据,继续24步,

    直到计算出来的新阈值等于上一次阈值。

    前面三种在以前的博文中都有涉及,最后一种二值化方法的代码如下:

    2. 使用类库imageio

    prjatibrow

    ImageDemo demo = new ImageDemo();

     

    demo.binaryImage(deboxJpg,bin_jpg);

     

    public void binaryImage(String pathname,String pathname2throws IOException {

    //String pathname = System.getProperty("user.dir")

    //+ "/src/2722425974762424026.jpg";

    File file = new File(pathname);

    BufferedImage image = ImageIO.read(file);

    int width = image.getWidth();

    int height = image.getHeight();

    BufferedImage grayImage = new BufferedImage(widthheight,

    BufferedImage.TYPE_BYTE_BINARY);// 重点,技巧在这个参数BufferedImage.TYPE_BYTE_BINARY

    for (int i = 0; i < widthi++) {

    for (int j = 0; j < heightj++) {

    int rgb = image.getRGB(ij);

    grayImage.setRGB(ijrgb);

    }

    }

    File newFile = new File(pathname2);

    ImageIO.write(grayImage"jpg"newFile);

    }

    3. 参考

    图像处理之常见二值化方法汇总 流浪的鱼 博客频道 - CSDN.NET.htm

    JAVA灰度化、二值化图片如此简单方便 懒人小何 博客频道 - CSDN_NET.htm

  • 相关阅读:
    AtomicInteger原理分析
    packageinfo.java介绍
    SpringBoot 日志、配置文件、接口数据脱敏
    Gulp自动化构建分析
    RPC本质思考
    ES6 之 let 与 const
    Java属性转换工具分析
    AMQP协议模型及相关组件介绍
    Spring Bean生命周期分析
    PHP 脚本后台执行
  • 原文地址:https://www.cnblogs.com/attilax/p/15198932.html
Copyright © 2020-2023  润新知