上海网站建设报价书,三类人员 网站开发,小说网站的阅读界面怎么做的,公司网站免费注册图像分割
获取源工程可访问gitee可在此工程的基础上进行学习。 文章目录 图像分割实验内容一、全局固定阈值分割全局固定阈值分割的原理全局固定阈值分割的实验代码全局固定阈值分割的实验现象 二、自适应阈值分割自适应阈值分割的实验原理自适应阈值分割的实验代码自适应阈值…图像分割
获取源工程可访问gitee可在此工程的基础上进行学习。 文章目录 图像分割实验内容一、全局固定阈值分割全局固定阈值分割的原理全局固定阈值分割的实验代码全局固定阈值分割的实验现象 二、自适应阈值分割自适应阈值分割的实验原理自适应阈值分割的实验代码自适应阈值分割的实验现象 实验内容
实验目的 1掌握图像分割的原理与相关方法。 2能使用VC开发一些图像分割方法。 实验要求 A部分 1使用VC设计程序对一幅256级灰度图像进行全局固定阈值分割。 2使用VC设计程序对一幅256级灰度图像进行自适应阈值分割。
一、全局固定阈值分割
全局固定阈值分割的原理
全局固定阈值分割是图像处理中一种简单而常用的图像分割方法主要用于将图像中的目标与背景分开。该方法假设图像的目标和背景在灰度上有较大的差异因此通过设定一个固定的阈值来将图像分割成两个部分。
具体步骤如下 灰度图像转换 如果图像不是灰度图像首先将其转换为灰度图像。 选择阈值 选择一个适当的阈值该阈值将图像的灰度级别划分为两个部分一部分属于目标另一部分属于背景。阈值的选择通常基于图像的直方图分布以及应用场景。 分割图像 将图像中每个像素的灰度值与选定的阈值进行比较将灰度值大于阈值的像素归为一类灰度值小于等于阈值的像素归为另一类。这样就得到了分割后的图像。 可选的后处理 分割后的图像可能包含一些噪声或不连续的区域因此可能需要进行一些后处理步骤如去噪、连通性分析等。 应用领域 全局固定阈值分割常用于具有清晰目标和背景对比度的图像例如二值化处理、物体检测等。
虽然全局固定阈值分割简单易用但对于光照不均匀、目标与背景差异不大的图像效果可能不佳。在这种情况下可能需要采用自适应阈值分割方法或其他更复杂的图像分割技术。
全局固定阈值分割的实验代码
/*************************************************************************** \函数名称* RegionSegFixThreshold()** \输入参数:* CDib * pDib - 指向CDib类的指针含有原始图象信息* int nThreshold - 区域分割的阈值** \返回值:* 无** \说明:* 1逻辑表示对应象素为前景区域0表示背景* 阈值分割的关键问题在于阈值的选取。阈值的选取一般应该视实际的应用而* 灵活设定。***************************************************************************/
void RegionSegFixThreshold(CDib * pDib, int nThreshold)
{//遍历图象的纵坐标int y;//遍历图象的横坐标int x;//图象的长宽大小CSize sizeImage pDib-GetDimensions();int nWidth sizeImage.cx ;int nHeight sizeImage.cy ;//图像在计算机在存储中的实际大小CSize sizeImageSave pDib-GetDibSaveDim();//图像在内存中每一行象素占用的实际空间int nSaveWidth sizeImageSave.cx;//图像数据的指针LPBYTE pImageData pDib-m_lpImage;for(y0; ynHeight ; y )for(x0; xnWidth ; x ){if( *(pImageDatay*nSaveWidthx) nThreshold)*(pImageDatay*nSaveWidthx) 0;else*(pImageDatay*nSaveWidthx) 255;}
}全局固定阈值分割的实验现象 二、自适应阈值分割
自适应阈值分割的实验原理
自适应阈值分割是一种根据图像局部特性确定阈值的方法通常用于解决图像中灰度变化较大的情况。自适应阈值分割方法考虑图像中不同区域的灰度分布差异根据局部信息确定每个像素的阈值。
以下是一些常见的自适应阈值分割方法 局部均值法Local Mean Method 对于每个像素使用其邻域的平均灰度值作为阈值。这样可以适应图像中灰度变化较慢的区域。 局部中值法Local Median Method 对于每个像素使用其邻域的中值作为阈值。对于一些包含噪声的图像中值法相对于均值法更具鲁棒性。 局部方差法Local Variance Method 使用每个像素邻域的灰度方差作为阈值。适用于图像中包含有纹理或细节的区域。 Sauvola’s Method Sauvola提出的方法考虑了局部均值和局部方差通过权衡这两个因素来确定阈值。适用于具有不同光照条件的图像。 Niblack’s Method 类似于Sauvola的方法Niblack提出的方法使用局部均值和标准差来确定阈值。适用于具有强烈光照变化的图像。 Bernsen’s Method Bernsen的方法使用局部最大值和最小值之间的差异来确定阈值。对于具有大范围灰度变化的图像比较有效。
在实际应用中选择合适的自适应阈值分割方法取决于图像的特性以及分割任务的要求。这些方法的性能会受到图像噪声、光照条件和目标特性等因素的影响。因此需要根据具体情况进行调整和选择。
自适应阈值分割的实验代码
/*************************************************************************** \函数名称* RegionSegAdaptive()** \输入参数:* CDib * pDib - 指向CDib类的指针含有原始图象信息** \返回值:* 无** \说明:* 1逻辑表示对应象素为前景区域0表示背景* 阈值分割的关键问题在于阈值的选取。阈值的选取一般应该视实际的应用而* 灵活设定。本函数中阈值不是固定的而是根据图象象素的实际性质而设定的。* 这个函数把图像分成四个子图象然后计算每个子图象的均值根据均值设置阈值* 阈值只是应用在对应的子图象***************************************************************************/
void RegionSegAdaptive(CDib * pDib)
{//遍历图象的纵坐标int y;//遍历图象的横坐标int x;//图象的长宽大小CSize sizeImage pDib-GetDimensions();int nWidth sizeImage.cx ;int nHeight sizeImage.cy ;//图像在计算机在存储中的实际大小CSize sizeImageSave pDib-GetDibSaveDim();//图像在内存中每一行象素占用的实际空间int nSaveWidth sizeImageSave.cx;//图像数据的指针LPBYTE lpImage pDib-m_lpImage;// 局部阈值int nThd[2][2] ;// 子图象的平均值int nLocAvg ;// 对左上图像逐点扫描nLocAvg 0 ;// y方向for(y0; ynHeight/2 ; y ){// x方向for(x0; xnWidth/2 ; x ){nLocAvg lpImage[y*nSaveWidth x];}}// 计算均值nLocAvg / ( (nHeight/2) * (nWidth/2) ) ;// 设置阈值为子图象的平均值nThd[0][0] nLocAvg ;// 对左上图像逐点扫描进行分割// y方向for(y0; ynHeight/2 ; y ){// x方向for(x0; xnWidth/2 ; x ){if(lpImage[y*nSaveWidth x]nThd[0][0])lpImage[y*nSaveWidth x] 255 ;else{lpImage[y*nSaveWidth x] 0 ;}}}// // 对左下图像逐点扫描nLocAvg 0 ;// y方向for(ynHeight/2; ynHeight ; y ){// x方向for(x0; xnWidth/2 ; x ){nLocAvg lpImage[y*nSaveWidth x];}}// 计算均值nLocAvg / ( (nHeight - nHeight/2) * (nWidth/2) ) ;// 设置阈值为子图象的平均值nThd[1][0] nLocAvg ;// 对左下图像逐点扫描进行分割// y方向for(ynHeight/2; ynHeight ; y ){// x方向for(x0; xnWidth/2 ; x ){if(lpImage[y*nSaveWidth x]nThd[1][0])lpImage[y*nSaveWidth x] 255 ;else{lpImage[y*nSaveWidth x] 0 ;}}}// // 对右上图像逐点扫描nLocAvg 0 ;// y方向for(y0; ynHeight/2 ; y ){// x方向for(xnWidth/2; xnWidth ; x ){nLocAvg lpImage[y*nSaveWidth x];}}// 计算均值nLocAvg / ( (nHeight/2) * (nWidth - nWidth/2) ) ;// 设置阈值为子图象的平均值nThd[0][1] nLocAvg ;// 对右上图像逐点扫描进行分割// y方向for(y0; ynHeight/2 ; y ){// x方向for(xnWidth/2; xnWidth ; x ){if(lpImage[y*nSaveWidth x]nThd[0][1])lpImage[y*nSaveWidth x] 255 ;else{lpImage[y*nSaveWidth x] 0 ;}}}// // 对右下图像逐点扫描nLocAvg 0 ;// y方向for(ynHeight/2; ynHeight ; y ){// x方向for(xnWidth/2; xnWidth ; x ){nLocAvg lpImage[y*nSaveWidth x];}}// 计算均值nLocAvg / ( (nHeight - nHeight/2) * (nWidth - nWidth/2) ) ;// 设置阈值为子图象的平均值nThd[1][1] nLocAvg ;// 对右下图像逐点扫描进行分割// y方向for(ynHeight/2; ynHeight ; y ){// x方向for(xnWidth/2; xnWidth ; x ){if(lpImage[y*nSaveWidth x]nThd[1][1])lpImage[y*nSaveWidth x] 255 ;else{lpImage[y*nSaveWidth x] 0 ;}}}// 为了显示方便显示逻辑1用黑色显示逻辑0用白色显示for(y0; ynHeight ; y ){// x方向for(x0; xnWidth ; x ){lpImage[y*nSaveWidth x] 255 - lpImage[y*nSaveWidth x] ;}}
}自适应阈值分割的实验现象