几种经典的二值化方法及其vb.net实现

作者&投稿:柘储 (若有异议请与网页底部的电邮联系)
几种二值化方法c++实现~

扫描线划图图像二值化方法可以分为全局方法和局部方法:
全局方法根据线划图像的灰度直方图和灰度空间分布确定一个阈值,由此实现灰度图像N--值图像的转变,比较有代表性的全局算法包括平均灰度法,Otsu方法,迭代最优算法等。
局部方法是通过检查每个像素点的邻域来确定局部阈值,它比全局阈值有着更广泛的应用,典型的局部阈值方法有Niblack方法,Bemsen方法,平均梯度法等。

全局阈值法期望灰度值法:设图像的尺寸为M*N,其灰度取值为厶,厶,厶…..k,用随机变量X来表示每个像素点的灰度值。可以用概率分布来描述图像的灰度分布情况,分别设各灰度级出现的概率为式2.1:^,A=p(厶)(2.1),仍=p(厶),...,PN=p(“)且有∑见=1灰度图像的一个重要的统计量就是灰度期望值,使用它为阈值可以使黑色像素和白色像素的灰度值均等,公式(2.2)即为灰度期望值的计算式:鳓删=∑厶见n-tⅣ(2.2)该算法对于简单图像的效果好,而且计算复杂度较低,缺点是对于亮度不均匀的线划图像效果较差。
Otsu方法:这种方法又被称为最大类间方差方法,是一种自适应的阈值确定方法。它根据灰度特性,将图像分为目标和背景两个部分,目标和背景的方差越大,说明这两个部分的差别越大,因此类间最大方差的分割意味着错分概率最小。对于灰度图像I(x,y),目标和背景的分割阈值为T,属于目标的像素点数占整个图像像素点的比例是‰,其平均灰度值为Po;背景像素点数占整个图像像素点的比例为q,其平均灰度值为“,图像总平均灰度值记为卢,类间方差为g。假设图像M*N的背景比较暗,图像中像素灰度值小于阈值T的像素个数记为%,7第二章细化之前的预处理分析像素灰度值大于阈值T的像素个数记为Ⅳl,所以有式2.3到式2.8成立:嘞=j丽No(2.3)q:熹戗=———L—MxN’(2.4)。IZ.4l、Ⅳo+M=MxN‰+q=1‖=‰肛o+qH(2.5)(2.6)(2.7)(2.8)g=‰(po—JLl)2+q(“一‖)对于灰度图像来说,分别以每个灰度为阈值计算对应的类间方差,其中使类间方差最大化的灰度值即为阈值。该算法对于较简单的线划图像有良好的效果而且有较快的运算速度,所以这种算法的应用非常广泛。
最优阈值法:又被称为逼近迭代算法,这种方法的原理是将直方图用两个或多个正态分布的概率密度函数来近似表示的方法,阈值取为对应两个或多个正态分布的最大值之间的最小概率处的灰度值,其结果是具有最小误差的分割。这里的误差包括两部分:将目标误认为背景而被剔除或将背景、噪声归为目标。最优阈值法的处理步骤:El:计算图像的最小灰度值k和最大灰度值Z二,令阈值初值为式2.9:To=(Zmi。+Z懈)/2(2.9)E2:根据阈值将图像分为目标和背景两部分,求出两部分的平均灰度值Zo和五,分别计算Z0和Zl的平均值,用公式2.10来表示:∑I(i,/)10,J琏TkZo=互=等‰∑I(i,/)T)01.2(1群砸,/)>‘、。一E3:计算新阈值,用式2.1l表示:T“1=(Zo+z1)/2(2.11)如果T‘=T“1或者达到设定的最大迭代次数就结束,否则转向步骤E2。该算法能较好区分图像的目标和背景,但是会导致图像细微信息的丢失。

局部阈值法Niblack方法:基于局部均值和局部标准差,基本公式:T(x,y)=m(x,y)+七’s化少).(2.12)长安大学硕士论文对于图像I(x,y),在(X,y)处的阈值r(x,Y)由局部均值m(x,Y)和局部标准差s(x,Y)决定,k表示调整系数,一般设为.0.2。在Niblack方法中,窗口大小的选择非常重要,既要小到能保持足够的局部细节又要大到能抑制噪声。Niblack方法能很好地保持图像细节,对于清晰的线划图像能够提供很好的二值化结果,但是在一些模糊的线划图像中会保留一些不必要的细节。在最初的Niblack方法中,k值是固定的,但是对于不同的图像,通常需要根据图像的灰度分布情况自动调整k的值才能取得较好的结果,因此后来提出很多改进的算法,其中一个改进的Niblack方法的基本公式为式2.13-T(x,J,):m(x,y)【l+k(1一掣掣)】瓜(2.13)k和R都是经验常量,改进的Niblack方法使用k和R来减少对噪声的敏感度。

