提取各个像素点的灰度值,从而确定一个阈值,怎么实现啊 ?请各位指教,谢谢

yinshan616 2011-04-07 03:33:03
提取各个像素点的灰度值,从而确定一个阈值,怎么实现啊 ?请各位指教,谢谢
...全文
783 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ihatec2s3d4n5 2011-04-09
  • 打赏
  • 举报
回复
补充:是要先把直方图得到,才可以使用的.直方图统计应该不难
Ihatec2s3d4n5 2011-04-09
  • 打赏
  • 举报
回复
给个我写的程序,数据类型很容易对应到编译器里认识的

float MeanFromHistogram( UInt *histogram, Int from, Int to )
{
float mean;
Int i, sum;
mean = 0;
sum = 0;

for( i=from; i<=to; i++ ) {
mean += i*histogram[i];
sum += histogram[i];
}

if( sum == 0 ) return 0; /* do not return errotic value when sum =0 */

mean /= (float)sum;

return mean;
}

Bool TwoMeansThresholding( UInt *histogram, Int *threshold, Int precision )
{
float m1, m2;
Int t, oldt;
Int counter;

/* initial guide */
oldt = 0;
/* if the gray scale values distribute in the whole range of possible values
t = 128 should be a good guess.
but if the image only contains very dark pixels with gray scale values lower
than 128 or if the image only contains very bright pixels with gray scale values
upper than 128, then 128 is a bad guess */
Int lower, upper;

t = 128;
lower = 255;
upper = 0;
for( t=0; t<256; t++ ) {
if( histogram[t] ) {
lower = t;
break;
}
}

for( t=255; t>=0; t-- ) {
if( histogram[t] ) {
upper = t;
break;
}
}

if( lower == 255 || upper == 0 ||
lower == upper ||
upper == lower + 1 ) return False;

t = (lower+upper+1)/2;

counter = 0;
while( 1 ) {
/* compute mean of the two groups */
m1 = MeanFromHistogram( histogram, 0, t );
m2 = MeanFromHistogram( histogram, t+1, 255 );

oldt = t;
t = ((m1+m2)+1)/2;
if( abs(t-oldt) < precision ) {
*threshold = t;
return True;
}

counter ++;
if( counter > 1024 ) break;
}

return False;
}

向立天 2011-04-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fengbingchun 的回复:]

阈值怎么确定,是通过算取所有像素值,取平均值吗,用opencv很容易实现
[/Quote]同意
你可以看看opencv的资料
TandyT 2011-04-09
  • 打赏
  • 举报
回复
通过直方图,找出波峰点和波谷点再确定阈值
LensFlare 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 yinshan616 的回复:]
提取各个像素点的灰度值,从而确定一个阈值,怎么实现啊 ?请各位指教,谢谢
[/Quote]
正解!

当然还可以去中直,看实际需求,有些时候需要不断测试,找到合理的阈值
fengbingchun 2011-04-07
  • 打赏
  • 举报
回复
阈值怎么确定,是通过算取所有像素值,取平均值吗,用opencv很容易实现
maqiliang 2011-04-07
  • 打赏
  • 举报
回复
画出直方图 就可以根据需要选择适合的值
一般取波谷的值为阈值 当然一定要根据需要选择

19,468

社区成员

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

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