族谱网 头条 人物百科

大津算法

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:157
转发:0
评论:0
方法在大津算法中,我们穷举搜索能使类内方差最小的阈值,定义为两个类的方差的加权和:权重ωω-->i{displaystyleomega_{i}}是被阈值t{displaystylet}分开

方法

在大津算法中,我们穷举搜索能使类内方差最小的阈值,定义为两个类的方差的加权和:

权重 ω ω -->i{\displaystyle \omega _{i}} 是被阈值 t{\displaystyle t} 分开的两个类的概率,而 σ σ -->i2{\displaystyle \sigma _{i}^{2}} 是这两个类的方差。

大津证明了最小化类内方差和最大化类间方差是相同的:

用类概率 ω ω -->i{\displaystyle \omega _{i}} 和类均值 μ μ -->i{\displaystyle \mu _{i}} 来表示。

类概率 ω ω -->1(t){\displaystyle \omega _{1}(t)} 用阈值为 t{\displaystyle t} 的直方图计算:

而类均值 μ μ -->1(t){\displaystyle \mu _{1}(t)} 为:

其中 x(i){\displaystyle x(i)} 为第 i{\displaystyle i} 个直方图面元中心的值。 同样的,你可以对大于 t{\displaystyle t} 的面元求出右侧直方图的 ω ω -->2(t){\displaystyle \omega _{2}(t)} 与 μ μ -->2{\displaystyle \mu _{2}}。

类概率和类均值可以迭代计算。这个想法会产生一个有效的算法。

大津算法得出了0:1范围上的一个阈值。这个阈值用于图像现的像素强度的动态范围。例如,若图像只包含155到255之间的像素强度,大津阈值0.75会映射到灰度阈值230(而不是192,因为图像包含的像素不是0–255全范围的)。常见的摄影图像往往包含全范围的像素强度,就会让这一点有争论,但其他应用会对这点区别很敏感。

算法

计算每个强度级的直方图和概率

设置 ω ω -->i(0){\displaystyle \omega _{i}(0)} 和 μ μ -->i(0){\displaystyle \mu _{i}(0)} 的初始值

遍历所有可能的阈值 t=1… … -->{\displaystyle t=1\ldots } 最大强度

所需的阈值对应于最大的 σ σ -->b2(t){\displaystyle \sigma _{b}^{2}(t)}

你可以计算两个最大值(和两个对应的)。σ σ -->b12(t){\displaystyle \sigma _{b1}^{2}(t)} 是最大值而 σ σ -->b22(t){\displaystyle \sigma _{b2}^{2}(t)} 是更大的或相等的最大值

所需的阈值 = threshold1+threshold22{\displaystyle {\frac {{\text{threshold}}_{1}+{\text{threshold}}_{2}}{2}}}

JavaScript实现

注:输入参数total是给定图像中的像素数。输入参数histogram是灰度图像不同灰度级(典型的8位图像)的256元直方图。此函数输出图像的阈值。

functionotsu(histogram,total){varsum=0;for(vari=1;i256;++i)sum+=i*histogram[i];varsumB=0;varwB=0;varwF=0;varmB;varmF;varmax=0.0;varbetween=0.0;varthreshold1=0.0;varthreshold2=0.0;for(vari=0;i256;++i){wB+=histogram[i];if(wB==0)continue;wF=total-wB;if(wF==0)break;sumB+=i*histogram[i];mB=sumB/wB;mF=(sum-sumB)/wF;between=wB*wF*(mB-mF)*(mB-mF);if(between>=max){threshold1=i;if(between>max){threshold2=i;}max=between;}}return(threshold1+threshold2)/2.0;}

MATLAB实现

total为给定图像中的像素数。 histogramCounts为灰度图像不同灰度级(典型的8位图像)的256元直方图。 level为图像的阈值(double)。