/*************************************************************************
* 该函数用于对图像进行阈值分割运算
* 参数:
* LPSTR lpDIBBits - 指向源DIB图像指针
* LONG lWidth - 源图像宽度(象素数)
* LONG lHeight - 源图像高度(象素数)
************************************************************************/

BOOL ImageChangeProc::ThresholdDIB(LPSTR lpDIBBits,LONG lWidth, LONG lHeight)
{

// 指向源图像的指针
LPSTR lpSrc;

// 指向缓存图像的指针
LPSTR lpDst;

// 指向缓存DIB图像的指针
LPSTR lpNewDIBBits;
HLOCAL hNewDIBBits;

//循环变量
long i;
long j;

unsigned char pixel;
long lHistogram[256];

//阈值,最大灰度值与最小灰度值,两个区域的平均灰度值
unsigned char Threshold,NewThreshold,MaxGrayValue,MinGrayValue,Temp1GrayValue,Temp2GrayValue;

//用于计算区域灰度平均值的中间变量
long lP1,lP2,lS1,lS2;

//迭代次数
int IterationTimes;

LONG lLineBytes;
hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);

if (hNewDIBBits == NULL)
{
// 分配内存失败
return FALSE;
}

// 锁定内存
lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

// 初始化新分配的内存
lpDst = (char *)lpNewDIBBits;
memset(lpDst, (BYTE)255, lWidth * lHeight);

lLineBytes = WIDTHBYTES(lWidth * 8);

for (i = 0; i < 256;i++)
{
lHistogram[i]=0;
}

//获得直方图
MaxGrayValue = 0;
MinGrayValue = 255;
for (i = 0;i < lWidth ;i++)
{
for(j = 0;j < lHeight ;j++)
{
lpSrc = (char *)lpDIBBits + lLineBytes * j + i;

pixel = (unsigned char)*lpSrc;

lHistogram[pixel]++;
//修改最大,最小灰度值
if(MinGrayValue > pixel)
{
MinGrayValue = pixel;
}
if(MaxGrayValue < pixel)
{
MaxGrayValue = pixel;
}
}
}

//迭代求最佳阈值
NewThreshold = (MinGrayValue + MaxGrayValue)/2;
Threshold = 0;

for(IterationTimes = 0; Threshold != NewThreshold && IterationTimes < 1000;IterationTimes ++)
{
Threshold = NewThreshold;
lP1 =0;
lP2 =0;
lS1 = 0;
lS2 = 0;
//求两个区域的灰度平均值
for (i = MinGrayValue;i <=Threshold;i++)
{
lP1 += lHistogram[i]*i;
lS1 += lHistogram[i];
}

for (i = Threshold+1;i<MaxGrayValue;i++)
{
lP2 += lHistogram[i]*i;
lS2 += lHistogram[i];
}
if(lS1==0||lS2==0)
{
// 释放内存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
return FALSE;
}
Temp1GrayValue = (unsigned char)(lP1 / lS1);
Temp2GrayValue = (unsigned char)(lP2 / lS2);
NewThreshold = (Temp1GrayValue + Temp2GrayValue)/2;
}

//根据阈值将图像二值化
for (i = 0;i < lWidth ;i++)
{
for(j = 0;j < lHeight ;j++)
{
lpSrc = (char *)lpDIBBits + lLineBytes * j + i;
lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;
pixel = (unsigned char)*lpSrc;

if(pixel <= Threshold)
{
*lpDst = (unsigned char)0;
}
else
{
*lpDst = (unsigned char)255;
}
}
}

// 复制图像
memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);

// 释放内存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);

// 返回
return TRUE;
}

