java大津法确定阈值,大津法阈值法代码

int otsu(IplImage *image)

{

assert(NULL != image);

int width = image->width;

int height = image->height;

int x=0,y=0;

int pixelCount[256];

float pixelPro[256];

int i, j, pixelSum = width * height, threshold = 0;

uchar* data = (uchar*)image->imageData;

//初始化

for(i = 0; i < 256; i++)

{

pixelCount[i] = 0;

pixelPro[i] = 0;

}

//统计灰度级中每个像素在整幅图像中的个数

for(i = y; i < height; i++)

{

for(j = x;j

{

pixelCount[data[i * image->widthStep + j]]++;

}

}

//计算每个像素在整幅图像中的比例

for(i = 0; i < 256; i++)

{

pixelPro[i] = (float)(pixelCount[i]) / (float)(pixelSum);

}

//经典ostu算法,得到前景和背景的分割

//遍历灰度级[0,255],计算出方差最大的灰度值,为最佳阈值

float w0, w1, u0tmp, u1tmp, u0, u1, u,deltaTmp, deltaMax = 0;

for(i = 0; i < 256; i++)

{

w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;

for(j = 0; j < 256; j++)

{

if(j <= i) //背景部分

{

//以i为阈值分类,第一类总的概率

w0 += pixelPro[j];

u0tmp += j * pixelPro[j];

}

else //前景部分

{

//以i为阈值分类,第二类总的概率

w1 += pixelPro[j];

u1tmp += j * pixelPro[j];

}

}

u0 = u0tmp / w0;//第一类的平均灰度

u1 = u1tmp / w1;//第二类的平均灰度

u = u0tmp + u1tmp;//整幅图像的平均灰度

//计算类间方差

deltaTmp = w0 * (u0 - u)*(u0 - u) + w1 * (u1 - u)*(u1 - u);

//找出最大类间方差以及对应的阈值

if(deltaTmp > deltaMax)

{

deltaMax = deltaTmp;

threshold = i;

}

}

//返回最佳阈值;

return threshold;

}

原文:http://www.cnblogs.com/zxj015/p/3997518.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 本次课程会带着大家学习Hash算,从源码的角度去学习算,更加容易理解的方式去学习,能够更高效的吸收学到的内容,也能培养出能够独自看源码,分析源码的能力。Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。  哈希表是根据设定的哈希函数H(key)和处理冲突方将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。  通过将单向数学函数(有时称为“哈希算”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名。也称为“消息摘要”。  简单解释:哈希(Hash)算,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值