当前位置:首页 » 操作系统 » 二值化算法

二值化算法

发布时间: 2022-01-25 03:19:15

① 我在做基于二值化理论的医学图像处理,请问图像二值化的理论和方法有哪些图像二值化的算法有哪些

二值化简介
方法:
1、全局二值化
2、局部自适应二值化

应用
一幅图像包括目标物体、背景还有噪声,要想从多值 二值化的数字图像中直接提取出目标物体,最常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化(BINARIZATION)。 图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。

1、局二值化
一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者黑色),小于T的像素群的像素值设定为黑色(或者白色)。 全局二值化,在表现图像细节方面存在很大缺陷。为了弥补这个缺陷,出现了局部二值化方法。 局部二值化的方法就是按照一定的规则将整幅图像划分为N个窗口,对这N个窗口中的每一个窗口再按照一个统一的阈值T将该窗口内的像素划分为两部分,进行二值化处理。

2、部自适应二值化
局部二值化也有一个缺陷。这个缺陷存在于那个统一阈值的选定。这个阈值是没有经过合理的运算得来,一般是取该窗口的平局值。这就导致在每一个窗口内仍然出现的是全局二值化的缺陷。为了解决这个问题,就出现了局部自适应二值化方法。 局部自适应二值化,该方法就是在局部二值化的基础之上,将阈值的设定更加合理化。该方法的阈值是通过对该窗口像素的平均值E,像素之间的差平方P,像素之间的均方根值Q等各种局部特征,设定一个参数方程进行阈值的计算,例如:T=a*E+b*P+c*Q,其中a,b,c是自由参数。这样得出来的二值化图像就更能表现出二值化图像中的细节。
编辑本段应用
二值化是图像处理的基本操作,任何图像处理基本离不开二值化的操作。其应用非常广泛。

(转载自网络--》二值化)

② 二值化图像的面积和轮廓代码

open cv读进来,然后统计像素点,opencv china的一个网站专门介绍了图像处理的函数和算法,里面好多代码,没记错的话,你这个东西里面有demo

③ 机器学习 特征二值化

分类算法一般最后得到的是一个概率向量,表示该样本属于某种类别的概率。用户需要确定每一维对应的是哪一类。
例如,对于你提到的例子,是一个二分类问题,输出一个二维的概率向量,可以把第0维看做错误,第1维看做正确;当然也可以把第1维看做错误,第0维看做正确。只要是确定这个对应关系就可以了。
直接把每一类对应到0,1,2,... 就可以了

④ matlab中p-tile算法(p分位数法)的实现图像二值化阈值的选取的原理,怎么实现 的

if Trim(request("Lock")) <> "" then
tj5="and Lock = '"&Trim(request("Lock"))&"'"
else
tj5=""
end if

⑤ 图像二值化的算法比较

OTSU的中心思想是阈值T应使目标与背景两类的类间方差最大。
//用类间方差最大思想计算阈值
int Threshold(int *hist) //compute the threshold
{
float u0, u1;
float w0, w1;
int count0;
int t, maxT;
float devi, maxDevi = 0; //方差及最大方差
int i;
int sum = 0;
for (i = 0; i < 256; i++)
{
sum = sum + hist[i];
}
for (t = 0; t < 255; t++)
{
u0 = 0; count0 = 0;
//阈值为t时,c0组的均值及产生的概率
for (i = 0; i <= t; i++)
{
u0 += i * hist[i]; count0 += hist[i];
}
u0 = u0 / count0; w0 = (float)count0/sum;
//阈值为t时,c1组的均值及产生的概率
u1 = 0;
for (i = t + 1; i < 256; i++)
{
u1 += i * hist[i];
}
u1 = u1 / (sum - count0); w1 = 1 - w0;
//两类间方差
devi = w0 * w1 * (u1 - u0) * (u1 - u0);
//记录最大的方差及最佳位置
if (devi > maxDevi)
{
maxDevi = devi;
maxT = t;
}
}
return maxT;
}
//二值化处理
void OTSU(IplImage *src, IplImage *dst)
{
int i = 0, j = 0;
int wide = src->widthStep;
int high = src->height;
int hist[256] = {0};
int t;
unsigned char *p, *q;
for (j = 0; j < high; j ++)
{
p = (unsigned char *)(src->imageData + j * wide);
for (i = 0; i < wide; i++)
{
hist[p[i]]++; //统计直方图
}
}
t = Threshold(hist);
for (j = 0; j < high; j ++)
{
q = (unsigned char *)(dst->imageData + j * wide);
p = (unsigned char *)(src->imageData + j * wide);
for (i = 0; i < wide; i++)
{
q[i] = p[i] >= t ? 255 : 0;
}
}
}
OTSU算法对不均匀光照的图片不能产生很好的效果。 另外一个Kittler算法,是一种快速的全局阈值法。它的效果不比OTSU差多少,但速度快好多倍,如果可以应用在图像质量不错的环境。
它的中心思想是,计算整幅图像的梯度灰度的平均值,以此平均值做为阈值。
//kittler算法
for (i=1;i<high-1;i++)
{
plineadd=src->imageData+i*wide;
pNextLine=src->imageData+(i+1)*wide;
pPreLine=src->imageData+(i-1)*wide;
for(j=1;j<wide-1;j++)
{
//求水平或垂直方向的最大梯度
Grads=MAX(abs((uchar)pPreLine[j]-(uchar)pNextLine[j]),abs((uchar)plineadd[j-1]-(uchar)plineadd[j+1])); //max(xGrads,yGrads)
sumGrads += Grads;
//梯度与当前点灰度的积
sumGrayGrads += Grads*((uchar)plineadd[j]);
}
}
threshold=sumGrayGrads/sumGrads;
// printf(%d ,threshold);
for(i=0;i<high;i++)
{
plineadd=src->imageData+i*wide;
pTempLine=kittler->imageData+i*wide;
for(j=0;j<wide;j++)
{
pTempLine[j]=(uchar)plineadd[j]>threshold?255:0;
}
}

⑥ 关于Niblack二值化算法matlab代码

for i=1:r:Height
for j=1:r:Width
block = imag(i:i+r-1,j:j+r-1); %提取方块
m = mean2(block);
v = var(var(double(block)));
t = m + k * v;
block = double(block > t); %计算二值
imag(i:i+r-1,j:j+r-1) = block; %放回方块
end
end

⑦ 几种二值化方法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来减少对噪声的敏感度。

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

图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果。
本文针对几种经典而常用的二值发放进行了简单的讨论并给出了其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最大的灰度级作为分割图像的阈值,这就是一维最大熵阈值图像分割法。

⑨ 有人会用kittler算法对图像进行二值化吗

因素只有一个,就是阈值,因为就这一个参数。选过高,图像一片白,选过低,一片黑,都导致图像细节的丧失。 最佳的选择当然是看直方图,选择中间的谷点。但如果整幅图像的灰度分布在空间并不均匀,就会导致二值化后的整体效果不佳。

热点内容
诺基亚密码忘了打什么电话 发布:2024-09-17 03:27:09 浏览:555
树深度优先算法 发布:2024-09-17 03:26:58 浏览:472
跳转页源码 发布:2024-09-17 03:13:05 浏览:543
html文件上传表单 发布:2024-09-17 03:08:02 浏览:784
聊天软件编程 发布:2024-09-17 03:00:07 浏览:726
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207
cf编译后没有黑框跳出来 发布:2024-09-17 01:46:54 浏览:249
安卓怎么禁用应用读取列表 发布:2024-09-17 01:46:45 浏览:524
win10设密码在哪里 发布:2024-09-17 01:33:32 浏览:662