参考:http://topic.csdn.net/t/20030909/13/2240079.html

  图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果。
  本文针对几种经典而常用的二值发放进行了简单的讨论并给出了其vb.net 实现。
  
  1、P-Tile法
  
  Doyle于1962年提出的P-Tile (即P分位数法)可以说是最古老的一种阈值选取方法。该方法根据先验概率来设定阈值,使得二值化后的目标或背景像素比例等于先验概率,该方法简单高效,但是对于先验概率难于估计的图像却无能为力。

  2、OTSU 算法(大津法)
  
  OSTU算法可以说是自适应计算单阈值(用来转换灰度图像为二值图像)的简单高效方法。1978 OTSU年提出的最大类间方差法以其计算简单、稳定有效,一直广为使用。

  
  3、迭代法(最佳阀值法)
  
  (1). 求出图象的最大灰度值和最小灰度值,分别记为Zl和Zk,令初始阈值为:
  
  (2). 根据阈值TK将图象分割为前景和背景,分别求出两者的平均灰度值Z0和ZB:
  
  

  式中,Z(i,j)是图像上(i,j)点的象素值,N(i,j)是(i,j)点的权值,一般取1。

  
  (3). 若TK=TK+1,则所得即为阈值,否则转2,迭代计算。

  4、一维最大熵阈值法
  它的思想是统计图像中每一个灰度级出现的概率 ,计算该灰度级的熵 ,假设以灰度级T分割图像,图像中低于T灰度级的像素点构成目标物体(O),高于灰度级T的像素点构成背景(B),那么各个灰度级在本区的分布概率为:

  O区: i=1,2……,t

  B区: i=t+1,t+2……L-1

  上式中的 ,这样对于数字图像中的目标和背景区域的熵分别为:
  
  对图像中的每一个灰度级分别求取W=H0 +HB,选取使W最大的灰度级作为分割图像的阈值,这就是一维最大熵阈值图像分割法。
  


那个大神能告诉我计算机识别颜色的过程,像如灰度处理,滤波,二值化...
一般情况下,减少噪声的方法可以在空间域或频率域进行处理。空间域可以用邻域平均、 空间低通滤波、 多图像平均、 中值滤波等方法来减少噪声。在频率域,由于噪声频谱通常在高频部分,因此可以采用各种形式的低通滤波器的方法减少噪声。图像的二值化处理就是将图像上的点的灰度置为0或255,也就是使整个图像...

预测要素变量的构置与选择
(2)靶区优选变量变换的数学方法 靶区优选变量确定以后,需要对各变量进行数学变换,软件中涉及到5种变量变换方法,分别是:标准化变换、正规化变换、均匀化变换、对数变换、线性变换等5种变换方法。2.定位预测变量二值化的数学方法 定位预测变量二值化的数学方法,一般常见的为相关频数法、找矿信息量法、...

Ps中阈值的含义及用法ps中阈值的含义及用法
阈值的确定方法有很多种,包括手动调整、自适应阈值和基于统计学方法的阈值等。在实际应用中,阈值可以用于图像分割、边缘检测、目标识别等方面。例如,在图像二值化处理中,可以将图像中的像素根据阈值的大小分为黑色和白色两部分,从而提取出目标物体的轮廓。因此,阈值在图像处理中具有非常重要的作用,它...

常见的离散化方法中
利用四分位、五分位、十分位等分位数进行离散。例如:四分位距,是一种衡量一组数据离散程度的统计量,用IQR表示。其值为第一四分位数和第三四分位数的差距。5.二值化离散法 数据跟阈值比较,大于阈值设置为某一固定值(例如1),小于设置为另一值(例如0),然后得到一个只拥有两个值域的二值化...

ps怎么提取出同一个颜色图片中的花纹
在提取花纹的过程中,需要使用一个叫做“二值化”的技术。具体地说,需要将给定的颜色图像进行二值化,得到一个黑白灰度图像,以便提取其中的花纹。以下是实现这个过程的步骤:1. 使用图像编辑工具如图层蒙版或色彩平衡工具,将图像转换为灰度图像。2. 使用图像编辑工具如图像增强工具或魔棒工具,选择整个...

OCR技术的基本原理是什么?
灰度化是将彩色图像转换成黑白图像,二值化是将灰度图像转换成黑白图像,噪声去除则是去除图像中的噪声,去畸变则是纠正图像中的畸变。二、特征提取特征提取是OCR技术中的关键步骤之一,其目的是从预处理后的图像中提取文字的特征。特征提取的方法有很多种,包括基于结构的方法、基于统计的方法和基于深度...

地质信息的遥感图像增强处理方法有哪些?
其原理是用一种变换函数作用于原始图像的直方图,使之变成具有某种特定亮度分布形态的直方图。这种方法着重于扩展高频数亮度值之间的间隔,使直方图中部所包含的地物反差得到增强,有利于地质体的区分。常用的直方图调整方法有直方图均衡化和直方图正态化等。 (2)比值增强 比值增强是通过不同波段的同名像元亮度值之间的除法...

