u012816621的专栏

先上例子:

(MRI脑图像原图) (经过Ostu算法得出来的图像)

算法简介:大津算法(Ostu),又叫最大类间算法,,就是说把图像分为目标和背景两部分,因为图像处理最终都是要对目标进行处理,如果找某个阈值使得目标图像与背景之间反差最大,可想而知目标就会最突出,就会达到了图像分割的目的。

自我理解:该算法是一种阈值分割,就是从0~255之间找到一个阈值,把目标与背景分开,据我的实践结果,与最大熵阈值分割、最佳阈值分割(先不用了解,之后的文章我会详细的阐述)效果来看,Ostu算法是比较好的一种分割算法,但是他的本质(阈值分割)导致了他的局限性,对于多目标的形式下(多细节图像),会出现阈值异常,因为不能分清到底哪个才是真正你想研究的目标。

步骤及原理剖析:

(1)先把图像变成灰度图像,遍历每一个像素,记录该像素值出现的次数。

(2)一共有Width*Heigh个像素点,用其做分母,算出每一个像素值出现的概率。

(3)从0~255一次尝试,假设该阈值就是使目标与背景反差最大的阈值。

(4)

ω0=N0/ M×N //M,N分别为高和宽,N0,N1为小于和不小于阈值的像素点个数ω1=N1/ M×NN0+N1=M×Nω0+ω1=1(4)μ=ω0*μ0+ω1*μ1 (5)g=ω0(μ0-μ)^2+ω1(μ1-μ)^2 (6)

把4,5式带入6式,即可得到方差的另外的简便方程:w0 * w1 * (u0 – u1) * (u0 – u1)(不信你自己算一算)

private void otsu阈值分割(){int i, j, t, m;double[] p = new double[256];for (i = 0; i < 256; i++)p[i] = 0;//赋初值for (j = 0; j < heigh; j++)for (i = 0; i < width; i++)p[ba[i, j]]++; //统计次数for (i = 0; i < 256; i++)p[i] = p[i]/(width*heigh);//计算概率double[] sigma = new double[256];//统计每个灰度值的前景与背景的方差for (t = 0; t < 256;t++ ){double w0 = 0;for (m = 0; m < t + 1;m++ )w0 += p[m];double w1 = 1 – w0;double u0 = 0;double u1 = 0;for (m = 0; m < t + 1; m++)u0 += m * p[m] / w0;//目标平均灰度值for (m = t+1; m < 256; m++)u1 += m * p[m] / w1;sigma[t] = w0 * w1 * (u0 – u1) * (u0 – u1);}double max=0;int T=0;for (i = 0; i < 256;i++ )if (max < sigma[i]){max = sigma[i];T = i;}MessageBox.Show("The best thresh"+T);}【如果有问题请留言,本人是新手,希望大家指导~】

因为有梦,所以勇敢出发,选择出发,便只顾风雨兼程。

u012816621的专栏

相关文章:

你感兴趣的文章:

标签云: