图象动态阈值分割算法的问题

kuguoxin 2008-05-13 05:03:16
看了一个算法如下

(1)将输入指纹图像划分为互不重叠的W×W子块,I(x ,y)是像素点的灰度值
大小。
(2)计算每个字块中像素的平均灰度值为M (k ,l):
(3)计算每个子块的灰度方差:
(4) 分别计算子块中灰度方差最大值Vmax和最小值Vmin,并计算他们的差值Vdiff:
(5)按照公式(2-4)定义动态阈值T,将V (k ,l)与T比较,若小于T,标记该子块为背景区域;否则,作为前景区,其中,α 为 权重因子,本文取0.01。

关键代码如下:代码是自己写的


int hang = image.image_Height / blockSize ;
int lie = image.image_Width / blockSize;
for (i = 0;i < hang;i++)
{
for (j = 0 ;j < lie;j++)
{
float V= 0;
float M =0;
float tem = 0;
int ib= i*blockSize;
int jb = j*blockSize;
Vmax = 0;
Vmin = 25000;
//计算灰度均值
tem = 0;
for(m = 0;m < blockSize ;m++)
{
for(n = 0 ; n < blockSize ; n++)
{
tem += image.imageData[ib+m][jb+n];
}
}
M= tem / ww;
//计算方差
tem = 0;
for(m = 0;m < blockSize ;m++)
{
for(n = 0 ; n < blockSize ; n++)
{
float r = (M - image.imageData[ib+m][jb+n]) * (M - image.imageData[ib+m][jb+n]);
if (Vmax < r)
{
Vmax = r;
}
if (Vmin > r)
{
Vmin = r;
}
tem += r;
}
}
V = tem / ww;// 方差均值

T =float( 0.01*(Vmax - Vmin));
if (sqrt(V) < T)//为背景区域
{
for(m = 0;m < blockSize ;m++)
{
for(n = 0 ; n < blockSize ; n++)
{
image.imageData[ib+m][jb+n] = 254;
}
}
}

}//for lie
}//for hang


关键是动态阈值的确定部分T =float( 0.01*(Vmax - Vmin));这个算法貌似行不通阿 。
那位大哥能不能提点建议或者请教下
动态阈值一般是怎么确定的!!!!
万分感谢
...全文
673 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmzhangyu007 2008-05-13
  • 打赏
  • 举报
回复
LS说的归一化就是采用直方图均衡化做的啊,去源码网应该有这方面的C源码down的
至于如何确定阈值,就看LZ采用什么办法咯,像全局阈值确定,局部确定,自适应阈值确定,多阈值等等
kuguoxin 2008-05-13
  • 打赏
  • 举报
回复
怎么每人哦
kuguoxin 2008-05-13
  • 打赏
  • 举报
回复
谢谢bao_zi哦,采用直方图均衡化 可以把灰度调整到统一范围吗??归一话后又怎么确定阈值呢??
biao_zi 2008-05-13
  • 打赏
  • 举报
回复
当归一化之后,均值或方差被调整到指定范围内了,阈值就好确定了
kuguoxin 2008-05-13
  • 打赏
  • 举报
回复
谢谢楼上的建议,那怎么确定动态阈值哦,能不能给我个算法哦,我是因为毕业论文才接触图像处理这块的。
biao_zi 2008-05-13
  • 打赏
  • 举报
回复
貌似在做指纹处理,可以考虑先在不改变细节情况下把图象灰度值调整到一个固定范围内,或方差调整到一个理想值,所谓的归一化...
laoma_hbu 2008-05-13
  • 打赏
  • 举报
回复
分块的效果应该不太好,因为块与块之间可能会产生黑边
可以以每个像素为中心,计算以其为中心的窗口M*M的均值或方差

19,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