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

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

开篇废话

废话不多说,因为刚才(上一篇)已经说过了,p-tile可能听起来挺可怕,没关系,说个它的对象–中位数,这个都知道吧,数值排排站,然后选出中间那个,或者说,假如数据一共有N个,那么中位数就是排在第 N0.5 的那个数;p位数,也叫p分位,可以理解为数值排排站以后第 Np 的那个数。

p-tile均值

根据上面对p分位的理解,可以看出这个阈值处理方法是半自动的方法,也就是阈值的生成需要人工控制,就是要手动输入p分位的p,下面代码中p取值 (0,1]

代码

/*********************************************************************************/
/*********************************************************************************/
//阈值法,p分位法
//p分位为统计学方法
//当p为0.5时为中位数
void PtileThreshold(double *src,double *dst,double p_value,int width,int height,int type){/*0<p_value<1*/
    int total_pix_count=width*height;
    int pix_count=0;
    int hist[GRAY_LEVEL];
    double threshold_value=0.0;
    InitHistogram(hist);
    setHistogram(src, hist, width,height);
    for(int i=0;i<GRAY_LEVEL;i++){
        pix_count+=hist[i];
        if(pix_count>=(int)((double)total_pix_count*p_value)){
            threshold_value=(double)i;
            break;
        }
    }
    Threshold(src,dst, width, height, threshold_value,type);
}

效果

原图一个只有两个灰度值的图像,这里使用对其加入5%的高斯噪声,
未处理图像:

灰度图像--图像分割 阈值处理之P-Tile阈值_第1张图片

未处理时的直方图:

灰度图像--图像分割 阈值处理之P-Tile阈值_第2张图片

观察直方图,估计出最佳阈值位置:

灰度图像--图像分割 阈值处理之P-Tile阈值_第3张图片
下面使用不同的p值来测试结果:
灰度图像--图像分割 阈值处理之P-Tile阈值_第4张图片
灰度图像--图像分割 阈值处理之P-Tile阈值_第5张图片
灰度图像--图像分割 阈值处理之P-Tile阈值_第6张图片
灰度图像--图像分割 阈值处理之P-Tile阈值_第7张图片

可以看出,第二次(我试了好久。。。。。)测试结果能够得出最好结果。

lena图处理测试:



灰度图像--图像分割 阈值处理之P-Tile阈值_第8张图片
灰度图像--图像分割 阈值处理之P-Tile阈值_第9张图片

总结

首先确定p值需要经验或实验,所以P-Tile方法应用于自适应有些困难,其次,影响处理结果的因素是目标与背景大小的比例,目标过大背景过小或者背景过大目标过小,都会对测试结果产生很大影响,其次是噪声,噪声也会对实验结果产生影响。
待续。。。

你可能感兴趣的:(图像处理,阈值处理,p-tile)