functionlevel =otsu(histogramCounts, total)%% OTSU automatic thresholding methodsumB=0;wB=0;maximum=0.0;threshold1=0.0;threshold2=0.0;sum1=sum((1:256).*histogramCounts.");% the above code is replace with this single lineforii=1:256wB=wB+histogramCounts(ii);if(wB==0)continue;endwF=total-wB;if(wF==0)break;endsumB=sumB+ii*histogramCounts(ii);mB=sumB/wB;mF=(sum1-sumB)/wF;between=wB*wF*(mB-mF)*(mB-mF);if(between>=maximum)threshold1=ii;if(between>maximum)threshold2=ii;endmaximum=between;endendlevel=(threshold1+threshold2)/(2);end

另一种方法是用向量化方法(可以很容易地转换为便于GPU处理Python矩阵数组版本)

function[threshold_otsu] =Thredsholding_Otsu( Image)%Intuition:%(1)pixels are divided into two groups%(2)pixels within each group are very similar to each other % Parameters:% t : threshold % r : pixel value ranging from 1 to 255% q_L, q_H : the number of lower and higher group respectively% sigma : group variance% miu : group mean% Author: Lei Wang% Date : 22/09/2013% References : Wikepedia, % for multi children Otsu method, please visit : aring% This is my original worknbins=256;counts=imhist(Image,nbins);p=counts/sum(counts);fort=1:nbinsq_L=sum(p(1:t));q_H=sum(p(t+1:end));miu_L=sum(p(1:t).*(1:t)")/q_L;miu_H=sum(p(t+1:end).*(t+1:nbins)")/q_H;sigma_b(t)=q_L*q_H*(miu_L-miu_H)^2;end[~,threshold_otsu]=max(sigma_b(:));end

该实现有一点点冗余的计算。但由于大津算法快速,这个实现版本是可以接受,并且易于理解的。因为在一些环境中,如果使用向量化的形式,可以更快地运算循环。大津二值化法使用架构最小的堆-孩子标签(heap-children label)可以很容易地转变成多线程的方法。


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 最大期望算法
历史最大期望值算法由ArthurDempster,NanLaird和DonaldRubin在他们1977年发表的经典论文中提出。他们指出此方法之前其实已经被很多作者"在他们特定的研究领域中多次提出过"。EM简单教程EM是一个在已知部分相关变量的情况下,估计未知变量的迭代技术。EM的算法流程如下:初始化分布参数重复直到收敛:最大期望过程说明我们用y{\displaystyle{\textbf{y}}}表示能够观察到的不完整的变量值,用x{\displaystyle{\textbf{x}}}表示无法观察到的变量值,这样x{\displaystyle{\textbf{x}}}和y{\displaystyle{\textbf{y}}}一起组成了完整的数据。x{\displaystyle{\textbf{x}}}可能是实际测量丢失的数据,也可能是能够简化问题的隐藏变量,如果它的值...
· 算法
历史算法在中国古代文献中称为“术”,最早出现在《周髀算经》、《九章算术》。特别是《九章算术》,给出四则运算、最大公约数、最小公倍数、开平方根、开立方根、求素数的埃拉托斯特尼筛法,线性方程组求解的算法。三国时代的刘徽给出求圆周率的算法:刘徽割圆术。自唐代以来,历代更有许多专门论述“算法”的专著:唐代:《一位算法》一卷,《算法》一卷;宋代:《算法绪论》一卷、《算法秘诀》一卷;最著名的是杨辉的《杨辉算法》;元代:《丁巨算法》;明代:程大位《算法统宗》清代:《开平算法》、《算法一得》、《算法全书》。而英文名称“Algorithm”来自于9世纪波斯数学家花拉子米(比阿勒·霍瓦里松,波斯语:خوارزمی‎,拉丁转写:al-Khwarizmi),因为比阿勒·霍瓦里松在数学上提出了算法这个概念。“算法”原为“algorism”,即“al-Khwarizmi”的音转,意思是“花拉子米”的运算法则,在18世...
· Paxos算法
问题和假设分布式系统中的节点通信存在两种模型:共享内存(Sharedmemory)和消息传递(Messagespassing)。基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、被杀死或者重启,消息可能会延迟、丢失、重复,在基础Paxos场景中,先不考虑可能出现消息篡改即拜占庭错误的情况。Paxos算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议的一致性。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。因此从20世纪80年代起对于一致性算法的研究就...
· CYK算法
相关参数定义G=(V,ΣΣ-->,S,P){\displaystyle~G=(V,\Sigma,S,P)}是一个上下文无关文法对于任意字符串w=σσ-->1...σσ-->n∈∈-->ΣΣ-->∗∗-->{\displaystylew=\sigma_{1}...\sigma_{n}\in\Sigma^{*}},定义w[i,j]=σσ-->i...σσ-->j,1≤≤-->i≤≤-->j≤≤-->n{\displaystylew[i,j]=\sigma_{i}...\sigma_{j},~1\leqi\leqj\leqn}对于任意选择的i,j{\displaystyle~i,j},定义Vi,j={X∈∈-->V|X⇒⇒-->∗∗-->w[i,j]}{\displaystyleV_{i,j}=\{X\inV~|...
· 双鱼算法
概要双鱼算法有128、192、256位三种密钥长度可供选择,块大小为128位,可以看作是布鲁斯·施奈尔1993年开发的Blowfish算法的延伸版本。技术上使用与Blowfish类似的计算方法,但是考虑到主要面向于网络应用,提高了更大密钥算法的速度。与Blowfish算法一样,双鱼算法无须授权即可使用。参考资料

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信