运动分割图像处理_数字图像处理分割中运动的应用 - CSDN
  • 运动图像分割

    2016-08-16 09:57:05
     最近在继续看《数字图像处理》,发现上面一个分割运动图像的案例,用简单的代码实现,并整理了出来。 原理介绍  该方式主要是用在监控上面,用来处理在监控画面中运动的物体。原理可以大致为比较同一位置...

    原文地址:http://blog.csdn.net/u011630458/article/details/50506473

    简介

      最近在继续看《数字图像处理》,发现上面一个分割运动图像的案例,用简单的代码实现,并整理了出来。
    

    原理介绍

      该方式主要是用在监控上面,用来处理在监控画面中运动的物体。原理可以大致为比较同一位置拍摄的两张图片之间各个像素像素差,根据像素差
    大小来判断是否该位置为移动物体:
      具体公式如下:
          
      书中的具体效果如下:
         
      注意:该方式局限性比较大,被处理的拍摄图像最好是保持相对光照恒定和做了图像配准的。
    

    实现

    具体代码

    1. #include <opencv2/opencv.hpp>  
    2. #include <stdio.h>  
    3. #include "opencv2/video/background_segm.hpp"  
    4. #include "opencv2/core/core.hpp"  
    5. #include "opencv2/video/background_segm.hpp"  
    6. #include "opencv2/imgproc/imgproc_c.h"  
    7. #include "opencv2/highgui/highgui.hpp"  
    8. #include "opencv2/legacy/legacy.hpp"  
    9.    
    10. using namespace cv;  
    11. using namespace std;  
    12.    
    13. Mat src1, src2, src3;  
    14. Mat picMask1, picMask2, dst;  
    15. int width, height;  
    16. int curThreshold = 10;  
    17.    
    18. int cutSport(void){  
    19.     int i, j;  
    20.     IplImage ipI1, ipI2, ipI3, ipImask1, ipImask2, ipIdst;  
    21.     CvScalar s1, s2, s3;  
    22.    
    23.     picMask1 =  Mat(width, height, CV_8UC1, cv::Scalar(0,0,0));    
    24.     picMask2 =  Mat(width, height, CV_8UC1, cv::Scalar(0,0,0));    
    25.     dst =  Mat(width, height, CV_8UC1, cv::Scalar(0,0,0));    
    26.     ipI1 = src1;  
    27.     ipI2 = src2;  
    28.     ipI3 = src3;  
    29.     ipIdst = dst;  
    30.     ipImask1 = picMask1;  
    31.     ipImask2 = picMask2;  
    32.    
    33.     for(i=1; i<width-1; i++){  
    34.         for(j=1; j<height-1; j++){  
    35.             s1 = cvGet2D(&ipI1, i, j);  
    36.             s2 = cvGet2D(&ipI2, i, j);  
    37.             s3 = cvGet2D(&ipI3, i, j);  
    38.    
    39.             if(abs(s1.val[0] - s3.val[0]) > curThreshold){  
    40.                 s1.val[0] = 255;  
    41.                 cvSet2D(&ipImask1, i, j, s1);  
    42.             }  
    43.             if(abs(s2.val[0] - s3.val[0]) > curThreshold){  
    44.                 s1.val[0] = 255;  
    45.                 cvSet2D(&ipImask2, i, j, s1);  
    46.             }  
    47.         }  
    48.     }  
    49.     cvSegmentFGMask(&ipImask1);  
    50.     cvSegmentFGMask(&ipImask2);  
    51.    
    52.     for(i=1; i<width-1; i++){  
    53.         for(j=1; j<height-1; j++){  
    54.    
    55.             s1 = cvGet2D(&ipImask1, i, j);  
    56.             s3 = cvGet2D(&ipI1, i, j);  
    57.             if(s1.val[0] == 255){  
    58.                 s1.val[0] = s3.val[0];  
    59.                 cvSet2D(&ipIdst, i, j, s1);  
    60.             }  
    61.                
    62.             s2 = cvGet2D(&ipImask2, i, j);  
    63.             s3 = cvGet2D(&ipI2, i, j);  
    64.             if(s2.val[0] == 255){  
    65.                 s2.val[0] = s3.val[0];  
    66.                 cvSet2D(&ipIdst, i, j, s2);  
    67.             }  
    68.    
    69.             if((s1.val[0] == 0) && (s2.val[0] == 0)){  
    70.                 s1 = cvGet2D(&ipI3, i, j);  
    71.                 cvSet2D(&ipIdst, i, j, s1);  
    72.             }  
    73.         }  
    74.     }  
    75.     return 0;  
    76. }  
    77.    
    78. int main(int argc, char* argv[]){  
    79.     if(argc < 4){  
    80.         printf("Please input pic1 / pic2 / pic3!\n");  
    81.         return -1;  
    82.     }  
    83.     src1 = imread(argv[1], 0);  
    84.     src2 = imread(argv[2], 0);  
    85.     src3 = imread(argv[3], 0);  
    86.     height = src1.cols;  
    87.     width = src1.rows;  
    88.     cutSport();  
    89.     imshow("src1", src1);  
    90.     imshow("src2", src2);  
    91.     imshow("src3", src3);  
    92.     imshow("dst", dst);  
    93.     imshow("mask1", picMask1);  
    94.     imshow("mask2", picMask2);  
    95.    
    96.     waitKey(0);  
    97.     return 0;  
    98. }  

    代码讲解

      1、准备三张图片,一张没有运动物体的模板图片,两张运动物体位置不一样的图片。
    打开三张图片,并调用函数cutSport处理,最后将原图片,结果图片和两张掩码图片都显示出来。
    1. src1 = imread(argv[1], 0);  
    2. src2 = imread(argv[2], 0);  
    3. src3 = imread(argv[3], 0);  
    4. height = src1.cols;  
    5. width = src1.rows;  
    6. cutSport();  
    7. imshow("src1", src1);  
    8. imshow("src2", src2);  
    9. imshow("src3", src3);  
    10. imshow("dst", dst);  
    11. imshow("mask1", picMask1);  
    12. imshow("mask2", picMask2);  
      2、在cutSport函数中,首先创建两张一样大小的掩码图片,像素全部设置为0。然后根据之前公式,分别对比两张运动图像和模板图像的差异,并将结果保存在两张掩码图片中。
    1. picMask1 =  Mat(width, height, CV_8UC1, cv::Scalar(0,0,0));    
    2. picMask2 =  Mat(width, height, CV_8UC1, cv::Scalar(0,0,0));    
    3.    
    4. for(i=1; i<width-1; i++){  
    5.     for(j=1; j<height-1; j++){  
    6.         s1 = cvGet2D(&ipI1, i, j);  
    7.         s2 = cvGet2D(&ipI2, i, j);  
    8.         s3 = cvGet2D(&ipI3, i, j);  
    9.    
    10.         if(abs(s1.val[0] - s3.val[0]) > curThreshold){  
    11.             s1.val[0] = 255;  
    12.             cvSet2D(&ipImask1, i, j, s1);  
    13.         }  
    14.         if(abs(s2.val[0] - s3.val[0]) > curThreshold){  
    15.             s1.val[0] = 255;  
    16.             cvSet2D(&ipImask2, i, j, s1);  
    17.         }  
    18.     }  
    19. }  
      3、对两个掩码结果做连通域分割处理。
    1. cvSegmentFGMask(&ipImask1);  
    2. cvSegmentFGMask(&ipImask2);  
      4、利用处理后的掩码图像,分别将两张运动图像的运动物体,都复制到模板图片中去,形成结果图像。
    1. for(i=1; i<width-1; i++){  
    2.     for(j=1; j<height-1; j++){  
    3.    
    4.         s1 = cvGet2D(&ipImask1, i, j);  
    5.         s3 = cvGet2D(&ipI1, i, j);  
    6.         if(s1.val[0] == 255){  
    7.             s1.val[0] = s3.val[0];  
    8.             cvSet2D(&ipIdst, i, j, s1);  
    9.         }  
    10.            
    11.         s2 = cvGet2D(&ipImask2, i, j);  
    12.         s3 = cvGet2D(&ipI2, i, j);  
    13.         if(s2.val[0] == 255){  
    14.             s2.val[0] = s3.val[0];  
    15.             cvSet2D(&ipIdst, i, j, s2);  
    16.         }  
    17.    
    18.         if((s1.val[0] == 0) && (s2.val[0] == 0)){  
    19.             s1 = cvGet2D(&ipI3, i, j);  
    20.             cvSet2D(&ipIdst, i, j, s1);  
    21.         }  
    22.     }  
    23. }  

    结果显示

      显示的结果如下:
    

           模板图像                         运动图像1                            运动图像2
    

            掩码图像1                              掩码图像2                      结果图像

    展开全文
  • (1)基于阈值的分割方法:可在各种颜色空间或不同通道中完成阈值、自适应阈值、 (2)基于边缘的分割方法:各种边缘检测算子 (3)基于区域的分割方法:分水岭、区域归并与分裂 (4)图割分割:最大流(最小割)...
    (1)基于阈值的分割方法:可在各种颜色空间或不同通道中完成阈值、自适应阈值、
    (2)基于边缘的分割方法:各种边缘检测算子
    (3)基于区域的分割方法:分水岭、区域归并与分裂
    (4)图割分割:最大流(最小割)算法
    (5)基于深度信息的分割:

    (6)基于先验信息的分割:


    个人认为图像分割的算法可以从分割目标入手:通常是要将图像分成目标区域和背景。需要从图像的特征入手,以灰度图像为例(其余类型的图像处理均类似),图像图形很明显的特征有:图像灰度值特征、目标边界特征、纹理特征、形态学特征等等;还有一些基于这些特征所计算提取出的特征,比如信息熵、能量泛函等等。

    最为简单的就是灰度值特征了,一幅图中有时候目标区域与背景区域有很明显的亮度区别,基于这个认识,只要试图找到某个亮度的值,我们假设低于该值的认为是背景,高于该值的认为是目标。关于找这个值的算法就是阈值分割算法了,像OTSU、迭代法、最大熵法等等都是属于这一范畴。

    同时也可以注意到,在空域内,目标的边界是区分目标与背景的重要依据,因此区分边界也是一个重要的手段,通常边界点周围灰度值变化率很高,因此可以基于图像灰度梯度来识别。这就有一些sobel算子、canny算子等等方式,都是通过找到边界来确定目标区域与背景的。

    在有些图像中,目标区域具有一定的连续性,基于区域连续性的一些方法像区域生长法、分水岭算法等(本人对这一块不是很熟悉)。

    另外,基于图像原始的特征进行提取获得“精炼”的二级特征,并据此分割也是一种好的方法。像SNAKE算法,该算法认为目标区域的边界是“外力”,内力共同作用的结果,因此当外力内力平衡时找到边界,基于这种平衡,提出了判断能量泛函最小的判断原则。此外,还有基于几何活动轮廓模型的水平集方法,该方法是借助于目标区域的几何度量参数,可以比较好的处理一些拓扑变化。


    这里主要简单介绍几类经典的方法:


    基于边缘检测的方法
    基于边缘检测的方法主要是通过检测出区域的边缘来进行分割,利用区域之间特征的不一致性,首先检测图像中的边缘点,然后按一定策略连接成闭合的曲线,从而构成分割区域图像中的边缘通常是灰度、颜色或纹理等性质不连续的地方。对于边缘的检测,经常需要借助边缘检测算子来进行,其中常用的边缘检测算子包括[3]:Roberts 算子、Laplace 算子、Prewitt 算子、Sobel 算子、Rosonfeld算子、Kirsch 算子以及Canny 算子等。
    边缘检测算法比较适合边缘灰度值过渡比较显著且噪声较小的简单图像的分割。对于边缘比较复杂以及存在较强噪声的图像,则面临抗噪性和检测精度的矛盾。若提高检测精度,则噪声产生的伪边缘会导致不合理的轮廓:若提高抗噪性,则会产生轮廓漏检和位置偏差[4]。


    阈值分割方法
    阈值分割是最古老的分割技术,也是最简单实用的。许多情况下,图像中目标区域与背景区域或者说不同区域之间其灰度值存在差异,此时可以将灰度的均一性作为依据进行分割[3]。阈值分割即通过一个或几个阈值将图像分割成不同的区域。阈值分割方法的核心在于如何寻找适当的阈值。最常用的阈值方法是基于灰度直方图的方法,如最大类间方差法(OTSU)[5]、最小误差法、最大熵法等。此类方法通常对整幅图像使用固定的全局阈值,如果图像中有阴影或亮度分布不均等现象,分割效果会受到影响。基于局部阈值的分割方法对图像中的不同区域采用不同的阈值,相对于全局阈值方法具有更好的分割效果[6],该方法又称为自适应阈值方法。其中阈值的选取一般是基于图像的局部统计信息,如局部方差[7]、局部对比度[8]以及曲面拟合阈值[9]等。无论是基于全局阈值还是局部阈值,阈值方法通常受噪声影响较大。为了得到较好的分割结果,通常还需要与其他图像处理技术,如图像去噪等相结合。



    基于聚类的分割方法
    聚类分析是多元统计分析的方法之一,也是模式识别中非监督模式识别的一个重要分支。根据数据集合的内部结构将其分成不同的类别,使得同一类内样本的特征尽可能相似,而属于不同类别的样本点的差异尽可能大。聚类分析技术大致上可分为硬聚类、模糊聚类与可能性聚类方法[10]。

    硬聚类方法中,样本点归属于不同类别的隶属度函数取值为0 或1,即每个样本只可能属于某一特定的类别。传统的硬聚类方法包括k 均值聚类[11]以及ISODATA[12等。模糊聚类方法是一种基于目标函数迭代优化的无监督聚类方法,样本点的隶属度函数取值为区间[0, 1],同时每个样本点对各类的隶属度之和为1,即认为样本点对每个聚类均有一个隶属度关系,允许样本点以不同的模糊隶属度函数同时归属于所有聚类。模糊聚类方法的软性划分,真实地反映了图像的模糊性和不确定性,因此其性能优于传统的硬分割方法。目前模糊聚类方法已经广泛应用于图像处理特别是医学图像处理中,其中最常用的是模糊C 均值聚类方法(FCM)[13,14]。可能性聚类样本点的隶属度函数同样取值为区间[0, 1],但其不要求隶属度之和为1。可能性聚类不仅顾及到样本与聚类中心的隶属度关系,同时考虑了样本的典型性对分类结果的影响。 传统的聚类算法没有考虑图像的空间信息,因此其对噪声与灰度分布不均非常敏感。为提高模糊聚类算法在图像分割中的效果,国内外学者提出了很多改进方法,其中结合空间信息是最常见的方法[15--24]。


    活动轮廓方法

    活动轮廓方法(又称为Snake 模型)是Kass等人[25]于1987 年提出的,活动轮廓即定义在图像域的曲线或者曲面,在与自身几何特性相关的内力以及图像数据相关的外力共同作用下,以最小化能量函数的形式向边界运动。经过二十多年的发展,活动轮廓模型已经在边缘检测、图像分割以及运动跟踪中得到了广泛的应用[26,27]。

    按照曲线的表达方式的不同,活动轮廓模型大致可以分为两大类:参数活动轮廓模型和几何活动轮廓模型。参数活动轮廓模型采用参数化的形式直接描述活动轮廓曲线,轮廓曲线由一些规则排列的不连续的点(也称snaxels) 组成或通过一些基函数将其描述成一种连续的参数形式。由于参数活动轮廓方法都是显式的表示曲线,因此便于引入先验形状约束[28],同时有利于人机交互[27]。其缺点在于不能自适应的改变曲线的拓扑结构,难以处理曲线的分裂与合并;同时作为一种局部性方法,其最终分割结果严重依赖于初始位置。此外,轮廓曲线在演化过程中很难精确模拟复杂的边界,如深度凹陷的边界。Xu等人[29]提出梯度矢量流(GVF)Snake 方法,利用梯度矢量流来代替传统外力场,由于GVF 的作用范围比传统的Snake 模型大,能够促使轮廓曲线进入目标物体的凹陷部分,因此其在一定程度上克服了参数活动轮廓方法易于陷入局部能量极小的缺陷。


    几何活动轮廓模型以曲线演化理论以及水平集方法为基础,曲线的演化仅依赖于其内在几何特性,而独立于曲线的参数。由于采用水平集方法隐式的表示曲线,使得其能够灵活地处理曲线的拓扑变化。几何活动轮廓模型又可分为基于边界的活动轮廓模型、基于区域的活动轮廓模型。基于边界的活动轮廓模型主要依赖图像的边缘信息控制曲线的运动速度。在图像边缘强度较弱或是远离边缘的地方,轮廓曲线运动速度较大,而在图像边缘强度较强的地方,轮廓曲线运动速度较小甚至停止,使得最终的轮廓曲线运动到边缘位置。比较著名的模型包括Caselles[30]提出的基于平均曲率流的几何活动轮廓模型、Caselles 与Kimmel 等人[31]提出的测地线活动轮廓方法。基于边界的活动轮廓方法对于对比度较好的图像具有较好的分割效果,然而,由于轮廓曲线的演化依赖于图像的边缘信息,当图像中噪声较强时通常难以得到理想的分割效果。基于区域的活动轮廓方法最早是由Mumford 与Shah 提出的MS 模型[32],其主要思想是用分片光滑的函数逼近原始图像,通过能量泛函的极小化寻找合适的轮廓曲线以及近似函数,使得近似函数在除去轮廓曲线以外的同质区域为光滑函数。尽管已经有二十多年的历史,MS 模型至今仍然具有强大的生命力,基于MS 模型的分割方法依然层出不穷。由于MS 模型数值求解存在较大困难,其近似求解算法也是研究的热点问题。目前关于MS 模型的近似方法主要包含两类方法:Ambrosio 提出的基于椭圆逼近的辅助变量模型[33--36]以及Chan 与Vese 提出的基于简化MS 模型与水平集方法相结合的方法[37]。Zhu 等人提出的区域竞争的活动轮廓模型,将区域增长、活动轮廓以及基于Bayes 公式和最小描述长度(MDL)的多相分割方法统一起来。区域竞争法拥有这三种方法的优点,互相弥补了他们的不足之处。此外,测地线活动区域模型[38](Geodesic Active Region)结合了基于边界与基于区域的活动轮廓方法,能够有效利用图像的边缘信息与区域信息。近年来,为处理灰度分布不均图像的分割问题,提出了许多局部化的活动轮廓模型,如Li Chunming 等人[39]提出的基于局部二进拟合能量的活动轮廓模型(LBF)


    基于图论的方法

    基于图论的图像分割技术是近年来图像分割领域的一个新的研究热点。其基本思想是将图像映射为带权无向图,把像素视作节点,节点之间的边的权重对应于两个像素间的不相似性度量,割的容量对应能量函数。运用最大流/最小算法对图进行切割,得到的最小割对应于待提取的目标边界。该方法具有快速、鲁棒、全局最优、抗噪性强、可扩展性好等优点。目前,基于图论的图像分割方法的研究主要集中在以下几个方面[40]:

    (1) 最优剪切准则的设计;

    (2) 谱方法用于分割;

    (3) 快速算法的设计等。

    基于图论的方法本质上将图像分割问题转化为最优化问题,是一种点对聚类方法,其最优分割基本原则就是使划分成的两个子图(区域) 内部相似度最大,而子图之间的相似度最小。图割算法中割集准则的好坏直接影响到最终分割结果,其中常见的割集准则包括:Minimum cut[41]、Average cut[42]、Normalizecut[43]、Min—max Cut[44]以及Ratio cut[45]等。



    区域生长与分水岭算法
    区域生长方法[46]也是一种常用的区域分割技术,其基本思路是首先定义一个生长准则,然后在每个分割区域内寻找一个种子像素,通过对图像进行扫描,依次在种子点周围邻域内寻找满足生长准则的像素并将其合并到种子所在的区域,然后再检查该区域的全部相邻点,并把满足生长准则的点合并到该区域,不断重复该过程直到找不到满足条件的像素为止。该方法的关键在于种子点的位置、生长准则和生长顺序。分水岭算法[47,48]是以数学形态学作为基础的一种区域分割方法。其基本思想是将梯度图像看成是假想的地形表面,每个像素的梯度值表示该点的海拔高度。原图中的平坦区域梯度较小,构成盆地,边界处梯度较大构成分割盆地的山脊。分水岭算法模拟水的渗入过程,假设水从最低洼的地方渗入,随着水位上升,较小的山脊被淹没,而在较高的山脊上筑起水坝,防止两区域合并。当水位达到最高山脊时,算法结束,每一个孤立的积水盆地构成一个分割区域。由于受到图像噪声和目标区域内部的细节信息等因素影响,使用分水岭算法通常会产生过分割现象,分水岭算法一般是作为一种预分割方法,与其它分割方法结合使用,以提高算法的效率或精度,如文献[49]使用分水岭算法结合基于图论的方法进行图像分
    割,在计算精度与计算效率方面均取得了很好的效果。



     

    图像分割概述

    来源于http://blog.csdn.net/zouxy09 

           所谓图像分割指的是根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交迭的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域间呈现出明显的差异性。我们先对目前主要的图像分割方法做个概述,后面再对个别方法做详细的了解和学习。

    1、基于阈值的分割方法

          阈值法的基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值相比较,最后将像素根据比较结果分到合适的类别中。因此,该类方法最为关键的一步就是按照某个准则函数来求解最佳灰度阈值。

    2、基于边缘的分割方法

           所谓边缘是指图像中两个不同区域的边界线上连续的像素点的集合,是图像局部特征不连续性的反映,体现了灰度、颜色、纹理等图像特性的突变。通常情况下,基于边缘的分割方法指的是基于灰度值的边缘检测,它是建立在边缘灰度值会呈现出阶跃型或屋顶型变化这一观测基础上的方法。

    阶跃型边缘两边像素点的灰度值存在着明显的差异,而屋顶型边缘则位于灰度值上升或下降的转折处。正是基于这一特性,可以使用微分算子进行边缘检测,即使用一阶导数的极值与二阶导数的过零点来确定边缘,具体实现时可以使用图像与模板进行卷积来完成。

    3、基于区域的分割方法

          此类方法是将图像按照相似性准则分成不同的区域,主要包括种子区域生长法、区域分裂合并法和分水岭法等几种类型。

           种子区域生长法是从一组代表不同生长区域的种子像素开始,接下来将种子像素邻域里符合条件的像素合并到种子像素所代表的生长区域中,并将新添加的像素作为新的种子像素继续合并过程,直到找不到符合条件的新像素为止。该方法的关键是选择合适的初始种子像素以及合理的生长准则。

            区域分裂合并法(Gonzalez2002)的基本思想是首先将图像任意分成若干互不相交的区域,然后再按照相关准则对这些区域进行分裂或者合并从而完成分割任务,该方法既适用于灰度图像分割也适用于纹理图像分割。

            分水岭法(Meyer1990)是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。该算法的实现可以模拟成洪水淹没的过程,图像的最低点首先被淹没,然后水逐渐淹没整个山谷。当水位到达一定高度的时候将会溢出,这时在水溢出的地方修建堤坝,重复这个过程直到整个图像上的点全部被淹没,这时所建立的一系列堤坝就成为分开各个盆地的分水岭。分水岭算法对微弱的边缘有着良好的响应,但图像中的噪声会使分水岭算法产生过分割的现象。

    4、基于图论的分割方法

            此类方法把图像分割问题与图的最小割(min cut)问题相关联。首先将图像映射为带权无向图G=<VE>,图中每个节点NV对应于图像中的每个像素,每条边∈E连接着一对相邻的像素,边的权值表示了相邻像素之间在灰度、颜色或纹理方面的非负相似度。而对图像的一个分割s就是对图的一个剪切,被分割的每个区域CS对应着图中的一个子图。而分割的最优原则就是使划分后的子图在内部保持相似度最大,而子图之间的相似度保持最小。基于图论的分割方法的本质就是移除特定的边,将图划分为若干子图从而实现分割。目前所了解到的基于图论的方法有GraphCutGrabCutRandom Walk等。

    5、基于能量泛函的分割方法

           该类方法主要指的是活动轮廓模型(active contour model)以及在其基础上发展出来的算法,其基本思想是使用连续曲线来表达目标边缘,并定义一个能量泛函使得其自变量包括边缘曲线,因此分割过程就转变为求解能量泛函的最小值的过程,一般可通过求解函数对应的欧拉(EulerLagrange)方程来实现,能量达到最小时的曲线位置就是目标的轮廓所在。按照模型中曲线表达形式的不同,活动轮廓模型可以分为两大类:参数活动轮廓模型(parametric active contour model)和几何活动轮廓模型(geometric active contour model)。

           参数活动轮廓模型是基于Lagrange框架,直接以曲线的参数化形式来表达曲线,最具代表性的是由Kasset a1(1987)所提出的Snake模型。该类模型在早期的生物图像分割领域得到了成功的应用,但其存在着分割结果受初始轮廓的设置影响较大以及难以处理曲线拓扑结构变化等缺点,此外其能量泛函只依赖于曲线参数的选择,与物体的几何形状无关,这也限制了其进一步的应用。

           几何活动轮廓模型的曲线运动过程是基于曲线的几何度量参数而非曲线的表达参数,因此可以较好地处理拓扑结构的变化,并可以解决参数活动轮廓模型难以解决的问题。而水平集(Level Set)方法(Osher1988)的引入,则极大地推动了几何活动轮廓模型的发展,因此几何活动轮廓模型一般也可被称为水平集方法。


    展开全文
  • 医学图像处理中图像分割是最具挑战性和最富有挑战性的课题,结构分析,运动分析,三维可视化等一系列操作均是以准确的图像分割为基础。由于医学影像设备成像技术的特点,使得图像存在噪声,导致图像中目标物体部分...

    电子科技大学 格拉斯哥学院 2017级谭茗珊
    1.背景:
    医学图像分割技术的发展是一个从人工分割到半自动分割和自动分割的逐步发展过程。早期的图像分割完全是靠人工完成的。完全的人工分割方法是在原始图像上直接画出期望的边界。这种方法费时费力,分割结果完全依赖于分割者的解剖知识和经验,而且分割结果难以再现;半自动的分割方法大大减少了人为因素的影响,而且分割速度快,分割精度高,但操作者的知识和经验仍然是图像分割过程的一个重要组成部分。近年来,由于大量的新兴技术如模糊技术和人工智能技术在图像分割中的应用,图像分割领域中也涌现出一些自动的分割技术。自动分割方法能完全脱离人为干预,由计算机实现医学图像分割的全过程。由于自动分割方法的运算量较大,目前大部分的自动分割方法都是在工作站上实现的。
    2.摘要:
    医学图像处理中图像分割是最具挑战性和最富有挑战性的课题,结构分析,运动分析,三维可视化等一系列操作均是以准确的图像分割为基础。由于医学影像设备成像技术的特点,使得图像存在噪声,导致图像中目标物体部分边缘不清晰,给图像分割造成一定难度。通过运用ITK-SNAP软件对图像进行预处理,使用python并搭建tensorflow环境,对图像加以训练和测试,不断改进算法改进现有MRI脑肿瘤图像分割算法,利用模糊C均值算法、区域增长算法、以及结合模糊相似度理论和区域结构识别技术的分割算法实现脑肿瘤MRI图像的分割,使其能够对图像进行准确识别,定性,定量分析,结果的准确性依据分割评价体系得以判断。

    3.图像分割处理
    3.1非线性平滑处理
    由于磁共振图像在采集过程中,有脉冲干扰,因此图像具有较强的噪声,为了消除噪声,选用非线性平滑中值滤波预处理图片;
    中值滤波是一种去除噪声的非线性处理方法。其基本思想是把数字图像中一点的值在该点的一个领域中各值的中值替代。
    3.2全局阈值分割
    一般图像分割是基于图像二值化的基础上进行的,其目的是可减少图像的灰度分布范围,简化运算,从而大大提高分割速度。
    但如遇到特殊情况,例如脑部的头骨,高密度,灰度值高,处于亮区域,而我们感兴趣的区域(肿瘤)的灰度是软组织,灰度值低,处于暗区域。而肿瘤周围的软组织也是灰度值低的暗区域,与肿瘤的区别很小。此时,原始方法已不再能分辨。所以在程序中,必须舍弃。现有的二值化自动分割函数,改为手动的全局阈值分割。通过观察,设置特定的阈值点,从而进行有效手动分割,将处于亮区域的头骨和其他组织分割开,又保留了其他组织的原有特性。将其作为预处理图像

    3.3肿瘤分割
    经过手动的全局阈值分割后的图片,虽然消除了头骨的部分,但由于我们感兴趣的部分(肿瘤)并没有从周围组织里面分割出来,因此还需要进一步的处理。由于肿瘤和周围的组织灰度值比较接近,我们分别选用最大方差阈值法和形态学两种方法来处理。
    3.3.1最大方差阈值法分割
    最大方差阈值也叫大津阈值,他是在差别域最小二乘法原理的基础上推导出来的,不管是图像的直方图有无明显的双峰,此方法都能取得很好的效果。其原理是把直方图在某一阈值处分割成为两组,当被分成的两组间的方差为最大时,决定阈值。
    3.3.2形态学分割
    区域生长的基本思想是将具有相似性质的像素结合起来构成区域,具体是先对每个需要分割的区域找一个种子像素作为生长起点,然后将种子像素周围区域中与种子像素有相同或相似性质的像素种子合并到种子像素所在区域中,将这些新像素当作种子像素继续进行上面的过程,直到再也没有满足条件的像素可以被包括进来,这样,一个区域就生成了。经实验显示,采用形态学进行分割之后,脑部的肿瘤可以清晰地显示出来,但与此同时一些血管同时也显示出来了。
    具体的算法步骤为:
    求出图像的梯度;
    采用圆形结构元素执行形态学开操作运算;
    进行腐蚀运算;
    采用圆形结构元素执行形态学闭运算操作;
    进行膨胀运算;
    经过开闭运算后,图像进行重建;
    将重建的图像叠加在原有图像上。

    4.结论:
    由于医学图像的复杂多样性和分割问题的困难性,通常针对某项任务选用合适的算法,目前没有一个分割方法能适用于不同的任务,医学图像的分割方法有很多,最常用的方法是阈值分割法和形态学分割法。但通常,直接采用普通的阈值分割和形态学分割法,很难提取到满意的目标图像。本文分别对这两种方法稍作改进,采用图像阈值法时,先进行手动的阈值分割,然后再使用最大方差阈值法,效果更好;采用形态学分割时,圆形结构元素作为种子,也得到了目标图像。因此尽管医学图像分割比较复杂,只要灵活采用图像分割方法,可以得到比较满意的分割图像。

    5.参考文献
    [1]李彦东.卷积神经网络研究综述
    [2]田捷.医学图像与医学分析[M].
    [3]陈灵娜.一种新的肝肿瘤CT图像分割方法[J]
    [4]马子睿.基于数字形态学的医学图像分割研究方法[J]
    [5]俞海平.MRI脑肿瘤图像分割与矩特征研究[J]

    展开全文
  • 应用背景:讲过一些灰度图像分割方法之后,大家可能会问,图像分割有什么样的应用。在运动物体识别中,分割有着非常重要的作用,通过“运动”这个概念,与分割相结合,能够在一系列图像中检测出运动对象。
    应用背景:讲过一些灰度图像的分割方法之后,大家可能会问,图像分割有什么样的应用。在运动物体识别中,分割有着非常重要的作用,通过“运动”这个概念,与分割相结合,能够在一系列图像中检测出运动对象。
    
    展开全文
  • 它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成...

    5.1图像分割概述

    图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像索赋予相同的编号。
    图像分割是图像识别和计算机视觉至关重要的预处理。没有正确的分割就不可能有正确的识别。但是,进行分割仅有的依据是图像中像素的亮度及颜色,由计算机自动处理分割时,将会遇到各种困难。例如,光照不均匀、噪声的影响、图像中存在不清晰的部分,以及阴影等,常常发生分割错误。因此图像分割是需要进一步研究的技术。人们希望引入一些人为的知识导向和人工智能的方法,用于纠正某些分割中的错误,是很有前途的方法,但是这又增加了解决问题的复杂性。
    图像分割算法从大的方面讲可以分为两类:
     全自动图像分割:一般采用聚类算法来最大化前景与背景的差。
     用户互动式图像分割:用户提供前景和背景的种子,然后对前景背景建立概率分布模型。

    5.2图像分割方法

    5.2.1阈值分割

    图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。
    图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域不具有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。
    阈值分割的优点是计算简单、运算效率较高、速度快。在重视运算效率的应用场合(如用于硬件实现),它得到了广泛应用。人们发展了各种各样的阈值处理技术,包括全局阈值、自适应阈值、最佳阈值等等。
     基本原理
    基本原理是:通过设定不同的特征阈值,把图像象素点分为若干类。
    常用的特征包括:直接来自原始图像的灰度或彩色特征;由原始灰度或彩色值变换得到的特征。设原始图像为fx,yf(x,y) ,按照一定的准则 f(x,y)f(x,y)中找到特征值T,将图像分割为两个部分,分割后的图像为:若取:b0=0b0=0 (黑),b1=1b1=1 (白),即为我们通常所说的图像二值化。
     方法
    阈值分割方法实际上是输入图像 到输出图像 的如下变换:
    这里写图片描述
    其中,T为阈值,对于物体的图像元素g(i,j)=1g(i,j)=1 ,对于背景的图像元素 g(i,j)=0g(i,j)=0
    由此可见,阈值分割算法的关键是确定阈值,如果能确定一个合适的阈值就可准确地将图像分割开来。阈值确定后,将阈值与像素点的灰度值逐个进行比较,而且像素分割可对各像素并行地进行,分割的结果直接给出图像区域。
    关于阈值分割请参考笔者的另外的文章。

    阈值化

    5.2.2区域分割

    区域分割是讲图像按照相似性准则分成不同的区域,主要包括区域增长,区域分裂合并和分水岭等几种类型。
     区域生长
    区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区域生长的好坏决定于初始点(种子点)的选取,生长准则,终止条件。区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标的提取。
    区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素(根据某种事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。将这些新像素当作新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来。这样一个区域就长成了。
    区域生长需要选择一组能正确代表所需区域的种子像素,确定在生长过程中的相似性准则,制定让生长停止的条件或准则。相似性准则可以是灰度级、彩色、纹理、梯度等特性。选取的种子像素可以是单个像素,也可以是包含若干个像素的小区域。大部分区域生长准则使用图像的局部性质。生长准则可根据不同原则制定,而使用不同的生长准则会影响区域生长的过程。
     区域分裂合并
    区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标提取。分裂合并差不多是区域生长的逆过程:从整个图像出发,不断分裂得到各个子区域,然后再把前景区域合并,实现目标提取。分裂合并的假设是对于一幅图像,前景区域由一些相互连通的像素组成的,因此,如果把一幅图像分裂到像素级,那么就可以判定该像素是否为前景像素。当所有像素点或者子区域完成判断以后,把前景区域或者像素合并就可得到前景目标。
    在这类方法中,最常用的方法是四叉树分解法。设R代表整个正方形图像区域,P代表逻辑谓词。基本分裂合并算法步骤如下:
    (1)对任一个区域,如果H(Ri)=FALSE就将其分裂成不重叠的四等份;
    (2)对相邻的两个区域Ri和Rj,它们也可以大小不同(即不在同一层),如果条件H(Ri∪Rj)=TRUE满足,就将它们合并起来。
    (3)如果进一步的分裂或合并都不可能,则结束。
    分裂合并法的关键是分裂合并准则的设计。这种方法对复杂图像的分割效果较好,但算法较复杂,计算量大,分裂还可能破坏区域的边界。
     分水岭分割
    分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。
    关于分水岭分割请参看笔者的另一篇博文。
    分水岭算法

    5.2.3边缘分割

    图像分割的一种重要途径是通过边缘检测,即检测灰度级或者结构具有突变的地方,表明一个区域的终结,也是另一个区域开始的地方。这种不连续性称为边缘。不同的图像灰度不同,边界处一般有明显的边缘,利用此特征可以分割图像。
    图像中边缘处像素的灰度值不连续,这种不连续性可通过求导数来检测到。对于阶跃状边缘,其位置对应一阶导数的极值点,对应二阶导数的过零点(零交叉点)。因此常用微分算子进行边缘检测。常用的一阶微分算子有Roberts算子、Prewitt算子和Sobel算子,二阶微分算子有Laplace算子和Kirsh算子等。在实际中各种微分算子常用小区域模板来表示,微分运算是利用模板和图像卷积来实现。这些算子对噪声敏感,只适合于噪声较小不太复杂的图像。
    由于边缘和噪声都是灰度不连续点,在频域均为高频分量,直接采用微分运算难以克服噪声的影响。因此用微分算子检测边缘前要对图像进行平滑滤波。LoG算子和Canny算子是具有平滑功能的二阶和一阶微分算子,边缘检测效果较好,
     步骤
    第一步:滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能.需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折衷.
    第二步:增强:增强边缘的基础是确定图像各点邻域强度的变化值.增强算法可以将邻域(或局部)强度值有显著变化的点突显出来.边缘增强一般是通过计算梯度幅值来完成的.
    第三步:检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点.最简单的边缘检测判据是梯度幅值阈值判据.
    第四步:定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来.
    在边缘检测算法中,前三个步骤用得十分普遍。这是因为大多数场合下,仅仅需要边缘检测器指出边缘出现在图像某一像素点的附近,而没有必要指出边缘的精确位置或方向.边缘检测误差通常是指边缘误分类误差,即把假边缘判别成边缘而保留,而把真边缘判别成假边缘而去掉.边缘估计误差是用概率统计模型来描述边缘的位置和方向误差的.我们将边缘检测误差和边缘估计误差区分开,是因为它们的计算方法完全不同,其误差模型也完全不同。
    关于边缘分割请参考笔者的另一篇文章。
    边缘检测

    5.2.4图论分割

    此类方法把图像分割问题与图的最小割(min cut)问题相关联。首先将图像映射为带权无向图G=

    5.2.4.1 grabCut()函数

     grabCut()函数讲解

    C++:void grabCut( InputArray img, 
                      InputOutputArray mask, 
                      Rect rect,
                      InputOutputArray bgdModel, 
                      InputOutputArray fgdModel,
                      int iterCount, 
                      int mode = GC_EVAL );

    【参数】
    第一个参数,img,待分割的源图像,必须是8位3通道(CV_8UC3)图像,在处理的过程中不会被修改;
    第二个参数,mask,掩码图像,如果使用掩码进行初始化,那么mask保存初始化掩码信息;在执行分割的时候,也可以将用户交互所设定的前景与背景保存到mask中,然后再传入grabCut函数;在处理结束之后,mask中会保存结果。mask只能取以下四种值:
    GCD_BGD(=0),背景;
    GCD_FGD(=1),前景;
    GCD_PR_BGD(=2),可能的背景;
    GCD_PR_FGD(=3),可能的前景。
    如果没有手工标记GCD_BGD或者GCD_FGD,那么结果只会有GCD_PR_BGD或GCD_PR_FGD;
    第三个参数,rect用于限定需要进行分割的图像范围,只有该矩形窗口内的图像部分才被处理;
    第四个参数,bgdModel,背景模型,如果为null,函数内部会自动创建一个bgdModel;bgdModel必须是单通道浮点型(CV_32FC1)图像,且行数只能为1,列数只能为13x5;
    第五个参数,fgdModel,前景模型,如果为null,函数内部会自动创建一个fgdModel;fgdModel必须是单通道浮点型(CV_32FC1)图像,且行数只能为1,列数只能为13x5;
    第六个参数, iterCount,迭代次数,必须大于0;
    第七个参数, mode,用于指示grabCut函数进行什么操作,可选的值有:
    GC_INIT_WITH_RECT(=0),用矩形窗初始化GrabCut;
    GC_INIT_WITH_MASK(=1),用掩码图像初始化GrabCut;
    GC_EVAL(=2),执行分割。

     grabCut()函数源代码

    /*【grabCut( )源代码】*************************************************************
     * @Version:OpenCV 3.0.0(Opnencv2和Opnencv3差别不大,Linux和PC的对应版本源码完全一样,均在对应的安装目录下)  
     * @源码路径:…\opencv\sources\modules\imgproc\src\ grabcut.cpp
     * @起始行数:528行   
    ********************************************************************************/
    void cv::grabCut( InputArray _img, InputOutputArray _mask, Rect rect,
                      InputOutputArray _bgdModel, InputOutputArray _fgdModel,
                      int iterCount, int mode )
    {
        Mat img = _img.getMat();
        Mat& mask = _mask.getMatRef();
        Mat& bgdModel = _bgdModel.getMatRef();
        Mat& fgdModel = _fgdModel.getMatRef();
    
        if( img.empty() )
            CV_Error( CV_StsBadArg, "image is empty" );
        if( img.type() != CV_8UC3 )
            CV_Error( CV_StsBadArg, "image mush have CV_8UC3 type" );
    
        GMM bgdGMM( bgdModel ), fgdGMM( fgdModel );
        Mat compIdxs( img.size(), CV_32SC1 );
    
        if( mode == GC_INIT_WITH_RECT || mode == GC_INIT_WITH_MASK )
        {
            if( mode == GC_INIT_WITH_RECT )
                initMaskWithRect( mask, img.size(), rect );
            else // flag == GC_INIT_WITH_MASK
                checkMask( img, mask );
            initGMMs( img, mask, bgdGMM, fgdGMM );
        }
    
        if( iterCount <= 0)
            return;
    
        if( mode == GC_EVAL )
            checkMask( img, mask );
    
        const double gamma = 50;
        const double lambda = 9*gamma;
        const double beta = calcBeta( img );
    
        Mat leftW, upleftW, upW, uprightW;
        calcNWeights( img, leftW, upleftW, upW, uprightW, beta, gamma );
    
        for( int i = 0; i < iterCount; i++ )
        {
            GCGraph<double> graph;
            assignGMMsComponents( img, mask, bgdGMM, fgdGMM, compIdxs );
            learnGMMs( img, mask, compIdxs, bgdGMM, fgdGMM );
            constructGCGraph(img, mask, bgdGMM, fgdGMM, lambda, leftW, upleftW, upW, uprightW, graph );
            estimateSegmentation( graph, mask );
        }
    }

    5.2.4.2 grabCut实例

    参考附件【demo1】

    这里写图片描述

    图1

    5.2.5能量泛函分割

    基于能量泛函的分割方法主要指的是活动轮廓模型(active contour model)以及在其基础上发展出来的算法,其基本思想是使用连续曲线来表达目标边缘,并定义一个能量泛函使得其自变量包括边缘曲线,因此分割过程就转变为求解能量泛函的最小值的过程,一般可通过求解函数对应的欧拉(Euler.Lagrange)方程来实现,能量达到最小时的曲线位置就是目标的轮廓所在。按照模型中曲线表达形式的不同,活动轮廓模型可以分为两大类:参数活动轮廓模型(parametric active contour model)和几何活动轮廓模型(geometric active contour model)。
    参数活动轮廓模型是基于Lagrange框架,直接以曲线的参数化形式来表达曲线,最具代表性的是由Kasset a1(1987)所提出的Snake模型。该类模型在早期的生物图像分割领域得到了成功的应用,但其存在着分割结果受初始轮廓的设置影响较大以及难以处理曲线拓扑结构变化等缺点,此外其能量泛函只依赖于曲线参数的选择,与物体的几何形状无关,这也限制了其进一步的应用。
    几何活动轮廓模型的曲线运动过程是基于曲线的几何度量参数而非曲线的表达参数,因此可以较好地处理拓扑结构的变化,并可以解决参数活动轮廓模型难以解决的问题。而水平集(Level Set)方法(Osher,1988)的引入,则极大地推动了几何活动轮廓模型的发展,因此几何活动轮廓模型一般也可被称为水平集方法。

    5.2.6直方图分割

    与其他图像分割方法相比,基于直方图的方法是非常有效的图像分割方法,因为他们通常只需要一个通过像素。在这种方法中,直方图是从图像中的像素的计算,并在直方图的波峰和波谷是用于定位图像中的簇。颜色和强度可以作为衡量。
    这种技术的一种改进是递归应用直方图求法的集群中的形象以分成更小的簇。重复此操作,使用更小的簇直到没有更多的集群的形成。
    基于直方图的方法也能很快适应于多个帧,同时保持他们的单通效率。直方图可以在多个帧被考虑的时候采取多种方式。同样的方法是采取一个框架可以应用到多个,和之后的结果合并,山峰和山谷在以前很难识别,但现在更容易区分。直方图也可以应用于每一个像素的基础上,将得到的信息被用来确定的像素点的位置最常见的颜色。这种方法部分基于主动对象和一个静态的环境,导致在不同类型的视频分割提供跟踪。
    对于直方图分割方法,也可以归结为基于阈值的分割方法。关于直方图更多相关知识请参考笔者的一些列文章。
    直方图A
    直方图B
    直方图C
    直方图D

    5.2.7其他分割方法

    随着人工智能的不断发展,最近的分割方法及本都是基于深度学习的方法,主要有DeepMask,FCN,FCN+CRF,SSD,Deeplib等以深度学习为基础的算法为主流。
    值得注意的是,如果是要做专有的图像分割,这类算法使用前要稍微慎重些。主要原因就是这些算法都需要大量标注样本的支持。
    由于笔着水平有限,而且该专栏是基于OpenCV的讲解,其他分割方法请感兴趣的朋友自行学习吧!

    本章参考附件

    点击进入

    展开全文
  • 基于数字图像处理的车牌定位和分割的研究
  • 五 基于区域的分割 1区域生长算法借助种子连接预先设定的性质相似的区域 2.区域分裂与聚合 将原图作为树根R,选择属性Q,如果不满足Q就对区域进行分割,每次分成四个象限。从R开始,不满足Q就分成4个象限,其中...
  • (最开始接触医学图像分割时写的综述,写的比较幼稚,传上来的时候格式可能有些乱。需要原文的小伙伴可以加我qq...医学图像分割技术的发展不仅影响到医学图像处理中其他相关技术的发展,如可视化、三维重建等,而且在...
  • 用单文档编写的实现图像处理的程序,可以实现图像的灰度化、滤波、运动背景提取、图像分割等多种简单的功能。
  • 基于随机游走的图像分割算法 1、随机游走理论 算法开始前,先简单描述一下随机游走的理论 一维随机游走问题:设一个质点(随机游走者)沿着一条直线运动,单位时间内只能运动一个单位长度,且只能停留在该直线上的...
  • 数字图像处理研究的主要内容 数字图像处理是指将一幅图像变成另一幅经过修改(改进)的图像,是一个由图像到图像的过程。其主要研究内容如下:图像变换 图像增强 图像恢复 图像分割 数学形态学 图像编码与压缩 图像...
  • 运动分割概述

    2014-02-22 12:30:01
    运动分割的目的是从序列图像中将变化区域从背景图像中提取出来。 运动区域的有效分割对于目标分类、特征提取、特征表达与最后的识别等后期处理是非常重要的,因为以后的处理过程仅仅考虑图像中对应于运动区域的像素...
  • 常用词语: 1、effectively 、precise、 ...digital image processing:数字图像处理 image digitalization:图像数字化 image representation:图像表达 image acquisition:图像的获取 pixel:像素 image clas...
  • 数字图像处理实战

    2019-07-29 14:17:46
    本课程内容主要选取自stanford EE368/CS232 课程的...本次课程包含图像算法和机器学习,编程工具主要包括python,c++,android,matlab,opencv,Tesseract等。 由于个人时间精力有限,课程将每隔2-3周发布一次。
  • 基于随机游走的图像分割算法是属于图论分割方法中的一种,这个算法比较偏,网上的paper比较少,刚开始学习找个资料都不容易,其实这个算法的原理就是通过求解一个邻接矩阵方程组,跟三维空间三角网格曲面的调和场...
  • 数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。图像处理最早出现于 20 世纪 50 年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。数字图像处理作为...
  • 相信,阅读以下这些经典的图像处理书籍能够助你一臂之力。赶紧紧随大圣众包威客平台的脚步吧! 《数字图像处理基础》  随着台式计算机的处理能力日益增强,各种图像拍摄的设备(例如平板电脑、...
  • 医学图像分割技术的发展不仅影响到医学图像处理中其他相关技术的发展,如可视化、三维重建等,而且在生物医学图像的分析中也占有极其重要的地位。近年来,由于深度学习算法在医学图像分割中的应用, 医学图像分割技术...
  • 关于视频运动分割

    2015-09-21 11:12:29
    运动分割是一个很大的领域。基于看过的文献来说,主要包括两大类:第一类是基于背景建模的背景消除;第二类是基于运动信息的视频分割。视频分割包括很多内容。大部分方法主要依靠的是光流和颜色信息。一种做法就是将...
1 2 3 4 5 ... 20
收藏数 13,857
精华内容 5,542
关键字:

运动分割图像处理