图像二值化和图像边缘化的区别
一种是边缘检测时把值放小一点,尽量使边缘闭合另一种是先Open再Close,但是这种图估计很难调出来。

什么是灰度图
灰度图在图像处理中非常常见,因为它们可以简化图像处理算法,并且可以减少计算量和存储需求。例如,在图像二值化中,灰度图可以被转换为二值图像,其中每个像素只有黑色或白色两种可能的值。这种转换可以大大简化图像分析和处理任务,如边缘检测、图像分割等。此外,灰度图也常用于医学成像和遥感图像处理中。

形状匹配3种极性设置方法
主要步骤1.读取一幅图片,并且对其进行二值化。2.对其进行形态学处理,减少孔洞等次要特征,保留其主要特征。3.进行边缘提取。4.进行形状轮廓匹配,得到其匹配值,从而判断是否是同一个形状。下面是演示代码:#include <iostream>#include "opencv2\/opencv.hpp"using namespace std;using namespace cv;...

佳县19664771602: 图象二值化方法有几种啊?
赞湛克欣: 基本的有:非零元素取一法,固定阈值法,双固定阈值法

佳县19664771602: OCR软件提示不是二值图像
赞湛克欣: 二值图像 binary image 是指每个像素不是黑就是白,其灰度值没有中间过渡的图像.二值图像一般用来描述文字或者图形,其优点是占用空间少,缺点是,当表示人物,风景的图像时,二值图像只能描述其轮廓,不能描述细节.这时候要用更高...

佳县19664771602: matlab简单图像处理(二值化) -
赞湛克欣: % 读取图像 I=imred('XXX'); % 确定大小 [m,n]=size(I); % 上半部分阈值化 I(1:m/2,:)=0.25; % 下半部分阈值化 I(m/2:m,:)=0.33; 输出图像 imshow(I); 补充:因为你说的是上半部分,我也不确定是多少,就写的是0.5,这个应该是你的阈值标准...

佳县19664771602: 形态学图像处理 -
赞湛克欣: 1、dilate函数 该函数能够实现二值图像的膨胀操作,有以下形式:BW2=dilate(BW1,SE) BW2=dilate(BW1,SE,…,n) 其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行膨胀操作.输入图像BW1的类型为double或...

佳县19664771602: 二次函数的知识点有哪些 -
赞湛克欣: 二次函数的知识点1.二次函数的定义:y=ax^2+bx+c(a≠0)2.图像和性质:二次函数y=ax^2(a>0)的图像和性质; 二次函数y=ax^2(a<0)的图像和性质; 二次函数y=ax^2+bx+c(a>0)的图像和性质; 二次函数y=ax^2+bx+c(a<0)的图像和性质.图像:列对...

佳县19664771602: 【急】matlab提问 -
赞湛克欣: 第一个问题涉及到概率统计分布问题,std(x) 是方差,mean(x)+/- 3std(x)是一个概率范围 代表x中选择一个数,那这个数大概有99.73% 的概率会落在[mean(x) - 3std(x), mean(x) +3std(x)]的范围内,如果是与均值相差太大,超过3std(x),那就认为这个值是个错误的值.具体你可以搜 '3sigma'及置信区间来了解.第二个问题,abs(x-mean(x))举个栗子: x=[1 2 3 4], 那么x所以abs(x-mean(x))把x中大于3*std(x)的值踢出,保留小于3*std(x)

佳县19664771602: 有限积分法和有限差分法 -
赞湛克欣: 1.1 概念 有限差分方法(FDM)是计算机数值模拟最早采用的方法,至今仍被广泛运用.该方法将求解域划分为差分网格,用有限个网格节点代替连续的求解域.有限差分法以Taylor级数展开等方法,把控制方程中的导数用网格节点上的函数值...

佳县19664771602: 高中数学按必修选修知识整合附带各部分经典例题 -
赞湛克欣:[答案] 高中数学解题小结大汇总 熟悉这些解题小结论,启迪解题思路、探求解题佳径,总结解题方法,防止解题易误点的产生,对提升高考数学成绩将会起到立竿见影的效果. 一、集合与简易逻辑 1.集合的元素具有无序性和互异性. 2.对集合 , 时,你是否...

佳县19664771602: 如题,vb.net如何连接oracle?
赞湛克欣: 1、安装oracle客户端,配置客户端,这些是在oracle客户端里设置的,不明白话可以百度一下. 2、在vb.net中用BindingSource1建立连接,方法大体同sql server一样. 希望能帮助你.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网