标签:
atitit.验证码识别step4--------图形二值化 灰度化
1.1. 方法一:该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于127的将像素值设为0(黑色),值大于等于127的像素值设为255(白色)。 1
1.2. 方法二:最常见的二值处理方法是计算像素的平均值K, 2
1.4. 方法四:使用近似一维Means方法寻找二值化阈值,(推荐) 3
要本文讨论的方法仅针对RGB色彩空间。
该方法的好处是计算
量少速度快。缺点更多首先阈值为127没有任何理由可以解释,其次完全不考虑图像的
像素分布情况与像素值特征。可以说该方法是史最弱智的二值处理方法一点也不为过。
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
描图像的每个像素值如像素值大于K
像素值设为255(白色),值小于等于K像素值设为0(黑色)。该方法相比方法一,阈值的
选取稍微有点智商,可以解释。但是使用平均值作为二值化阈值同样有个致命的缺点,
可能导致部分对象像素或者背景像素丢失。二值化结果不能真实反映源图像信息。
直方图是图像的重要特质,直方图方法选择二值
化阈值主要是发现图像的两个最高的峰,然后在阈值取值在两个峰之间的峰谷最低处。
该方法相对前面两种方法而言稍微精准一点点。结果也更让人可以接受。
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. 回到第二步,用新的阈值继续分像素数据为对象与北京像素数据,继续2~4步,
直到计算出来的新阈值等于上一次阈值。
前面三种在以前的博文中都有涉及,最后一种二值化方法的代码如下:
prj。atibrow
ImageDemo demo = new ImageDemo();
demo.binaryImage(deboxJpg,bin_jpg);
public void binaryImage(String pathname,String pathname2) throws 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(width, height,
BufferedImage.TYPE_BYTE_BINARY);// 重点,技巧在这个参数BufferedImage.TYPE_BYTE_BINARY
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int rgb = image.getRGB(i, j);
grayImage.setRGB(i, j, rgb);
}
}
File newFile = new File(pathname2);
ImageIO.write(grayImage, "jpg", newFile);
}
图像处理之常见二值化方法汇总 - 流浪的鱼 - 博客频道 - CSDN.NET.htm
JAVA灰度化、二值化图片如此简单方便 - 懒人小何 - 博客频道 - CSDN_NET.htm
atitit.验证码识别step4--------图形二值化 灰度化
标签:
原文地址:http://blog.csdn.net/attilax/article/details/45074091