自适应阈值分割

最大方差阈值分割法在分割过程中对图像上每个像素都是用了相等的阈值,但在实际的情况中,当照明不均匀,有突发噪声或
 
者背景灰度变化较大时,整幅图像分割时将没有合适的单一阈值,如果仍采用单一的阈值去处理每一个像素,可能会将目标区
 
域和背景区域错误的划分,因此,诞生了自适应阈值分割的思想,即图像中的每个像素对应的阈值可能不相同。
 
一个较为简单的自适应阈值选取方法是:每个像素的阈值由自身为中心的邻域窗口确定,把中值 均值 或者高斯卷积作为阈
 
值,再或者在此基础上加个常量值等等。
 
下面代码由OPENCV实现
 
有两种自动化阈值方式1. CV_BLUR 均值
 
                                      2. CV_GUASSIA 高斯
 
/* 
    函数 : my_AdaptiveThreshold 
    参数:Src 源图像
             Dst 目的图像
             method --- 中值滤波CV_BLUR 
                                  高斯滤波CV_GAUSSIAN
             type --- 二值化类型 THRESH_BINARY CV_THRESH_BINARY_INV
             blocksize -- 核大小
             delta ---- 差值 src - mean
     功能 : 自动化阈值分割
     限制 : 8 位灰度图

*/

void my_AdaptiveThreshold(IplImage * Src,IplImage *Dst , int method, int type , int blocksize, int delta )
{

    IplImage * mean = cvCreateImage(cvGetSize(Src),Src - >depth,Src - >nChannels);

    cvSmooth(Src ,mean , method ,blocksize,blocksize );

     for ( int i = 0 ; i < Src - >height ; ++i)
    {
          unsigned char * usrc =( unsigned char *) Src - >imageData + i * Src - >widthStep ; 
          unsigned char * umean =( unsigned char *) mean - >imageData + i * mean - >widthStep ;
          unsigned char * udst =( unsigned char *) Dst - >imageData + i * Dst - >widthStep;
         for ( int j = 0 ; j < Src - >width ; ++j)
        {
             if (type ==CV_THRESH_BINARY )
                udst[j] = (usrc[j] - umean[j]) > = delta ? 255 : 0
             else if (type == CV_THRESH_BINARY_INV)
                udst[j] = (usrc[j] - umean[j]) > = delta ? 0 : 255
        }
    }

    cvReleaseImage( &mean);
}





转载于:https://www.cnblogs.com/xiaomaLV2/archive/2011/11/30/2268692.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值