| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2660 人关注过本帖
标题:[寻求]——迭代阈值图像分割(图像阈值分割)
只看楼主 加入收藏
边城路人
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:591
专家分:0
注 册:2007-3-8
收藏
 问题点数:0 回复次数:3 
[寻求]——迭代阈值图像分割(图像阈值分割)
这是阈值分割中阈值的选择方法之一
急需这个算法
期待您的回帖或邮件jiange1232003@yahoo.com.cn
搜索更多相关主题的帖子: 阈值 图像 
2007-04-05 08:52
xumeijian
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-4-5
收藏
得分:0 
本人也做过机器视觉这方面的课题,用的就是大恒的图像采集卡.从采集彩色图像到灰度化,再到将24位图像变成8位,接着图像增强.二值化.边缘提取.轮廓提取.hough变换等等,然后再将8位变成24位的图像显示.整个系统可以实时处理,效果非常好.此系统已具有很多的处理模块,只要稍微添加一些你需要的模块即可完成你的课题.如果有人需要所有的源代码,可以跟我联系.QQ:351871564 手机:13585206106 长期有效 其中二值化就包括固定阈值二值化,迭代法二值化,剃度二值化法等


有些重复性的劳动何必为之?精力应放在创新与最前沿上
2007-04-09 17:05
边城路人
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:591
专家分:0
注 册:2007-3-8
收藏
得分:0 

有的话,就传上来吧
大家共享


当你开始怀疑自己时,说明你已经失去了判断力
2007-04-10 14:42
xumeijian
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-4-5
收藏
得分:0 
回复:(边城路人)[寻求]——迭代阈值图像分割(图像...


BOOL Fenbutongji(LPSTR lpDIBBits,int lmageWidth,int lmageHeight,int *tongji) //统计
{
// 循环变量
LONG i;
LONG j;
//变量初始化
memset(tongji,0,sizeof(int) * 256);




// 对各像素进行灰度转换
for (j = 0; j < lmageHeight; j ++)
{
for (i = 0; i <lmageWidth; i++)
{
// 对各像素进行灰度统计

unsigned char temp = *((unsigned char *)lpDIBBits + lmageWidth * j + i);
tongji[temp]++;
}
}
return TRUE;
}


BOOL Diedaifazhi(LPSTR lpDIBBits,int lmageWidth,int lmageHeight,int *tongji) //迭代法二值化 程序中要调用上面的函数
{
// 循环变量
LONG i;
LONG j;

// 迭代阀值
int T1, T2;
T1 = 127;
T2 = 0;
// 临时变量
int Temp0, Temp1, Temp2, Temp3;
Temp0 = Temp1 = Temp2 = Temp3 = 0;
while (true)
{
// 计算下一个迭代阀值
for (i = 0; i < T1 + 1; i++)
{
Temp0 += tongji[i] * i;
Temp1 += tongji[i];
}
for (i = T1 + 1; i < 256; i++)
{
Temp2 += tongji[i] * i;
Temp3 += tongji[i];
}
T2 = (Temp0 / Temp1 + Temp2 / Temp3) / 2;
// 看迭代结果是否已收敛
if (T1 == T2)
break;
else
T1 = T2;
}
// 对各像素进行灰度转换
for (j = 0; j < lmageHeight; j ++)
{
for (i = 0; i < lmageWidth; i ++)
{
// 读取像素
unsigned char temp = *((unsigned char *)lpDIBBits + lmageWidth * j + i);
// 判断像素灰度值是否超出范围
if (temp < T1)
temp = 0;
else
temp = 255;
// 回写处理完的像素
*((unsigned char *)lpDIBBits + lmageWidth * j + i) = temp;
}
}
return TRUE;
}

void CDImageProcessView::OnDiedaierzhihua() //迭代法二值化响应在视类中的处理函数
{
CDImageProcessDoc* pDoc = GetDocument();
// 指向DIB的指针
LPSTR lpDIB;
// 指向DIB象素指针
LPSTR lpDIBBits;

// 锁定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHObject());
// 找到DIB图像象素起始位置
lpDIBBits = pDoc->m_dib.GetBits(lpDIB);
// 判断是否是8-bpp位图
if (pDoc->m_dib.GetColorNum(lpDIB) != 256)
{
// 提示用户
MessageBox("目前只支持256色位图!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 解除锁定
::GlobalUnlock((HGLOBAL) pDoc->GetHObject());
// 返回
return;
}


// 更改光标形状
BeginWaitCursor();

int tongji[256];
//初始为0
memset(tongji, 0, sizeof(tongji));
//统计直方图灰度值和迭代法二值化
if (Fenbutongji(lpDIBBits, pDoc->m_dib.GetWidth(lpDIB), pDoc->m_dib.GetHeight(lpDIB),tongji)&&Diedaifazhi(lpDIBBits, pDoc->m_dib.GetWidth(lpDIB), pDoc->m_dib.GetHeight(lpDIB),tongji))
{
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用户
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}

// 解除锁定
::GlobalUnlock((HGLOBAL) pDoc->GetHObject());
// 恢复光标
EndWaitCursor();// TODO: Add your command handler code here // TODO: Add your command handler code here
// TODO: Add your command handler code here

}


有些重复性的劳动何必为之?精力应放在创新与最前沿上
2007-04-11 17:53
快速回复:[寻求]——迭代阈值图像分割(图像阈值分割)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016197 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved