图像分割实验报告汇总
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}//根据阈值对图像目标和背景分类
}
u1=ForegroundSum/iForeground;
u2=BackgroundSum/iBackground;
Tmp=int((u1+u2)/2); //新的迭代阈值
if(Tmp==T)
break; //迭代结束,分割阈值为Tmp
else
T=Tmp;
}
CString msg;
图像分割实验
一、实验目的
1.掌握图像分割的基本思想,了解其分割技术及其计算策略;
2.学会从图像处理到分析的关键步骤,掌握图像分割过程;
3.了解图像分割的意义,进一步加深对图像分析和理解;
4.掌握基本分割方法:迭代分割和OTSU图像分割,并编程实现。
二、实验原理
(一)迭代阈值分割选取的基本思路是:首先根据图像中物体的灰度分布情况,选取一个近似阈值作为初始阈值,一个较好的方法就是将图像的灰度均值作为初始阈值,然后通过分割图像和修改阈值的迭代过程获得认可的最佳阈值。迭代式阈值选取过程可描述如下:
1.计算初始化阈值 = ;
2.根据 ,将图像分为两部分,分别计算灰度值期望,取其平均值为g1;
3.如此反复迭代,当 - 足够小时,停止迭代,取T= 即为最终阈值。
(二)OTSU图像分割(最大类间方差法)是一种自适应的阈值确定的方法,是按图像的灰度特性,将图像分成背景和目标两部分。背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大, 当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。以最佳门限将图像灰度直方图分割成两部分,使两部分类间方差取最大值,即分离性最大。OTSU阈值选取过程可描述如下:
for(i=0;i<m_Width;i++)
{
if ((m_pDibInit->m_pDibBits[j*m_SaveWidth + i])>=max)
max=m_pDibInit->m_pDibBits[j*m_SaveWidth + i];//求最大灰度值
if ((m_pDibInit->m_pDibBits[j*m_SaveWidth + i])<=min)
min=m_pDibInit->m_pDibBits[j*m_SaveWidth + i];//求最小灰度值
}
T=int((max+min)/2);//T为迭代初始阈值
for(k=0;k<255;k++)
{
for(j=0;j<m_Height;j++)
{
for(i=0;i<m_Width;i++)
{
由图3可得:对于直方图双峰不明显或图像目标和背景比例差异悬殊迭代法所选取的阈值不如最大类间方差法(OTSU)(差异不是很大,很细微)。
但是对于直方图双峰明显谷底较深的图像迭代分割可以较快地获得满意结果。
五、实验程序段(具体见实验框架)
1.迭代图像分割:
void CImageProcessingDoc::Onimagediedaifenge()
m_Width = m_pDibInit->GetWidth();
m_Height = m_pDibInit->GetHeight();
m_SaveWidth = m_pDibInit->GetSaveWidth();
int m,iForeground=0,iBackground=0;
for(j=0;j<m_Height;j++)
msg.Format("分割阈值T=%d",T);
AfxMessageBox(msg);
for(j=0;j<m_Height;j++)
{
for(i=0;i<m_Width;i++)
{
if (m_pDibInit->m_pDibBits[j*m_SaveWidth + i]>=T)
m_pDibInit->m_pDibBits[j*m_SaveWidth + i]=255;
1.记T为目标与背景的分割阈值,目标点数占图像比例为w1, 平均灰度为u1;背景点数占图像比例为w2,平均灰度为u1;
2.图像的总平均灰度为:u=w1*u1+w2*u2;
3.目标和背景图象的方差:g=w1*(u1-u)*(u1-u)+w1*(u2-u)*(u2-u)=w1*w2*(u1-u2)*(u1-u2);
else
m_pDibInit->m_pDibBits[j*m_SaveWidth + i]=0;
}
}
UpdateAllViews(NULL);
}
2.OTSU图像分割:
void CImageProcessingDoc::OnimageOTSU()
{
// TODO: Add your command handler code here
m=m_pDibInit->m_pDibBits[j*m_SaveWidth + i];
if(m>=T)
{
iForeground=iForeground+1;
ForegroundSum=ForegroundSum+double(m);
}
else
{
iBackground=iBackground+1;
BackgroundSum=BackgroundSum+double(m);
int m_Width, m_Height, m_SaveWidth;
{
// TODO: Add your command handler code here
int m_Width, m_Height, m_SaveWidth;
int i,j,k,T,Tmp;
double ForegroundSum=0,BackgroundSum=0,u1,u2,min=255,max=0;
4.当方差g最大时,可以认为此时前景和背景差异最大,此时的灰度T是最佳阈值。
二、实验内容
1.利用C++编程实现迭代阈值图像分割算法;
2.利用C++编程实现OTSU动态阈值图像分割算法。
三、实验框图
1.迭代分割
2.OSTU
四、实验结果来自百度文库分析
图1原图
图2迭代图像分割
图3OTSU图像分割
实验分析:
由图2可知:迭代所得的阈值分割的图象效果良好,能区分出图像的目标和背景的主要区域,但在图像的细微处还没有很好的区分度。部分区域微小数据的变化(如机翼五角星标识下方)引起分割效果的明显改变,目标和背景的数据只是稍有变化但分割效果却反差极大。
}//根据阈值对图像目标和背景分类
}
u1=ForegroundSum/iForeground;
u2=BackgroundSum/iBackground;
Tmp=int((u1+u2)/2); //新的迭代阈值
if(Tmp==T)
break; //迭代结束,分割阈值为Tmp
else
T=Tmp;
}
CString msg;
图像分割实验
一、实验目的
1.掌握图像分割的基本思想,了解其分割技术及其计算策略;
2.学会从图像处理到分析的关键步骤,掌握图像分割过程;
3.了解图像分割的意义,进一步加深对图像分析和理解;
4.掌握基本分割方法:迭代分割和OTSU图像分割,并编程实现。
二、实验原理
(一)迭代阈值分割选取的基本思路是:首先根据图像中物体的灰度分布情况,选取一个近似阈值作为初始阈值,一个较好的方法就是将图像的灰度均值作为初始阈值,然后通过分割图像和修改阈值的迭代过程获得认可的最佳阈值。迭代式阈值选取过程可描述如下:
1.计算初始化阈值 = ;
2.根据 ,将图像分为两部分,分别计算灰度值期望,取其平均值为g1;
3.如此反复迭代,当 - 足够小时,停止迭代,取T= 即为最终阈值。
(二)OTSU图像分割(最大类间方差法)是一种自适应的阈值确定的方法,是按图像的灰度特性,将图像分成背景和目标两部分。背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大, 当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。以最佳门限将图像灰度直方图分割成两部分,使两部分类间方差取最大值,即分离性最大。OTSU阈值选取过程可描述如下:
for(i=0;i<m_Width;i++)
{
if ((m_pDibInit->m_pDibBits[j*m_SaveWidth + i])>=max)
max=m_pDibInit->m_pDibBits[j*m_SaveWidth + i];//求最大灰度值
if ((m_pDibInit->m_pDibBits[j*m_SaveWidth + i])<=min)
min=m_pDibInit->m_pDibBits[j*m_SaveWidth + i];//求最小灰度值
}
T=int((max+min)/2);//T为迭代初始阈值
for(k=0;k<255;k++)
{
for(j=0;j<m_Height;j++)
{
for(i=0;i<m_Width;i++)
{
由图3可得:对于直方图双峰不明显或图像目标和背景比例差异悬殊迭代法所选取的阈值不如最大类间方差法(OTSU)(差异不是很大,很细微)。
但是对于直方图双峰明显谷底较深的图像迭代分割可以较快地获得满意结果。
五、实验程序段(具体见实验框架)
1.迭代图像分割:
void CImageProcessingDoc::Onimagediedaifenge()
m_Width = m_pDibInit->GetWidth();
m_Height = m_pDibInit->GetHeight();
m_SaveWidth = m_pDibInit->GetSaveWidth();
int m,iForeground=0,iBackground=0;
for(j=0;j<m_Height;j++)
msg.Format("分割阈值T=%d",T);
AfxMessageBox(msg);
for(j=0;j<m_Height;j++)
{
for(i=0;i<m_Width;i++)
{
if (m_pDibInit->m_pDibBits[j*m_SaveWidth + i]>=T)
m_pDibInit->m_pDibBits[j*m_SaveWidth + i]=255;
1.记T为目标与背景的分割阈值,目标点数占图像比例为w1, 平均灰度为u1;背景点数占图像比例为w2,平均灰度为u1;
2.图像的总平均灰度为:u=w1*u1+w2*u2;
3.目标和背景图象的方差:g=w1*(u1-u)*(u1-u)+w1*(u2-u)*(u2-u)=w1*w2*(u1-u2)*(u1-u2);
else
m_pDibInit->m_pDibBits[j*m_SaveWidth + i]=0;
}
}
UpdateAllViews(NULL);
}
2.OTSU图像分割:
void CImageProcessingDoc::OnimageOTSU()
{
// TODO: Add your command handler code here
m=m_pDibInit->m_pDibBits[j*m_SaveWidth + i];
if(m>=T)
{
iForeground=iForeground+1;
ForegroundSum=ForegroundSum+double(m);
}
else
{
iBackground=iBackground+1;
BackgroundSum=BackgroundSum+double(m);
int m_Width, m_Height, m_SaveWidth;
{
// TODO: Add your command handler code here
int m_Width, m_Height, m_SaveWidth;
int i,j,k,T,Tmp;
double ForegroundSum=0,BackgroundSum=0,u1,u2,min=255,max=0;
4.当方差g最大时,可以认为此时前景和背景差异最大,此时的灰度T是最佳阈值。
二、实验内容
1.利用C++编程实现迭代阈值图像分割算法;
2.利用C++编程实现OTSU动态阈值图像分割算法。
三、实验框图
1.迭代分割
2.OSTU
四、实验结果来自百度文库分析
图1原图
图2迭代图像分割
图3OTSU图像分割
实验分析:
由图2可知:迭代所得的阈值分割的图象效果良好,能区分出图像的目标和背景的主要区域,但在图像的细微处还没有很好的区分度。部分区域微小数据的变化(如机翼五角星标识下方)引起分割效果的明显改变,目标和背景的数据只是稍有变化但分割效果却反差极大。