灰度图像--图像分割 区域分割之区域分离

学习DIP第59天

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

开篇废话

废话开始,今天本来只想写一篇,但晚上觉得还是快把区域分割简单介绍下,后面开始彩色图像类的知识学习和代码实现,下一篇介绍分水岭算法,这才是个头疼的算法,今天的区域分离(合并)相对比较好理解。

算法原理

首先本算法依然是基于区域的,用到的区域的性质是区域的均值和标准差,简单描述算法,如果一个区域满足设定的均值范围和标准差范围,设置整个区域为亮,否则将次区域分为四份,每一份继续递归进行,直至预先设定的最小区域。

从结构来讲可以抽象成一颗四叉树:

算法最核心的是设计一个判别式,上面说的判别式是均值和均方的联合,也可以使用其他判别式,根据实际情况可以具体设计。

算法:

  1. 初始化,输入参数,包括均值上下界m1,m2,标准差上下界d1,d2
  2. 计算区域均值和标准差,如果满足条件,输出对应设置为亮 否者将区域分为四份
  3. 将其中一份带入步骤2递归进行计算
  4. 如果区域分割小于设定的最小值结束递归。

代码

/*******************************************************************************/
/*
 *区域分割算法,递归进行判断
 *如果区域不符合条件,将区域
 *分为四份,递归判断每个区域
 *知道区域分为最小设定值
 */

void findSplitRegion(double *src,double *dst,int width,int height,int x,int y,int w_width,int w_height,double mean_param1,double mean_param2,double variance_param1,double variance_param2){
    double mean=RegionMean(src, width, height, x, y, w_width, w_height);
    double variance=RegionStdDeviation(src, width, height, x, y, w_width, w_height);
    if(mean>mean_param1&&
       mean<=mean_param2&&
       variance>variance_param1&&
       variance<=variance_param2){
        RegionSetOne(dst, width, height, x, y, w_width, w_height);
    }else{
#define MINIMAL_CELL 3
        if(w_width>=MINIMAL_CELL&&w_height>=MINIMAL_CELL){
            findSplitRegion(src, dst, width,height, x, y, w_width/2+1, w_height/2+1, mean_param1, mean_param2, variance_param1, variance_param2);
            findSplitRegion(src, dst, width,height, x+w_width/2, y, w_width/2+1, w_height/2+1, mean_param1, mean_param2, variance_param1, variance_param2);
            findSplitRegion(src, dst, width,height, x+w_width/2, y+w_height/2+1, w_width/2+1, w_height/2, mean_param1, mean_param2, variance_param1, variance_param2);
            findSplitRegion(src, dst, width,height, x, y+w_height/2, w_width/2+1, w_height/2+1, mean_param1, mean_param2, variance_param1, variance_param2);
        }
    }
}

void RegionSplit(double *src,double *dst,int width,int height,double mean_param1,double mean_param2,double variance_param1,double variance_param2){
    double *dsttemp=(double *)malloc(sizeof(double)*width*height);
    findSplitRegion(src, dsttemp, width, height, 0,0, width, height, mean_param1, mean_param2, variance_param1,variance_param2);
    matrixCopy(dsttemp, dst, width, height);
    free(dsttemp);

}

实验结果

原图:

想要分离周围的星云,参数见图中标注:

原图:

同样分离周围的星云,参数见图中标注:

总结

此算法运行速度很快,但精确度不够高,因为设置的最小区域值决定了区域分割的准确性,所以会有锯齿状的边缘,这是一个缺点。

待续。。。

时间: 2024-10-09 08:30:56

灰度图像--图像分割 区域分割之区域分离的相关文章

灰度图像--图像分割 区域分割之区域生长

学习DIP第58天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro 开篇废话 继续说废话,昨天写博客被同事看到了,问我,为什么你每一篇开始都是废话,我说凑字数,在一个可以写点轻松的话,天天在算法的海洋里飘荡,偶尔说几句荒山野岭的废话也算活跃气氛了. 区域分割介绍 今天介绍基于区域的分割方法,前面基于阈值的分割方法暂时

灰度图像--图像分割 区域分割之分水岭算法

学习DIP第60天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro 开篇废话 今天已经是第60篇博客了,这六十篇每一篇平均要两天左右,所以,在过去的四个月学到了这么多知识,想想挺开心,但学的越多就会发现自己不会的越多.从小学到大学,这么多年一直以学习为主要工作但学习又有很多阶段,对于通用知识,比如小学的语文数学此观点

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

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

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

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

灰度图像--图像分割 边缘模型

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

灰度图像--图像分割 霍夫变换(Hough Transform)--直线

学习DIP第50天 转载请标明本文出处: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本身并不是一个线性模板(

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

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

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

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