灰度图像--图像分割 阈值处理之局部阈值

学习DIP第57天

转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

开篇废话

废话开始,今天说下区域阈值(局部阈值),前面介绍的阈值都是全局阈值,也就是阈值根据全局信息产生,而作用对象也是整幅图像的全部像素,而局部阈值的产生是一个中心像素c(x,y)的邻域的一些属性来计算出一个或多个阈值以及阈值的判别式。这句话比较难懂,举个例子,假设c的邻域R,根据邻域R计算出阈值T1,T2,T3.....Tn我们可以表示成向量T=(T1,T2,T3....Tn),设计阈值判别式Q(T,pixValue)其中pix_value的值就是像素c(x,y)的灰度值,判别式返回真假,真的话像素设置为亮,否则设置成暗。

算法内容

该算法的关键点在于设计判别式Q和计算阈值向量T,因为此算法的通用性不是很强,但优点是灵活性强,可以根据不同的图片性质来设计不同的执行方案,比如下面例子中使用最简单的两种统计学参数,均值和标准差,当中心像素大于均值的n倍并且大于标准差的m倍。设置窗口大小,也就是邻域大小,参数n,参数m,最后得到较好的阈值结果。

代码实现

/*局部阈值
 *使用均值和标准差作为判定依据
 *输入参数包括邻域大小,均值系数,以及标准差系数
 *
 *
 */
void LocalThreshold(double *src,double *dst,int width,int height,int w_size,double mean_param,double std_dev_param){
    double *temp=(double *)malloc(sizeof(double)*width*height);

    Zero(temp, width,height);
    double mean_g=matrixMean(src, width, height);
    for(int j=w_size/2;j<height-w_size/2;j++){
        for(int i=w_size/2;i<width-w_size/2;i++){
            double deta=0.0;
            double mean=0.0;
            double pix_value=src[j*width+i];
            //local mean
            for(int m=-w_size/2;m<w_size/2+1;m++){
                for(int n=-w_size/2;n<w_size/2+1;n++){
                    mean+=src[(j+m)*width+i+n];
                }
            }
            mean/=(double)(w_size*w_size);
            //local deta
            for(int m=-w_size/2;m<w_size/2+1;m++){
                for(int n=-w_size/2;n<w_size/2+1;n++){
                    deta+=(src[(j+m)*width+i+n]-mean)*(src[(j+m)*width+i+n]-mean);
                }
            }

            deta/=(double)(w_size*w_size);
            deta=sqrt(deta);
            if(pix_value>mean_param*mean_g&&pix_value>std_dev_param*deta){
                temp[j*width+i]=255.0;
            }
        }
    }
    matrixCopy(temp, dst, width, height);
    free(temp);
}

算法效果

总结

相比于全局阈值,局部阈值对目标大小,以及噪声敏感度强,但其缺点是设计针对性强,没有什么通用的算法,而且输入的参数多半需要分析实验产生,不能实现自动阈值处理,其优点是功能强大。

待续。。。

时间: 2024-10-10 03:09:20

灰度图像--图像分割 阈值处理之局部阈值的相关文章

灰度图像--图像分割 阈值处理综述

学习DIP第51天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro 开篇废话 新年第一篇博客,图像分割进行到阈值处理,前面学的边缘检测,然后将边缘连接起来,达到分割区域的目的,用到的基础原理是图像灰度的变化,而阈值处理用到的是阈值的不变,也就是把具有相同或相似的灰度的一类像素定义为一个区域,根据这个特点来定义并区分一

灰度图像--图像分割 阈值处理之补充说明

学习DIP第56天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro 开篇废话 在前面的介绍中,说到过,影响阈值处理的两个主要问题是目标和背景的大小关系,和噪声对目标的影响,补充说明就是来解决下这两个问题. 算法原理 首先来解决噪声影响,在图像增强的时候提到过,低通滤波和平滑能够减少图像噪声,通过减少噪声,可以一定程度

灰度图像--图像分割 阈值处理之平均阈值

学习DIP第52天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro 开篇废话 好久没写博客了,已然不熟练了,过完年整个人都不好了,哈哈,到刚才为止算是把图像分割学习了一下,这两天把学习结果和代码简单总结一下. 前面已经介绍了边缘检测,和边缘修复,阈值处理的基本概念也进行了一定介绍.阈值处理速度快,算法简单,所以应用比

灰度图像--图像分割 阈值处理之谷底阈值、峰顶平均

学习DIP第54天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro 开篇废话 废话开始,这篇介绍两种基于直方图的方法,前面介绍的几种阈值处理方法,可以使用直方图作为处理工具,也可以不使用直方图,直接操作图像也可以,不过建议使用直方图,因为直方图只进行一次计算,免去后续多次的访问全图像素. 今天介绍的算法有意个前提条件

灰度图像--图像分割 阈值处理之P-Tile阈值

学习DIP第53天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro 开篇废话 废话不多说,因为刚才(上一篇)已经说过了,p-tile可能听起来挺可怕,没关系,说个它的对象–中位数,这个都知道吧,数值排排站,然后选出中间那个,或者说,假如数据一共有N个,那么中位数就是排在第N?0.5的那个数:p位数,也叫p分位,可以理

灰度图像--图像分割 综合介绍

学习DIP第40天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

灰度图像--图像分割 Canny边缘检测

学习DIP第48天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发: https://github.com/Tony-Tan/DIPpro 开篇废话 废话开始,Canny大名鼎鼎,大家都称之为Canny算子,包括wiki上也是写的Canny detector,但是按照我的理解,我觉得叫做Canny算法比较合适,但如果叫做算子,那也应该叫做复合算子,因为Canny本身并不是一个线性模板(

灰度图像--图像分割 Robert算子

学习DIP第43天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

灰度图像--图像分割 Marr-Hildreth算子(LoG算子)

学习DIP第49天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发: https://github.com/Tony-Tan/DIPpro 开篇废话 今天介绍二阶微分算子,二阶微分算子典型的是Laplace算子,LoG可以看成是一个高斯模板的拉普拉斯变换,但是也可以从根源上推导出LoG算子,而后面要介绍的DoG则是为了纯粹的减少计算,模拟LoG的一种方法. LoG原理 LoG最底层的原