灰度图像--图像分割 阈值处理之补充说明
2015-03-08 19:00
211 查看
学习DIP第56天
转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro
加入11%的高斯噪声的图像直方图:
![](http://img.blog.csdn.net/20150308182457479)
使用高斯滤波器进行平滑后的直方图:
![](http://img.blog.csdn.net/20150308182533827)
但是对于相对较小的目标,直方图上基本看不出目标和背景的差别:
原图:
![](http://img.blog.csdn.net/20150308183257726)
直方图:
![](http://img.blog.csdn.net/20150308183149507)
我们的方法是使用边缘处理结果边缘作为Mask,得到Mask为1的原图处的灰度值,有这些灰度值做直方图,可以得到下面:
![](http://img.blog.csdn.net/20150308183446505)
可以看到相对明显的边界,值得注意的是,这里选取边界的算法一定选用检测结果是外边界和内边界结合的边缘图像。所以我们选用Sobel算子进行边缘检测,边缘检测后的阈值处理(对边缘结果的阈值处理)。最后对Mask出来的灰度集合进行OTSU阈值计算,得出最终结果。
![](http://img.blog.csdn.net/20150308184139999)
边缘检测后的直方图:
![](http://img.blog.csdn.net/20150308184108940)
处理结果:
![](http://img.blog.csdn.net/20150308185119275)
原图,加入7%的高斯噪声
![](http://img.blog.csdn.net/20150308185052225)
边缘检测的直方图:
![](http://img.blog.csdn.net/20150308185222892)
处理结果:
![](http://img.blog.csdn.net/20150308185237103)
平滑后的阈值处理:
加入11%的高斯噪声的图像,平滑后进行阈值处理:
![](http://img.blog.csdn.net/20150308185619045)
原图直方图:
![](http://img.blog.csdn.net/20150308185447349)
平滑后直方图:
![](http://img.blog.csdn.net/20150308185637843)
待续。。。
转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro
开篇废话
在前面的介绍中,说到过,影响阈值处理的两个主要问题是目标和背景的大小关系,和噪声对目标的影响,补充说明就是来解决下这两个问题。算法原理
首先来解决噪声影响,在图像增强的时候提到过,低通滤波和平滑能够减少图像噪声,通过减少噪声,可以一定程度上提高阈值处理的结果。例如未去噪的时候直方图如下:加入11%的高斯噪声的图像直方图:
使用高斯滤波器进行平滑后的直方图:
但是对于相对较小的目标,直方图上基本看不出目标和背景的差别:
原图:
直方图:
我们的方法是使用边缘处理结果边缘作为Mask,得到Mask为1的原图处的灰度值,有这些灰度值做直方图,可以得到下面:
可以看到相对明显的边界,值得注意的是,这里选取边界的算法一定选用检测结果是外边界和内边界结合的边缘图像。所以我们选用Sobel算子进行边缘检测,边缘检测后的阈值处理(对边缘结果的阈值处理)。最后对Mask出来的灰度集合进行OTSU阈值计算,得出最终结果。
代码
上代码[code]/*对于小目标物体 *使用边缘检测结果作为MASK *得到MASK为1处的原图灰度集合 *对这个集合做阈值分割 *的到最终的结果 */ void SobelThreshold(double *src,double *dst,int width,int height,double sobel_threshold,int type){ double *mask=(double *)malloc(sizeof(double)*width*height); double *temp=(double *)malloc(sizeof(double)*width*height); //use 0.05*width and 0.05*height gaussian mask smooth src GaussianFilter(src, temp, width, height, width/25,height/25, (double)width/150.); double max=Sobel(temp, mask, NULL, width, height, 5); Threshold(mask, mask, width, height, max*sobel_threshold, THRESHOLD_TYPE3); /////////////////////////////////////////////////////////////////////////// int hist[GRAY_LEVEL]; double hist_d[GRAY_LEVEL]; InitHistogram(hist); for(int i=0;i<width*height;i++) if(mask[i]!=0.0) hist[(int)src[i]]++; Hist_int2double(hist, hist_d); setHist2One(hist_d, hist_d); double threshold=findMaxDeta(hist_d);// printf("Threshold:%g \n",threshold); Threshold(src, dst, width, height, threshold, type); free(mask); free(temp); }
结果分析
原图,加入3%的高斯噪声边缘检测后的直方图:
处理结果:
原图,加入7%的高斯噪声
边缘检测的直方图:
处理结果:
平滑后的阈值处理:
加入11%的高斯噪声的图像,平滑后进行阈值处理:
原图直方图:
平滑后直方图:
总结
为了解决前面所说的两个影响阈值处理的两个重要因素,提出的两种解决方法,也可以使用局部阈值或者可变阈值进行处理。待续。。。
相关文章推荐
- 数字图像处理补充说明
- 灰度图像--图像分割 阈值处理之迭代均值阈值
- 灰度图像--图像分割 阈值处理之局部阈值
- 灰度图像--图像分割 阈值处理之谷底阈值、峰顶平均
- 灰度图像--图像分割 阈值处理之P-Tile阈值
- 在DataGrid(WebControl)中处理DropDownList事件的补充说明
- 图像处理——白平衡(灰度世界方法)
- 灰度图像像素颜色亮度处理
- 数字图像处理基本算法实现(1)--section3.2基本灰度变换
- VC6.0图像处理3--灰度变换
- CxImage图像灰度处理简述
- 图像处理之特殊灰度算法技巧
- Delphi图像处理 -- 灰度化和灰度直方图
- 处理2D图像和纹理——扩展图像内容处理器:灰度变换和处理器参数
- 数字图像处理---图像空间域变化--灰度变化
- VC6.0图像处理3--灰度变换
- 数据挖掘十大算法-Kmeans图像灰度处理应用(C# code)
- 图形图像处理-之-任意角度的高质量的快速的图像旋转 下篇 补充话题
- 图形图像处理-之-任意角度的高质量的快速的图像旋转 下篇 补充话题
- Java图像处理技巧四则-剪切,缩放,灰度变换,彩色变换