精华内容
下载资源
问答
  • matlab程序实现了图像分割中使用迭代算法自动阈值分割,经过检验,代码详细。
  • MATLAB手写数字识别

    千次阅读 多人点赞 2020-01-02 16:58:38
    MATLAB手写字体识别 使用svm进行手写字体识别 测试图片 处理图片,拿到数字区域并分割保存 clc,clear,close all; f=imread('num.jpg'); bw=~im2bw(f); se=strel('line',200,0); bw_dilate=imdilate(bw,...

    MATLAB基于svm的手写数字识别

    使用svm进行手写字体识别

    测试图片

    在这里插入图片描述

    处理图片,拿到数字区域并分割保存

    clc,clear,close all;
    f=imread('num.jpg');
    bw=~im2bw(f);
    
    se=strel('line',200,0);
    bw_dilate=imdilate(bw,se);
    
    
    bw_dilate_erode=imerode(bw_dilate,strel('line',1000,0));
    
    bw_re=imreconstruct(bw_dilate_erode,bw_dilate);
    
    result=imreconstruct(bw_re,bw);[r,c]=find(result);
    nextresult=result(min(r) :max(r),min(c):max(c));
    
    [h,w]=size(nextresult);
    hs=sum(nextresult);
    
    a=1;b=1;i=1;
    splitfs={};points=[];
    figure
    while(a<w)
        while(hs(a)==0&&a<w)
            a=a+1;
        end
        b=a;
        while(hs(b)>0&&b<w)
            b=b+1;
        end
        
        if(b-a>2)
            hresult=nextresult(:,a:b);
            [r,c]=find(hresult);
            result2=hresult(min(r):max(r),:);
            m=min(r);n=max(r);
            xi=hresult(m:n,:);
            splitfs{i}=xi;
            points=[points;m,n,a,b];
            subplot(3,6,i),imshow(result2);
            i=i+1;
        end
        a=b;
    end
    

    在这里插入图片描述

    格式化图片

    function x=picPretreatment(im)
    bw=im2bw(im);
    [r,c]=find(bw);
    x=bw(min(r):max(r),min(c):max(c));
    x=imresize(x,[16,16]);
    

    训练数据集,得到 mynet.mat

    clear,clc,close all;
    k=1;
    for m=0:9
        for n=1:15
            f=imread(strcat('nums\',int2str(m),'\',int2str(n),'.bmp'));
            f=picPretreatment(f);
            xx=double(f(:));
            P(k,:)=xx';
            T(k,1)=m;
            k=k+1;
        end
    end
    net=fitcecoc(P,T);
    save mynet net;
    
    

    结果

    注意将图片转化为double

    xs=[splitfs,points];
    fonts='0123456789';
    endresult='手写数字为:';
    load mynet;
    for m_18=1:size(xs,2)-1
        g=xs{m_18};
        g=double(picPretreatment(g));
        lastresult=predict(net,g(:)');
        endresult=strcat(endresult,string(lastresult));
    end
    endresult
    

    在这里插入图片描述

    项目源码

    链接:https://pan.baidu.com/s/1PcWrdyP41BGWuEu4TyWIvQ
    提取码:lnke

    展开全文
  • 目 录摘要 1Abstract 1引言 31 图像分割技术 31.1 图像工程与图像分割 31.2 图像分割的方法分类 42 图像分割技术算法综述 52.1 基于阈值的图像分割技术 52.2边缘检测法 52.3 区域分割法 72.4 基于水平集的分割方法 ...

    目 录

    摘要 1

    Abstract 1

    引言 3

    1 图像分割技术 3

    1.1 图像工程与图像分割 3

    1.2 图像分割的方法分类 4

    2 图像分割技术算法综述 5

    2.1 基于阈值的图像分割技术 5

    2.2边缘检测法 5

    2.3 区域分割法 7

    2.4 基于水平集的分割方法 8

    2.5 分割算法对比表格 8

    3基于水平集的图像分割 9

    3.1 水平集方法简介 9

    3.2 水平集方法在图像分割上的应用 9

    3.3 仿真算法介绍 10

    3.4 实验仿真及其结果 11

    结论 18

    致 谢 19

    参考文献 19



    图像分割技术研究及MATLAB仿真


    摘要:作为一项热门的计算机科学技术,图像分割技术已经在我们生活中越来越普及。顾名思义这项技术的目的就是,将目标图像从背景图像中分离出去。由于这些被分割的图像区域在某些属性上很相近,因此图像分割与模式识别以及图像压缩编码有着密不可分的关系。完成图像分割所采用的方法各式各样,所应用的原理也不同。但他们的最终目的都是把图像中性质相似的某些区域归为一类,把性质差异明显的不同区域分割开来。通常在分割完成之后,我们就要对某些特定区域进行分析、计算、评估等操作,因而分割质量的好坏直接影响到了下一步的图像处理[[1]],因此图像分割是图像处理的一个关键步奏。图像分割技术在各个领域都有着及其重要的意义;在工业上有卫星遥感,工业过程控制监测等等;在医学方面,水平集的分割方法还可以通过医学成像帮助医生识别模糊的病变区域;在模式识别领域还可应用到指纹扫描、手写识别、车牌号识别等等。

    本课题的研究内容是对图像分割技术的几种常用的方法进行综述和比较,并基于其中一种方法进行MATLAB仿真测试,给出性能分析比较结果。


    关键字:图像分割,MATLAB仿真,模式识别


    引言

    数字图像技术是计算机科学技术兴起后的一项对图像进行加工处理的技术。该技术利用计算机系统的数字识别能力,把图像信息转化为数字信息,并对之进行分析、加工、处理,以满足人们的具体需求,处理过后的图像易于识别且方便理解。数字图像处理是图像技术的总称,它的分支学科很多[[2]]。图像分割技术就是其中的一种,它的主要目的是简化图像,确定我们所感兴趣的图像区域。图像分割技术的兴起推动了图像领域跨出了关键的一步,是图像领域进阶的一个分界点。

    图像分割技术的目的就是把我们指定的目标区域从原图像中分离出来,使得下一步的操作更加简便。而图像的分割程度与我们所关注的问题紧密一致,现有的图像分割技术大抵可分为两类;第1类主要应用图像中某些区域的相似性来完成分割,如:图像区域处理;第2类主要应用图像边缘区域像素值会发生突变的性质来完成分割,如:边缘处理技术

    本文对当前常用的几种图像分割技术做了系统的分类,介绍了分割技术的发展状况,再此基础上对阈值分割、区域分割、边缘分割以及水平集分割的原理进行简单的介绍,然后得出每个方法的优缺点;最后根据结论得出各个方法的应用领域,适应范围并对这些方法的性能进行评估。最后基于其中一种方法实现MATLAB软件仿真,完成对不同图像的分割,最后做出自己对这一方法进行合理性的评估并做出展望。

    1 图像分割技术

    1.1 图像工程与图像分割

    图像是自然生物或人造生物对自然界某种现象的记录,有学者做过统计,图像中所蕴含的内容和信息占人类所获得信息的80%,图像传递的信息真实、贴切、丰富,从狭义角度来说用来提取、研究、处理图像信息的学科称为图像科学;从广义角度来说图像科学是各种视觉相关技术的总称。

    把所有与图像相关的技术归结到一个整体流程框架,我们就得到了图像工程的概念。根据研究的层次和内容不同,图像工程可以被分为三个部分:图像处理、图像分析与图像理解。[[3]]


    v2-18e1d005737d56f1b5e51a26a3913529_b.jpg


    图1.1 图像工程的三个层次

    图像处理旨在对图像中各个元素进行人们所要求的特定的转换,转换之后得到的新图像用来进行下一步的操作和应用;图像分析主要是对图像中指定目标区域做检测与测量,依照这些测定结果来对客观信息做出分析与评判;而图像理解则是在建立在图像分析结果基础上研究各个部分之间的相关性或者是对原场景做出解释。本文重点研究的图像分割是图像处理和图像分析之间的一项流程,它把我们所感兴趣的研究区域信息进行重点提取,这样做可以帮助我们更好地进行下一步图像分析的研究。图像分割使得图像分析和图像理解成为可能,它是图像工程中一项必不可少的环节,图像分割受到了人们广泛的重视和认可。

    1.2 图像分割的方法分类

    从上个世纪发展至今,图像分割的研究发展一直层出不穷,百花争芳,据不完全统计现已有上千种关于图像分割的算法被提出,而这些算法大多数都与图像的两个特性有关:相似性和不连续性。无论何种技术,都会用到两者之一或者兼之,这是图像本身的性质所决定的。基于第一种性质的分割算法有一个共同特点,即是所有的分割算法都会根据某一特定的准则来进行分割,这个准则可以是确定某种相似的性质,比如区域生长分割;也可以是确定某种划分界限的值,比如阈值分割技术,也可以是两者兼有,比如区域生长合并技术。基于第二种特性的分割算法往往会用到一个关于图像的性质,图像中某一事物区域和外界背景区域的边缘部分的灰度值会发生突变,这种突变在人体视觉上的反应就是人们会明显察觉到这个地区是一个分界区域,应用这一知识人们做出了边缘分割算法。

    从分割过程的处理与决策角度来看,图像分割技术又可分为串行分割技术与并行分割技术,这种分类方法在数字科学领域十分常见,所以它们的分类依据也大致一样:串行分割技术的工作流程是依次进行的,前一工作流程得出的结果会对下一工作流程提供帮助和依据,因而也会产生影响。假如前一工作完成的不充分或者产生偏差,后面的工作效果也会大打折扣,所以这种分割方式需要保证每一步的分割流程都有较好的效果,否则会导致分割效果较差。并行分割技术中每个判定和流程都会独立的完成,不会影响其他步奏的进行。因此并行分割技术的抗噪性也比较好。根据以上介绍,可以把分割算法的分类如下:①并行边界(Parallel Boundary ,PB);②串行边界 (Serial Boundary ,SB);③并行区域(Parallel Region ,PR);④串行区域(Serial Region ,SR)。

    分类相似性(区域)不连续性(边界)
    串行处理SRSB
    并行处理PRPB

    表1.1 图像分割算法分类

    1.3 图像分割技术的发展

    图像分割分割技术大致兴起于二十世纪七十年代,当时正是计算机科学兴起和发展的黄金时期,而计算机处理功能的扩展必然与图像处理密切相关,因此图像分割技术也引起了人们的注意。在当时人们还只是简单的运用阈值法来分割图像,这种早期的分割算法我们在下一章会提到,它的实现简单但局限性太大,所以随后慢慢被其他方法所取代。人们纷纷开始寻求一种适应范围更广的分割算法。边缘分割算法计算能力强,适应性较阈值法好,得到人们的认可,但它的抗噪性不好,尤其是区域边缘不明显时,分割效果不好;再加之区域分割技术的兴起,这种分割技术慢慢被取代。

    20 世纪八十年代以后,越来越多的学者开始将模糊理论、马尔可夫模型、遗传算法理论、分形理论、神经网络、形态学理论、小波分析等研究成果运用于图像分割的研究中,取得了很大进展[[4]]。但是无论哪一种分割技术都无法完全适应任何一种图像,由于图像的多样性,我们也无法用某一个精确的计算式来表达图像的分割过程。

    近来,有一种基于活动轮廓模型的图像分割的算法变得热门起来,这种分割算法把图像分割领域带到了一个全新的高度,它的适应范围更大,处理面更广,再加之它更接近人们的视觉活动过程,得到了广泛的应用。本文的第三章水平集分割技术,也用到了这项分割算法。在不久的将来,分割技术也会不断的推陈出新,人们对图像技术的研究也会不断攀升。

    2 图像分割技术算法综述

    2.1 基于阈值的图像分割技术

    所谓阈值分割技术就是在实现图像分割之前人为的确定一个或几个阈值,根据图像中的每个像素点灰度值的大小来判断是属于哪一个阈值范围之间,从而把这些判断过后的点归为不同的类别,即完成的图像分割。阈值分割法通常又可分为两类:当我们所关注的对象是全部图像并且只取一个阈值时,我们称之为全局阈值分割法;相反在不同的区域取不同的阈值,每个区域进行独立分割的方法叫做局部阈值分割法。阈值分割方法依据分割算法的特点,还可以分为最大类空间方差法、直方图与直方图变换法、基于过渡区的阈值选取法等。显然这些算法的关键就是确定最优阈值,我们可以人工设置阈值,当然这需要研究者有大量的研究经验;也可以通过系统来计算最优阈值。阈值选取不合适会导致分割失败。

    阈值分割法是图像分割技术发展之初最原始的一种方法,它的实现难度低,当背景图像和目标图像灰度值差异明显时,功能实现的很好。人们往往会从灰度直方图的波谷区域读取相应的阈值,如若不满足此条件,分割效果往往不尽人意,这也成为它的主要局限是。另外,它只考虑图像像素的单一值,不能结合图像的空间特性进行具体分析,所以它所受的噪声干扰也会很明显。


    v2-d33ed497d7741786fcd622684a0c65d7_b.jpg


    图2.1 基于阈值分割的图片

    此图是基于阈值的分割图片,根据日常经验我们可以知道,在一副图片中离镜头远的背景往往采光不足,而离镜头较近的目标在图片上就可以清晰的反应出来。因而在黑白图片中的反应就是背景图像的灰度值很低,在阈值以下,呈现右图中的结果就是白色;而目的图像灰度值很高,超过阈值所以在右图中显示为纯黑色。这样我们可以知道原始图片的灰度值直方图是连续不间断的,而完成阈值分割以后就只显示为单纯的黑白图片,这便是阈值分割的特点。

    2.2边缘检测法

    边缘检测法刚刚提到的第二类分割算法。在观察一幅图像时,人们往往会通过边缘区域来判断一个具体实物的所在范围,这是因为边缘区域会给人们的视觉带来强烈刺激,当灰度值的变化非常显著的时候,我们就可以大致判断此区域的两侧是不同的物体,在数学上的表现一阶倒数存在极值或二阶导数有零点,所以通过对边缘信息的检测可以帮助我们实现对图像的分割。边缘检测方法的检测原理很简单,即图像边缘区域灰度值会发生突变,而我们可以通过检测灰度值函数的倒数来判定边缘区域,这就所谓的微分算子法。常用的一阶微分算子有:Prewitt 梯度算子、Roberts 梯度算子、Sobel 算子等;二阶微分算子有:Laplacian算子以及高斯拉普拉斯算子(Laplacian of a Gaussian,LoG)。[[5]]但是我们知道图像中的噪声点的灰度值周围也会产生突变,因而噪声的对边缘检测法的干扰极大,所以在进行分割需要进行去噪处理,例如高斯去噪。此方法的优点在于边缘计算准确且快速,定位准确,但是当边缘区域不明显时,这种分割方法容易出现边缘丢失或者分割出来的图像边缘模糊等现象,无法确保边缘区域的连续性和封闭性。


    v2-603faa1fd6f6b07f1055ca8309612771_b.jpg


    图2.2 Roberts算子边缘分割图像


    v2-225eae4755776aee945acb61268d8c23_b.jpg


    图2.2 Sobel算子边缘分割图像


    v2-77aa430dc615e3a3e71401278a5938cc_b.jpg


    图2.3 Prewitt算子边缘分割图像[[6]]

    Roberts、Sobel、Prewitt算子都是常用的一阶微分算子,它们对应的算法分割出来的图像都有共同的特点,也有各自的差异。共同点就是三者都突出了原图像中的边缘部分,比如女士的帽檐、脸颊、眼眶等等这些边缘部分经过处理之后就变成了高灰度值的点,在右图中就对应为明显的白色点,这是因为系统检测到这些点的灰度值存在突变所以认定为图像边缘;而没有突变的点就转变为低灰度值的黑色。图像的不同之处在于三个算子对边缘的突出程度有差异Sobel算子略大于Prewitt算子,而这两者远大于Robert算子。这三个算法也都可以反应边缘分割法的局限性,图中区域有一处边缘模糊的地方,即女士帽檐的偏左侧区域,这个地方与背景图像的灰度值差异很小,所以在处理之后的图片中这块区域没有认定为边缘,即出现了边缘缺失。

    2.3 区域分割法

    区域分割的实质就是把图像中像元性质一致点的联合起来,达到联合分割区域的目的。此方法恰好弥补了阈值分割的缺点,能有效的解决分割的不连续性。区域分割方法按照不同的方法原理可以分为不同的类别,如果从全局出发,按照图像性质一致的准则来进行图像分割,划分每个像元的所属区域,这种方法叫做区域分裂的分割方法;如果从某一个像元点(种子点)出发,将属性接近的像元点连接起来的方法叫做区域生长的分割方法。把这两种方法结合起来的方法就称之为分裂-合并的方法,区域生长法的中心思想是把像元性质一致的点归为一个区域,其步奏流程是先人为的在待分割区域选取一个种子生长点,然后依照某种规则把种子点附近的某些像元依次添加到种子区域中去,最后这些性质相似的像元会自动的形成一个区域,这就达成了区域生长法的分割母的,完成这一系列程序的重点在于选取适当的生长准则。经常使用的生长准则大致如下:基于区域形状准则、基于区域内灰度分布统计性质准则、基于区域灰度差准则。分裂合并法的中心思想则恰好相反,它先把整幅图像分解成许多一致性比较高的小区域,在此之后仍然按照一定的合并准则把小区域合并成大区域,完成图像分割。

    区域生长算法的优缺点很明显,它大多用于处理小型图像。因为一旦图像面积过大,该算法的计算速度会变得明显迟缓,而且需要它研究人员有很好的处理经验,去人工预先定义种子点。分裂-合并算法优点是不需要预先定义种子点,但是在分割过程中很有可能会破坏完成区域边缘。

    无论是区域生长法还是分裂合并法都是一个图像动态变化的过程,其变化趋势无法用单一的图片显示,所以这里就不给出区域分割法的图例演示。

    2.4 基于水平集的分割方法

    水平集方法是由Sethian和Osher于1988提出,是一种处理曲线演化的新颖的方法。该方法的中心思想就是把变化的界面曲线方程用高一维的零水平集函数来表示。以这样一种间接的方式来表达闭合曲线,可以把跟踪复杂的曲线演化过程转化成偏微分方程的数值求解问题,这样一来无论曲线是分裂还是合并,都可以在数学上有着准确的表示,这种方法极大的简化了曲线演化的过程,有利于我们研究拓扑结构复杂的空间几何体。从提出至今,人们对水平集方法的研究日臻完善,研究领域也不断拓宽,从最初的跟踪曲线到如今用来解决图像处理方面的问题,都彰显它该方法的强大之处。在这里本节只对水平集方法做一个大致的轮廓性的介绍,更多方法原理及思路在下文里做具体的介绍。

    水平集方法广泛应用在医学和航空领域,有着很好的发展前景。这其中最主要的原因在于它对处理空间结构复杂的图像有着无可比拟的优越性和不可替代性,可以肯定的是,在以后的几年里这种方法会发展得更加完善,应用面更广泛。

    2.5 分割算法对比表格

    上一章我们已经介绍过了四种比较热门的图像分割技术,这些技术的实现原理都不相同,比如阈值分割主要基于图像各处灰度值差异不同来完成分割;边缘分割的技术支撑点来源于边缘区域灰度值会发生突变;区域分割技术则是依照某种相似性把图像中的点归为不同的类别;水平集分割也是一种新颖的方法。这一节我们以表格的形式来对比以上几种技术,讨论它们的优缺点和适应方向

    表2.1 分割算法对比

    阈值分割法边缘检测法区域分割法水平集法
    主要思路和原理通过设定阈值来判定所有像元类别,即实现图像分割利用图像中灰度值突变来确定分割边缘,边缘内为目标图像把具有相似性质的像元点归为一类,然后进行像元合并或分割用隐式方程表达闭合曲面,将曲线演化转化成求解偏微分方程
    优点简单有效,在区分不同类别的物体时效果明显检测精度高,能快速确定分割图像边缘区域生长法算法简单,适合分割小图像;分割合并法不需要预先定义种子点算法准确,可以处理拓扑结构复杂,空间形状不单一的图像
    缺点要求图像的灰度直方图有明显的波峰或波谷,对噪声敏感由于噪声也会使灰度值突变,所以对噪声非常敏感区域生长法需要人工定义种子点,不能分割区域面积大的图像。分裂合并法可能会破坏分割图像边缘算法应用泛函和偏微分方程的知识计算量大,对噪声比较敏感


    根据以上图表的对比结合分析:我们可以看出,根据所分割图像的属性不同我们可以选用不用的图像分割方法:

    在一个图像中有不同类别的物体时,可以用阈值分割法来分割出不同种类的物体,然而此方法要求图像灰度直方图有明显波峰和波谷,否则分割效果差;

    当图像分割算法具有高精度,快速性的要求时,可以选用边缘分割法。具体选择何种边缘微分算子应视情况而定, 例如CANNY微分算子就可以有效的改善噪声对边缘分割算法的影响,大部分的边缘分割算法需要预先做去噪处理;

    在目标图像较小时,使用区域生长法能够获得较好的效果;

    当待分割图像拓扑结构变化,外形复杂时使用水平集算法分割较好。

    上诉几点已经比较明确的告诉我们各项技术的优缺点和使用范围,个人认为水平集方法的分割手段适用面广,发展前景比较好,而且它还能适应高维空间的分割,这是其他技术所不能企及的,所以下一章我们具体研究水平集分割技术。

    3基于水平集的图像分割

    3.1 水平集方法简介

    通常情况下,我们所认知的图像都可以看作是前景和背景内容的数据结合,图像分割的目的就是把前景提取出来,然而使用传统的方法不能处理图像轮廓线拓扑变化等等问题,因而水平集方法应运而生,该方法由Osher 和 Sethian 提出,对处理拓扑结构变化的图像有着较好的效果。其核心思想是:把变化的界面曲线方程用高一维的零水平集函数来表示。以这样一种间接的方式来表达闭合曲线,可以把跟踪复杂的曲线演化过程转化成偏微分方程的数值求解问题。当水平集理论用于图像处理领域时都使用零水平集,因此我们可以做如下定义:用Ф表示n+1维(即高维函数),而零水平集可以看作是轮廓线C,C(Ф)=﹛(x,y)︱Ф(x,y)=0﹜,即轮廓线是图像上像素的集合,该集合中满足高维函数的值为 0。[[7]]所以,我们所要做的就是使高维函数的零水平集逼近实际的轮廓线,通过改变高维函数,我们获得了不同的零水平集和不同的轮廓线。


    v2-ec23a2c35ea9d65b6b3ebfb0a6bee814_b.jpg

    v2-fd14e751302f517c072290dc12e8792b_b.jpg


    图3.1 零水平集及其演化

    当我们了解了轮廓线的定义以后我们就很容易理解这样一个事实:任何一个复杂的物体,我们都可以通过分析它的无数个零水平集来还原它的物理形状及拓扑结构。所以水平集方法的优势之处就在于它对复杂物体图像的分割效果好于传统方法。

    3.2 水平集方法在图像分割上的应用

    首先我们来简单了解一下图像分割的核心思想。

    所谓的图像分割,如果用曲线演变的来解释,就是在要分割的图片上,先随便绘制一条包含有分割目标的曲线,然后让这条曲线演变成一条紧紧包围着分割物的曲线,那么图像分割的目的就达到了。而让这条曲线演变的关键就在于控制曲线上的每一个点运动的方向和速度,让它朝着分割物的边缘去移动,当曲线移动停止时,图像分割也就完成了。于是,图像分割的重点就落脚到了控制每一点的运动方向和速度,如何控制曲线的走向成为分割的关键。传统算法通常会求出曲线的参数化方程,但水平集方法所采用的是一种新的思路,它通过把曲线方程转化成高一维函数的零水平集这一做法,把曲线方程的演化变成了高维函数的偏微分方程的求解问题,这样做就会使曲线演化具体化。表面看把曲线表达成高维函数是把问题复杂化了,实际上却给我们提供了很多便利,概括如下:

    1. 当曲线的速度函数连续不间断时,水平集函数始终保持连续性,那么该函数的零水平随着水平集函数的改变而改变,而这些改变即是拓扑结构变化的反应。

    2. 在数学上有相应的近似算法可以实现用水平集函数的零水平集来表达曲线演化,如偏微分方程。

    3. 传统曲线演化表示方法中,曲线的几何特征(曲率、法矢量)求解是一个难题,然后使用此方法就可以直接求得。

    4. 水平集方法对处理高维曲线有着独特的优势,对比其他传统方法,它更容易体现其在高位空间中处理曲线演化的优越性[[8]]。

    这里就不给出曲线演化过程在数字表达式上的表现形式,因为它涉及到偏微分方程以及泛函数的相关知识,本人能力有限不做进一步的探讨。

    3.3 仿真算法介绍


    以下为源代码:

    clear all;
    close all;
    Img = imread('twocells.bmp');  % 读入一副图像
    Img=double(Img(:,:,1));%转变图像格式
    sigma=1.5;    % 设置高斯滤波的参数
    G=fspecial('gaussian',15,sigma);%fspecial用于预定义滤波算子,再此进行高斯滤波,参数分别是[15,1.5]
    Img_smooth=conv2(Img,G,'same');  %  smooth image by Gaussiin convolution
    以G为模板对IMG做卷积运算,可以得到光滑过的IMG图像
    [Ix,Iy]=gradient(Img_smooth);%求光滑过后的图像的水平梯度和垂直梯度
    f=Ix.^2+Iy.^2;
    g=1./(1+f);  % edge indicator function.设置边缘检测函数 
    epsilon=1.5;  the papramater in the definition of smoothed Dirac function
    timestep=5;  % time step定义时间步长
    mu=0.2/timestep;  % coefficient of the internal (penalizing) energy term P(\phi)
    % Note: the product timestep*mu must be less than 0.25 for stability!
    lambda=5; % coefficient of the weighted length term Lg(\phi)
    alf=1.5;  % coefficient of the weighted area term Ag(\phi);
              % Note: Choose a positive(negative) alf if the initial contour is outside(inside) the object.
     
     
    % define initial level set function (LSF) as -c0, 0, c0 at points outside, on
    % the boundary, and inside of a region R, respectively.
    [nrow, ncol]=size(Img);  
    c0=4;   
    initialLSF=c0*ones(nrow,ncol);
    w=8;
    initialLSF(w+1:end-w, w+1:end-w)=0;  % zero level set is on the boundary of R. 
                                         % Note: this can be commented out. The intial LSF does NOT necessarily need a zero level set.
     
    initialLSF(w+2:end-w-1, w+2: end-w-1)=-c0; % negative constant -c0 inside of R, postive constant c0 outside of R.
    u=initialLSF;
    figure;imagesc(Img);colormap(gray);hold on;
    [c,h] = contour(u,[0 0],'r');                          
    title('Initial contour');
     
    % start level set evolution
    for n=1:300
        u=EVOLUTION(u, g ,lambda, mu, alf, epsilon, timestep, 1);     
        if mod(n,20)==0
            pause(0.001);
            imagesc(Img);colormap(gray);hold on;
            [c,h] = contour(u,[0 0],'r'); 
            iterNum=[num2str(n), ' iterations'];        
            title(iterNum);
            hold off;
        end
    end
    imagesc(Img);colormap(gray);hold on;
    [c,h] = contour(u,[0 0],'r'); 
    totalIterNum=[num2str(n), ' iterations'];  
    title(['Final contour, ', totalIterNum])[[10]];

    3.4 实验仿真及其结果

    (1)由系统给定初始化曲线

    本实验在MATLAB 2012a软件下进行仿真,原图是一副像素为83x65的图片,系统自动画出初始轮廓曲线


    v2-8a8370013ff4297ce4ffc4966e63e00d_b.jpg


    图3.2 原图像和初始轮廓线

    此时我们选用迭代次数n=50,迭代时间间隔t=0.001s即初始曲线进行50次更新,每次更新时间间隔为0.001秒,然后观察曲线的走向。


    v2-074fd9b29c018b6ceab0f914b18ae352_b.jpg


    图3.3 分割过程图像

    可以从图中看出曲线正在朝要分割的两个细胞靠拢,但此时的曲线并不光滑,因而可以得出结论:曲线演化还没有完成。

    当迭代了100次时:


    v2-e63b9e143b4650e75a61be72a399cfca_b.jpg


    图3.4 分割过程图像

    曲线已经包拢了两个细胞,但还没有分割完全。

    当迭代了200次时:


    v2-a4dad4a50ed5e08ef2c26a61b09960c0_b.jpg


    图3.5 分割完成图像


    分割已经大致完成,曲线已经比较光滑。我们可以看一下迭代300次是什么结果。

    迭代300次:


    v2-15d154b3925ae24b0534c735882a8787_b.jpg


    图3.6 迭代300次分割图像

    曲线几乎与200次无异,这是因为指引曲线演化的函数已经检测到了在这个区域的曲线位置具有最小的泛函能量值,如果继续迭代的话只是稍微修正曲线的边缘,使之更加平滑。到这个阶段我们就可以说分割结束了。

    同样我们在换一副图也可以完成图像分割:原图像素是84x84,系统自动画出初始轮廓曲线


    v2-4260424ad940b595425adf945e1d5ab4_b.jpg


    图3.7 分割初始图像

    我们设置迭代次数n=250,每次迭代时间间隔t=0.001s;分割后的图像如下:


    v2-fe72bc79e13ec6b33afd4a7014433b08_b.jpg


    图3.8 分割完成图像

    可以看到初始轮廓线经过演变以后已经围绕在物体周围,此时图像已经完成分割。

    (2)自定义初始化曲线

    实验一:



    v2-e41e6a892f940e7c939a3d5d0cf5966f_b.jpg


    图3.9 自定义初始轮廓线图像

    系统会根据我们所画的初始轨迹来拟合出一条相似度最高的初始曲线,如下图


    v2-470255f55968d4f07918800fb70e9ed4_b.jpg


    图3.10 系统自动分配初始轮廓线

    同样我们还是和上一个实验取同样的参数,即迭代次数n=300,时间间隔t=0.001s


    v2-ceb808caf55ec8015762246c7d321a30_b.jpg


    图3.11 分割完成图像

    实验二:


    v2-bcde3b03856c0bd6129350bd02eab416_b.jpg


    图3.12 自定义初始轮廓线图像

    保证与上一个实验具有同样的参数n=250,t=0.001s


    v2-c6db30451335576d32309def100026ba_b.jpg


    图3.13 系统分配初始轮廓线图像


    v2-5381f9f001bdf89742bc88f83bc927e4_b.jpg


    图3.14 分割完成图像

    结论:以上实验结果表明,当实验参数选择合适时该算法可以准确的完成图像分割,而且通过以上实验结果的对照,我们可以认定,图像分割的最终结果与初始轮廓线的选取没有关系。它仅仅于图像本身的特征属性相关,因而有时我们也可以人工定义初始化轮廓线,从而达到简洁算法的目的。

    结论

    图像分割是图像处理技术当中一项重要的分支,它对一副图像的简化提高了人们对图像的研究效率。对图像分割技术的研究一直是数字图像处理技术当中一个热门且不可忽视的重点。它是从低级图像分割转变为高级图像分割的一个分水岭,所以近些年来对图像分割技术研究的迅猛发展极大的促进了数字图像技术的发展和创新,使它在高速发展的模式识别领域占有不可替代的地位。

    本文主要对现有的图像分割技术做了系统性的归纳和阐述,详细介绍了当今常用的四种图像分割算法的原理,并对它们做了MATLAB仿真研究,得出了它们各自性能的优缺点:基于边缘的分割方法检测精度高,能快速确定分割图像边缘,但会明显的受到噪声的干扰;区域生长算法大多用于处理分割小型图像。因为一旦图像面积过大,该算法的计算速度会变得明显迟缓,而且需要它研究人员有很好的处理经验,去人工预先定义种子点;阈值分割算法简单有效,在区分不同类别的物体时效果明显;而水平集分割算法适用于研究拓扑结构复杂,空间形状不单一的图像,并且快速性和准确性都优于以上算法。因此我们重点研究仿真了水平集分割技术。并对其中参数设置和初始轮廓的演化做了重点分析和研究,总结出了以下结论:在迭代次数允许的范围之内,迭代次数越大分割进行的越彻底,而迭代次数超过一定数值时,只会使曲线边缘更加光滑,而不会改变曲线的轮廓形状。而且曲线的初始轮廓线的选取并不会影响曲线演化的进程,所以我们可以人为的选取初始轮廓线,这样可以达到简化程序的目的。


    参考文献


    1. [] 许录平.数字图像处理[M].北京:科技出版社,2017.
    2. [] Rafael C. Gonzalez, Richard E. Woods. Digital Image Processing Second Edition. [M]. 北京:
      电子工业出版社,2012.
    3. [] 章毓晋.图像分割[M],科学出版社,2011
    4. [] 全刚.基于活动轮廓的图像分割方法研究[D].北京:国防科技大学,2010
    5. [] 韦明祥.基于水平集方法的医学图像分割算法研究[D].西安:西安电子科技大学,2012.
    6. [] KUN_Guo.图像处理(九)边缘检测(一)[OL]
    7. [] 聂斌.医学图像分割技术及其进展[J],泰山医学院学报,2012,23(4):422一426
    8. [] Kass M,Witkin A,Terzopoulos D, Shakes: Active contour models,International Journal of
      Computer Vision, 1987, 1(4): 321-331
    9. [] 徐京.基于水平集的医学图像分割算法研究[D].吉林:吉林大学,2014
    10. [] ChunMing.Li.Level Set Evolution Without Re-initialization: A New Variational Formulation[D],2018:430-436
    展开全文
  • PCA算法是基于图像重构的方法进行图像特征识别的。内有训练样本、多个测试图片以及文档说明。 识别步骤: ① 选择训练样本 ② 计算样本平均数字特征,数字特征空间 ③ 读取待识别数字,进行连通分量分割,确定需要...
  • 图像分割技术介绍 边缘分割技术 图像中的线段 微分算子 Canny算子 LOG算子 阈值分割技术 全局阈值 Otsu阈值分割 迭代式阈值分割 区域分割技术 区域生长法 分水岭分割

    图像分割技术介绍

    边缘分割技术

    图像中的线段

    close all; clear all; clc;
    I=imread('gantrycrane.png');
    I=rgb2gray(I);
    h1=[-1, -1. -1; 2, 2, 2; -1, -1, -1];   %模板
    h2=[-1, -1, 2; -1, 2, -1; 2, -1, -1];
    h3=[-1, 2, -1; -1, 2, -1; -1, 2, -1];
    h4=[2, -1, -1; -1, 2, -1; -1, -1, 2];
    J1=imfilter(I,h1);          %线段检测
    J2=imfilter(I,h2);
    J3=imfilter(I,h3);
    J4=imfilter(I,h4);
    J=J1+J2+J3+J4;              %4条线段叠加
    figure; 
    subplot(121);imshow(I);     %显示灰度图像
    subplot(122);imshow(J);     %显示检测到的线段
    

    微分算子

    梯度算子

    仅计算相邻像素的灰度差,对噪声比较敏感,无法抑制噪声的影响。

    Roberts算子

    用垂直和水平差分来逼近梯度算子
    与梯度算子检测边缘的方法类似,对噪声敏感,但效果较梯度算子略好。

    close all; clear all; clc;
    I=imread('rice.png');
    I=im2double(I);
    [J,thresh]=edge(I,'roberts',35/255); %Roberts算子进行边缘检测(分割阈值35/255)
    figure; 
    subplot(121);imshow(I);     %显示原始图像
    subplot(122);imshow(J);     %显示边缘图像
    

    Prewitt算子

    图像的水平梯度和垂直梯度
    在检测边缘的同时也能抑制噪声的影响。

    close all; clear all; clc;
    I=imread('cameraman.tif');
    I=im2double(I);
    [J,thresh]=edge(I,'prewitt',[],'both'); %prewitt算子进行边缘检测
    figure; 
    subplot(121);imshow(I);     %显示原始图像
    subplot(122);imshow(J);     %显示边缘图像
    

    Sobel算子

    对4邻域采用带权方法计算差分;进一步抑制噪声;但检测的边缘较宽。

    close all; clear all; clc;
    I=imread('gantrycrane.png');
    I=rgb2gray(I);
    I=im2double(I);
    [J,thresh]=edge(I,'sobel',[],'horizontal'); %sobel算子进行边缘检测
    figure; 
    subplot(121);imshow(I);     %显示原始图像
    subplot(122);imshow(J);     %显示边缘图像
    

    Canny算子

    低误码率、高定位精度和抑制虚假边缘等优点。

    close all; clear all; clc;
    I=imread('rice.png');
    I=im2double(I);
    J=imnoise(I,'gaussian',0,0.01);  %添加高斯噪声
    [K,thresh]=edge(J,'canny');      %Canny算子进行边缘检测
    figure; 
    subplot(121);imshow(J);     %显示原始图像
    subplot(122);imshow(K);     %显示边缘图像
    

    LOG算子(Guassian函数+拉普拉斯Laplacian算子)

    拉普拉斯算子

    二阶微分算子
    优点:各向同性、线性和位移不变的;对细线和孤立点检测效果较好。
    缺点:对噪声敏感,有双倍加强作用;不能检测出边的方向;常产生双像素的边缘。

    由于梯度算子和拉普拉斯算子对噪声敏感,因此一般在用它们检测边缘前要先对图像进行平滑。

    LOG算子

    LOG算子:首先采用Guassian函数对图像进行平滑,然后采用Laplacian算子根据二阶导数过零点来检测图像边缘。
    优点:边界定位精度高,抗干扰能力强,连续性好等。

    close all; clear all; clc;
    I=imread('cameraman.tif');
    I=im2double(I);
    J=imnoise(I,'gaussian',0,0.005);  %添加高斯噪声
    [K,thresh]=edge(J,'log',[],2.3);      %LOG算子进行边缘检测
    figure; 
    subplot(121);imshow(J);     %显示原始图像
    subplot(122);imshow(K);     %显示边缘图像
    

    阈值分割技术

    阈值分割技术:寻找合适的阈值,通常根据图像的直方图来选取。

    全局阈值

    分成两个区域:目标对象和背景对象,选取直方图中波谷点的灰度值作为全局阈值,对图像进行阈值分割,将图像中的物体和背景分割开。

    close all; clear all; clc;
    I=imread('rice.png');
    figure; 
    subplot(121);imshow(I);     %显示图像
    subplot(122);imhist(I,200); %显示直方图
    
    close all; clear all; clc;
    I=imread('rice.png');
    J=I>120;                 %图像分割,阈值为120
    [width,height]=size(I);  %图像的行和列
    for i=1:width
        for j=1:height
            if (I(i,j)>130)  %图像分割,阈值为130
                K(i,j)=1;
            else
                K(i,j)=0;
            end
        end
    end
    figure; 
    subplot(121);imshow(J);     
    subplot(122);imshow(K); 
    

    im2bw(I,level); 将灰度图像转换为二值图像

    close all; clear all; clc;
    [X, map]=imread('trees.tif'); 
    J=ind2gray(X,map);  %索引图像转换为灰度图像
    K=im2bw(X,map,0.4); %图像分割
    figure; 
    subplot(121);imshow(J);     
    subplot(122);imshow(K); 
    

    Otsu阈值分割(最大类间方差法)

    Otsu算法:在灰度直方图的基础上采用最小二乘法原理推导出来的,具有统计意义上的最佳分割。
    基本原理:以最佳阈值将图像的灰度值分割成两部分,使两部分之间的方差最大,即具有最大的分离性。

    close all; clear all; clc;
    I=imread('coins.png');
    I=im2double(I); 
    T=graythresh(I);   %获取阈值
    J=im2bw(I,T);      %图像分割
    figure; 
    subplot(121);imshow(I);     
    subplot(122);imshow(J); 
    

    迭代式阈值分割

    迭代阈值法:阈值法图像分割中比较有效的方法,通过迭代的方法来求出分割的最佳阈值,具有一定的自适应性。

    区域分割技术

    区域生长法

    优点:顾及了像素的连续性
    缺点:区域增长是一种迭代的方法,空间和事件开销都比较大。
    区域生长:一种串行区域分割的图像分割方法。
    基本思想:将具有相似性质的像素集合起来构成区域。
    具体步骤:1.选择一个或一组种子;
    2.选择特征及相似性判决准则;
    3.从该种子开始向外生长,首先将判断种子领域的像素是否满足相似性条件,满足则与种子合并成区域,然后以合并的像素为生长点,采用类似的方法进行生长
    4.反复3操作,直到不再有满足条件的像点合并到区域为止。

    分水岭分割

    分水岭分割:借鉴了形态学理论,相当于一个自适应的多阈值分割算法。
    基本思想:在该方法中,将一幅图像看成一个地形图,灰度值对应地形的高度值,高灰度对应着山峰,低灰度对应着山谷。水总是朝地势低的地方流动,直到某个局部低洼处,这个低洼处就是盆地。最终所有的水都会处于不同的盆地,盆地之间的山脊称为分水岭。
    分水岭分割函数:watershed()

    close all; clear all; clc;
    I=imread('circbw.tif');
    J=watershed(I,8);   %分水岭分割
    figure; 
    subplot(121);imshow(I);     
    subplot(122);imshow(J); 
    
    展开全文
  • 怎么将轴承图像中有文字的区域提取出来?![图片](https://img-ask.csdn.net/upload/201605/02/1462189867_633846.bmp)
  • 图像分割综述

    万次阅读 多人点赞 2019-07-09 22:03:48
    图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的问题之一。所谓图像分割...

    本文作者净浩泽,公众号:计算机视觉life,编辑成员

    图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的问题之一。所谓图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显的不同。简单的说就是在一副图像中,把目标从背景中分离出来。对于灰度图像来说,区域内部的像素一般具有灰度相似性,而在区域的边界上一般具有灰度不连续性。 关于图像分割技术,由于问题本身的重要性和困难性,从20世纪70年代起图像分割问题就吸引了很多研究人员为之付出了巨大的努力。虽然到目前为止,还不存在一个通用的完美的图像分割的方法,但是对于图像分割的一般性规律则基本上已经达成的共识,已经产生了相当多的研究成果和方法。

    本文对于目前正在使用的各种图像分割方法进行了一定的归纳总结,由于笔者对于图像分割的了解也是初窥门径,所以难免会有一些错误,还望各位读者多多指正,共同学习进步。

    传统分割方法

    这一大部分我们将要介绍的是深度学习大火之前人们利用数字图像处理、拓扑学、数学等方面的只是来进行图像分割的方法。当然现在随着算力的增加以及深度学习的不断发展,一些传统的分割方法在效果上已经不能与基于深度学习的分割方法相比较了,但是有些天才的思想还是非常值得我们去学习的。
    1.基于阈值的分割方法
    阈值法的基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值作比较,最后将像素根据比较结果分到合适的类别中。因此,该方法最为关键的一步就是按照某个准则函数来求解最佳灰度阈值。
    阈值法特别适用于目标和背景占据不同灰度级范围的图。
    图像若只有目标和背景两大类,那么只需要选取一个阈值进行分割,此方法成为单阈值分割;但是如果图像中有多个目标需要提取,单一阈值的分割就会出现作物,在这种情况下就需要选取多个阈值将每个目标分隔开,这种分割方法相应的成为多阈值分割。

    如图所示即为对数字的一种阈值分割方法。
    阀值分割方法的优缺点:

    • 计算简单,效率较高;
    • 只考虑像素点灰度值本身的特征,一般不考虑空间特征,因此对噪声比较敏感,鲁棒性不高。
      从前面的介绍里我们可以看出,阈值分割方法的最关键就在于阈值的选择。若将智能遗传算法应用在阀值筛选上,选取能最优分割图像的阀值,这可能是基于阀值分割的图像分割法的发展趋势。
      2.基于区域的图像分割方法
      基于区域的分割方法是以直接寻找区域为基础的分割技术,基于区域提取方法有两种基本形式:一种是区域生长,从单个像素出发,逐步合并以形成所需要的分割区域;另一种是从全局出发,逐步切割至所需的分割区域。
      区域生长
      区域生长是从一组代表不同生长区域的种子像素开始,接下来将种子像素邻域里符合条件的像素合并到种子像素所代表的生长区域中,并将新添加的像素作为新的种子像素继续合并过程,知道找不到符合条件的新像素为止(小编研一第一学期的机器学习期末考试就是手写该算法 T.T),该方法的关键是选择合适的初始种子像素以及合理的生长准则。
      区域生长算法需要解决的三个问题:
      (1)选择或确定一组能正确代表所需区域的种子像素;
      (2)确定在生长过程中能将相邻像素包括进来的准则;
      (3)指定让生长过程停止的条件或规则。
      区域分裂合并
      区域生长是从某个或者某些像素点出发,最终得到整个区域,进而实现目标的提取。而分裂合并可以说是区域生长的逆过程,从整幅图像出发,不断的分裂得到各个子区域,然后再把前景区域合并,得到需要分割的前景目标,进而实现目标的提取。其实如果理解了上面的区域生长算法这个区域分裂合并算法就比较好理解啦。
      四叉树分解法就是一种典型的区域分裂合并法,基本算法如下:
      (1)对于任一区域,如果H(Ri)=FALSE就将其分裂成不重叠的四等分;
      (2)对相邻的两个区域Ri和Rj,它们也可以大小不同(即不在同一层),如果条件H(RiURj)=TURE满足,就将它们合并起来;
      (3)如果进一步的分裂或合并都不可能,则结束。
      其中R代表整个正方形图像区域,P代表逻辑词。
      区域分裂合并算法优缺点:
      (1)对复杂图像分割效果好;
      (2)算法复杂,计算量大;
      (3)分裂有可能破怪区域的边界。
      在实际应用当中通常将区域生长算法和区域分裂合并算法结合使用,该类算法对某些复杂物体定义的复杂场景的分割或者对某些自然景物的分割等类似先验知识不足的图像分割效果较为理想。
      分水岭算法
      分水岭算法是一个非常好理解的算法,它根据分水岭的构成来考虑图像的分割,现实中我们可以想象成有山和湖的景象,那么一定是如下图的,水绕山山围水的景象。
      分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。
      分水岭对微弱边缘具有良好的响应,图像中的噪声、物体表面细微的灰度变化都有可能产生过度分割的现象,但是这也同时能够保证得到封闭连续边缘。同时,分水岭算法得到的封闭的集水盆也为分析图像的区域特征提供了可能。

    3.基于边缘检测的分割方法

    基于边缘检测的图像分割算法试图通过检测包含不同区域的边缘来解决分割问题。它可以说是人们最先想到也是研究最多的方法之一。通常不同区域的边界上像素的灰度值变化比较剧烈,如果将图片从空间域通过傅里叶变换到频率域,边缘就对应着高频部分,这是一种非常简单的边缘检测算法。
    边缘检测技术通常可以按照处理的技术分为串行边缘检测和并行边缘检测。串行边缘检测是要想确定当前像素点是否属于检测边缘上的一点,取决于先前像素的验证结果。并行边缘检测是一个像素点是否属于检测边缘高尚的一点取决于当前正在检测的像素点以及与该像素点的一些临近像素点。
    最简单的边缘检测方法是并行微分算子法,它利用相邻区域的像素值不连续的性质,采用一阶或者二阶导数来检测边缘点。近年来还提出了基于曲面拟合的方法、基于边界曲线拟合的方法、基于反应-扩散方程的方法、串行边界查找、基于变形模型的方法。

    边缘检测的优缺点:
    (1)边缘定位准确;
    (2)速度快;
    (3)不能保证边缘的连续性和封闭性;
    (4)在高细节区域存在大量的碎边缘,难以形成一个大区域,但是又不宜将高细节区域分成小碎片;
    由于上述的(3)(4)两个难点,边缘检测只能产生边缘点,而非完整意义上的图像分割过程。这也就是说,在边缘点信息获取到之后还需要后续的处理或者其他相关算法相结合才能完成分割任务。
    在以后的研究当中,用于提取初始边缘点的自适应阈值选取、用于图像的层次分割的更大区域的选取以及如何确认重要边缘以去除假边缘将变得非常重要。

    结合特定工具的图像分割算法

    基于小波分析和小波变换的图像分割方法

    小波变换是近年来得到的广泛应用的数学工具,也是现在数字图像处理必学部分,它在时间域和频率域上都有量高的局部化性质,能将时域和频域统一于一体来研究信号。而且小波变换具有多尺度特性,能够在不同尺度上对信号进行分析,因此在图像分割方面的得到了应用,
    二进小波变换具有检测二元函数的局部突变能力,因此可作为图像边缘检测工具。图像的边缘出现在图像局部灰度不连续处,对应于二进小波变换的模极大值点。通过检测小波变换模极大值点可以确定图像的边缘小波变换位于各个尺度上,而每个尺度上的小波变换都能提供一定的边缘信息,因此可进行多尺度边缘检测来得到比较理想的图像边缘。

    上图左图是传统的阈值分割方法,右边的图像就是利用小波变换的图像分割。可以看出右图分割得到的边缘更加准确和清晰
    另外,将小波和其他方法结合起来处理图像分割的问题也得到了广泛研究,比如一种局部自适应阈值法就是将Hilbert图像扫描和小波相结合,从而获得了连续光滑的阈值曲线。

    基于遗传算法的图像分割

    ​ 遗传算法(Genetic Algorithms,简称GA)是1973年由美国教授Holland提出的,是一种借鉴生物界自然选择和自然遗传机制的随机化搜索算法。是仿生学在数学领域的应用。其基本思想是,模拟由一些基因串控制的生物群体的进化过程,把该过程的原理应用到搜索算法中,以提高寻优的速度和质量。此算法的搜索过程不直接作用在变量上,而是在参数集进行了编码的个体,这使得遗传算法可直接对结构对象(图像)进行操作。整个搜索过程是从一组解迭代到另一组解,采用同时处理群体中多个个体的方法,降低了陷入局部最优解的可能性,并易于并行化。搜索过程采用概率的变迁规则来指导搜索方向,而不采用确定性搜索规则,而且对搜索空间没有任何特殊要求(如连通性、凸性等),只利用适应性信息,不需要导数等其他辅助信息,适应范围广。
    ​ 遗传算法擅长于全局搜索,但局部搜索能力不足,所以常把遗传算法和其他算法结合起来应用。将遗传算法运用到图像处理主要是考虑到遗传算法具有与问题领域无关且快速随机的搜索能力。其搜索从群体出发,具有潜在的并行性,可以进行多个个体的同时比较,能有效的加快图像处理的速度。但是遗传算法也有其缺点:搜索所使用的评价函数的设计、初始种群的选择有一定的依赖性等。要是能够结合一些启发算法进行改进且遗传算法的并行机制的潜力得到充分的利用,这是当前遗传算法在图像处理中的一个研究热点。

    基于主动轮廓模型的分割方法

    ​ 主动轮廓模型(active contours)是图像分割的一种重要方法,具有统一的开放式的描述形式,为图像分割技术的研究和创新提供了理想的框架。在实现主动轮廓模型时,可以灵活的选择约束力、初始轮廓和作用域等,以得到更佳的分割效果,所以主动轮廓模型方法受到越来越多的关注。
    ​ 该方法是在给定图像中利用曲线演化来检测目标的一类方法,基于此可以得到精确的边缘信息。其基本思想是,先定义初始曲线C,然后根据图像数据得到能量函数,通过最小化能量函数来引发曲线变化,使其向目标边缘逐渐逼近,最终找到目标边缘。这种动态逼近方法所求得的边缘曲线具有封闭、光滑等优点。

    ​ 传统的主动轮廓模型大致分为参数主动轮廓模型和几何主动轮廓模型。参数主动轮廓模型将曲线或曲面的形变以参数化形式表达,Kass等人提出了经典的参数活动轮廓模型即“Snake”模型,其中Snake定义为能量极小化的样条曲线,它在来自曲线自身的内力和来自图像数据的外力的共同作用下移动到感兴趣的边缘,内力用于约束曲线形状,而外力则引导曲线到特征此边缘。参数主动轮廓模型的特点是将初始曲线置于目标区域附近,无需人为设定曲线的的演化是收缩或膨胀,其优点是能够与模型直接进行交互,且模型表达紧凑,实现速度快;其缺点是难以处理模型拓扑结构的变化。比如曲线的合并或分裂等。而使用水平集(level set)的几何活动轮廓方法恰好解决了这一问题。

    基于深度学习的分割

    1.基于特征编码(feature encoder based)

    在特征提取领域中VGGnet和ResNet是两个非常有统治力的方法,接下来的一些篇幅会对这两个方法进行简短的介绍

    a.VGGNet

    ​ 由牛津大学计算机视觉组合和Google DeepMind公司研究员一起研发的深度卷积神经网络。它探索了卷积神经网络的深度和其性能之间的关系,通过反复的堆叠33的小型卷积核和22的最大池化层,成功的构建了16~19层深的卷积神经网络。VGGNet获得了ILSVRC 2014年比赛的亚军和定位项目的冠军,在top5上的错误率为7.5%。目前为止,VGGNet依然被用来提取图像的特征。

    ​ VGGNet的优缺点

    1. 由于参数量主要集中在最后的三个FC当中,所以网络加深并不会带来参数爆炸的问题;
    2. 多个小核卷积层的感受野等同于一个大核卷积层(三个3x3等同于一个7x7)但是参数量远少于大核卷积层而且非线性操作也多于后者,使得其学习能力较强
    3. VGG由于层数多而且最后的三个全连接层参数众多,导致其占用了更多的内存(140M)
    b.ResNet

    ​ 随着深度学习的应用,各种深度学习模型随之出现,虽然在每年都会出现性能更好的新模型,但是对于前人工作的提升却不是那么明显,其中有重要问题就是深度学习网络在堆叠到一定深度的时候会出现梯度消失的现象,导致误差升高效果变差,后向传播时无法将梯度反馈到前面的网络层,使得前方的网络层的参数难以更新,训练效果变差。这个时候ResNet恰好站出来,成为深度学习发展历程中一个重要的转折点。
    ​ ResNet是由微软研究院的Kaiming He等四名华人提出,他们通过自己提出的ResNet Unit成功训练出来152层的神经网络并在ILSVRC2015比赛中斩获冠军。ResNet语义分割领域最受欢迎且最广泛运用的神经网络.ResNet的核心思想就是在网络中引入恒等映射,允许原始输入信息直接传到后面的层中,在学习过程中可以只学习上一个网络输出的残差(F(x)),因此ResNet又叫做残差网络。、

    使用到ResNet的分割模型:

    • Efficient Neural Network(ENet):该网络类似于ResNet的bottleNeck方法;
    • ResNet-38:该网络在训练or测试阶段增加并移除了一些层,是一种浅层网络,它的结构是ResNet+FCN;
    • full-resolution residual network(FRRN):FRRN网络具有和ResNet相同优越的训练特性,它由残差流和池化流两个处理流组成;
    • AdapNey:根据ResNet-50的网络进行改进,让原本的ResNet网络能够在更短的时间内学习到更多高分辨率的特征;
      ……
      ResNet的优缺点:
      1)引入了全新的网络结构(残差学习模块),形成了新的网络结构,可以使网络尽可能地加深;
      2)使得前馈/反馈传播算法能够顺利进行,结构更加简单;
      3)恒等映射地增加基本上不会降低网络的性能;
      4)建设性地解决了网络训练的越深,误差升高,梯度消失越明显的问题;
      5)由于ResNet搭建的层数众多,所以需要的训练时间也比平常网络要长。

    2.基于区域选择(regional proposal based)

    Regional proposal 在计算机视觉领域是一个非常常用的算法,尤其是在目标检测领域。其核心思想就是检测颜色空间和相似矩阵,根据这些来检测待检测的区域。然后根据检测结果可以进行分类预测。
    在语义分割领域,基于区域选择的几个算法主要是由前人的有关于目标检测的工作渐渐延伸到语义分割的领域的,接下来小编将逐步介绍其个中关系。

    Stage Ⅰ: R-CNN

    伯克利大学的Girshick教授等人共同提出了首个在目标检测方向应用的深度学习模型:Region-based Convolutional Neural Network(R-CNN)。该网络模型如下图所示,其主要流程为:先使用selective search算法提取2000个候选框,然后通过卷积网络对候选框进行串行的特征提取,再根据提取的特征使用SVM对候选框进行分类预测,最后使用回归方法对区域框进行修正。

    R-CNN的优缺点:

    • 是首个开创性地将深度神经网络应用到目标检测的算法;
    • 使用Bounding Box Regression对目标检测的框进行调整;
    • 由于进行特征提取时是串行,处理耗时过长;
    • Selective search算法在提取每一个region时需要2s的时间,浪费大量时间
    Stage Ⅱ:Fast R-CNN

    ​ 由于R-CNN的效率太低,2015年由Ross等学者提出了它的改进版本:Fast R-CNN。其网络结构图如下图所示(从提取特征开始,略掉了region的选择)Fast R-CNN在传统的R-CNN模型上有所改进的地方是它是直接使用一个神经网络对整个图像进行特征提取,就省去了串行提取特征的时间;接着使用一个RoI Pooling Layer在全图的特征图上摘取每一个RoI对应的特征,再通过FC进行分类和包围框的修正。

    Fast R-CNN的优缺点

    • 节省了串行提取特征的时间;
    • 除了selective search以外的其它所有模块都可以合在一起训练;
    • 最耗时间的selective search算法依然存在。
    Stage Ⅲ:Faster R-CNN

    2016年提出的Faster R-CNN可以说有了突破性的进展(虽然还是目标检测哈哈哈),因为它改变了它的前辈们最耗时最致命的部位:selective search算法。它将selective search算法替换成为RPN,使用RPN网络进行region的选取,将2s的时间降低到10ms,其网络结构如下图所示:

    Faster R-CNN优缺点:

    • 使用RPN替换了耗时的selective search算法,对整个网络结构有了突破性的优化;
    • Faster R-CNN中使用的RPN和selective search比起来虽然速度更快,但是精度和selective search相比稍有不及,如果更注重速度而不是精度的话完全可以只使用RPN;
    Stage Ⅳ:Mask R-CNN

    Mask R-CNN(终于到分割了!)是何恺明大神团队提出的一个基于Faster R-CNN模型的一种新型的分割模型,此论文斩获ICCV 2017的最佳论文,在Mask R-CNN的工作中,它主要完成了三件事情:目标检测,目标分类,像素级分割。
    恺明大神是在Faster R-CNN的结构基础上加上了Mask预测分支,并且改良了ROI Pooling,提出了ROI Align。其网络结构真容就如下图所示啦:

    Mask R-CNN的优缺点:

    • 引入了预测用的Mask-Head,以像素到像素的方式来预测分割掩膜,并且效果很好;
    • 用ROI Align替代了ROI Pooling,去除了RoI Pooling的粗量化,使得提取的特征与输入良好对齐;
    • 分类框与预测掩膜共享评价函数,虽然大多数时间影响不大,但是有的时候会对分割结果有所干扰。
    Stage Ⅴ:Mask Scoring R-CNN

    最后要提出的是2019年CVPR的oral,来自华中科技大学的研究生黄钊金同学提出的
    MS R-CNN,这篇文章的提出主要是对上文所说的Mask R-CNN的一点点缺点进行了修正。他的网络结构也是在Mask R-CNN的网络基础上做了一点小小的改进,添加了Mask-IoU。
    黄同学在文章中提到:恺明大神的Mask R-CNN已经很好啦!但是有个小毛病,就是评价函数只对目标检测的候选框进行打分,而不是分割模板(就是上文提到的优缺点中最后一点),所以会出现分割模板效果很差但是打分很高的情况。所以黄同学增加了对模板进行打分的MaskIoU Head,并且最终的分割结果在COCO数据集上超越了恺明大神,下面就是MS R-CNN的网络结构啦~

    MS R-CNN的优缺点:

    • 优化了Mask R-CNN中的信息传播,提高了生成预测模板的质量;
    • 未经大批量训练的情况下,就拿下了COCO 2017挑战赛实例分割任务冠军;
    • 要说缺点的话。。应该就是整个网络有些庞大,一方面需要ResNet当作主干网络,另一方面需要其它各种Head共同承担各种任务。

    3.基于RNN的图像分割

    Recurrent neural networks(RNNs)除了在手写和语音识别上表现出色外,在解决计算机视觉的任务上也表现不俗,在本篇文章中我们就将要介绍RNN在2D图像处理上的一些应用,其中也包括介绍使用到它的结构或者思想的一些模型。
    RNN是由Long-Short-Term Memory(LSTM)块组成的网络,RNN来自序列数据的长期学习的能力以及随着序列保存记忆的能力使其在许多计算机视觉的任务中游刃有余,其中也包括语义分割以及数据标注的任务。接下来的部分我们将介绍几个使用到RNN结构的用于分割的网络结构模型:

    1.ReSeg模型

    ReSeg可能不被许多人所熟知,在百度上搜索出的相关说明与解析也不多,但是这是一个很有效的语义分割方法。众所周知,FCN可谓是图像分割领域的开山作,而RegNet的作者则在自己的文章中大胆的提出了FCN的不足:没有考虑到局部或者全局的上下文依赖关系,而在语义分割中这种依赖关系是非常有用的。所以在ReSeg中作者使用RNN去检索上下文信息,以此作为分割的一部分依据。

    该结构的核心就是Recurrent Layer,它由多个RNN组合在一起,捕获输入数据的局部和全局空间结构。
    优缺点:

    • 充分考虑了上下文信息关系;
    • 使用了中值频率平衡,它通过类的中位数(在训练集上计算)和每个类的频率之间的比值来重新加权类的预测。这就增加了低频率类的分数,这是一个更有噪声的分割掩码的代价,因为被低估的类的概率被高估了,并且可能导致在输出分割掩码中错误分类的像素增加。
    2.MDRNNs(Multi-Dimensional Recurrent Neural Networks)模型

    传统的RNN在一维序列学习问题上有着很好的表现,比如演讲(speech)和在线手写识别。但是 在多为问题中应用却并不到位。MDRNNs在一定程度上将RNN拓展到多维空间领域,使之在图像处理、视频处理等领域上也能有所表现。
    该论文的基本思想是:将单个递归连接替换为多个递归连接,相应可以在一定程度上解决时间随数据样本的增加呈指数增长的问题。以下就是该论文提出的两个前向反馈和反向反馈的算法。

    4.基于上采样/反卷积的分割方法

    卷积神经网络在进行采样的时候会丢失部分细节信息,这样的目的是得到更具特征的价值。但是这个过程是不可逆的,有的时候会导致后面进行操作的时候图像的分辨率太低,出现细节丢失等问题。因此我们通过上采样在一定程度上可以不全一些丢失的信息,从而得到更加准确的分割边界。
    接下来介绍几个非常著名的分割模型:

    a.FCN(Fully Convolutional Network)

    是的!讲来讲去终于讲到这位大佬了,FCN!在图像分割领域已然成为一个业界标杆,大多数的分割方法多多少少都会利用到FCN或者其中的一部分,比如前面我们讲过的Mask R-CNN。
    在FCN当中的反卷积-升采样结构中,图片会先进性上采样(扩大像素);再进行卷积——通过学习获得权值。FCN的网络结构如下图所示:

    当然最后我们还是需要分析一下FCN,不能无脑吹啦~
    优缺点:

    • FCN对图像进行了像素级的分类,从而解决了语义级别的图像分割问题;
    • FCN可以接受任意尺寸的输入图像,可以保留下原始输入图像中的空间信息;
    • 得到的结果由于上采样的原因比较模糊和平滑,对图像中的细节不敏感;
    • 对各个像素分别进行分类,没有充分考虑像素与像素的关系,缺乏空间一致性。
    2.SetNet

    SegNet是剑桥提出的旨在解决自动驾驶或者智能机器人的图像语义分割深度网络,SegNet基于FCN,与FCN的思路十分相似,只是其编码-解码器和FCN的稍有不同,其解码器中使用去池化对特征图进行上采样,并在分各种保持高频细节的完整性;而编码器不使用全连接层,因此是拥有较少参数的轻量级网络:

    图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的问题之一。所谓图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显的不同。简单的说就是在一副图像中,把目标从背景中分离出来。对于灰度图像来说,区域内部的像素一般具有灰度相似性,而在区域的边界上一般具有灰度不连续性。 关于图像分割技术,由于问题本身的重要性和困难性,从20世纪70年代起图像分割问题就吸引了很多研究人员为之付出了巨大的努力。虽然到目前为止,还不存在一个通用的完美的图像分割的方法,但是对于图像分割的一般性规律则基本上已经达成的共识,已经产生了相当多的研究成果和方法。

    本文对于目前正在使用的各种图像分割方法进行了一定的归纳总结,由于笔者对于图像分割的了解也是初窥门径,所以难免会有一些错误,还望各位读者多多指正,共同学习进步。

    SetNet的优缺点:

    • 保存了高频部分的完整性;
    • 网络不笨重,参数少,较为轻便;
    • 对于分类的边界位置置信度较低;
    • 对于难以分辨的类别,例如人与自行车,两者如果有相互重叠,不确定性会增加。
      以上两种网络结构就是基于反卷积/上采样的分割方法,当然其中最最最重要的就是FCN了,哪怕是后面大名鼎鼎的SegNet也是基于FCN架构的,而且FCN可谓是语义分割领域中开创级别的网络结构,所以虽然这个部分虽然只有两个网络结构,但是这两位可都是重量级嘉宾,希望各位能够深刻理解~

    5.基于提高特征分辨率的分割方法

    在这一个模块中我们主要给大家介绍一下基于提升特征分辨率的图像分割的方法。换一种说法其实可以说是恢复在深度卷积神经网络中下降的分辨率,从而获取更多的上下文信息。这一系列我将给大家介绍的是Google提出的DeepLab 。
    DeepLab是结合了深度卷积神经网络和概率图模型的方法,应用在语义分割的任务上,目的是做逐像素分类,其先进性体现在DenseCRFs(概率图模型)和DCNN的结合。是将每个像素视为CRF节点,利用远程依赖关系并使用CRF推理直接优化DCNN的损失函数。
    在图像分割领域,FCN的一个众所周知的操作就是平滑以后再填充,就是先进行卷积再进行pooling,这样在降低图像尺寸的同时增大感受野,但是在先减小图片尺寸(卷积)再增大尺寸(上采样)的过程中一定有一些信息损失掉了,所以这里就有可以提高的空间。
    接下来我要介绍的是DeepLab网络的一大亮点:Dilated/Atrous Convolution,它使用的采样方式是带有空洞的采样。在VGG16中使用不同采样率的空洞卷积,可以明确控制网络的感受野。

    图a对应3x3的1-dilated conv,它和普通的卷积操作是相同的;图b对应3x3的2-dilated conv,事迹卷积核的尺寸还是3x3(红点),但是空洞为1,其感受野能够达到7x7;图c对应3x3的4-dilated conv,其感受野已经达到了15x15.写到这里相信大家已经明白,在使用空洞卷积的情况下,加大了感受野,使每个卷积输出都包含了较大范围的信息。
    这样就解决了DCNN的几个关于分辨率的问题:
    1)内部数据结构丢失;空间曾计划信息丢失;
    2)小物体信息无法重建;
    当然空洞卷积也存在一定的问题,它的问题主要体现在以下两方面:
    1)网格效应
    加入我们仅仅多次叠加dilation rate 2的 3x3 的卷积核则会出现以下问题

    我们发现卷积核并不连续,也就是说并不是所有的像素都用来计算了,这样会丧失信息的连续性;
    2)小物体信息处理不当
    我们从空洞卷积的设计背景来看可以推测出它是设计来获取long-ranged information。然而空洞步频选取得大获取只有利于大物体得分割,而对于小物体的分割可能并没有好处。所以如何处理好不同大小物体之间的关系也是设计好空洞卷积网络的关键。

    6.基于特征增强的分割方法

    基于特征增强的分割方法包括:提取多尺度特征或者从一系列嵌套的区域中提取特征。在图像分割的深度网络中,CNN经常应用在图像的小方块上,通常称为以每个像素为中心的固定大小的卷积核,通过观察其周围的小区域来标记每个像素的分类。在图像分割领域,能够覆盖到更大部分的上下文信息的深度网络通常在分割的结果上更加出色,当然这也伴随着更高的计算代价。多尺度特征提取的方法就由此引进。
    在这一模块中我先给大家介绍一个叫做SLIC,全称为simple linear iterative cluster的生成超像素的算法。
    首先我们要明确一个概念:啥是超像素?其实这个比较容易理解,就像上面说的“小方块”一样,我们平常处理图像的最小单位就是像素了,这就是像素级(pixel-level);而把像素级的图像划分成为区域级(district-level)的图像,把区域当成是最基本的处理单元,这就是超像素啦。
    算法大致思想是这样的,将图像从RGB颜色空间转换到CIE-Lab颜色空间,对应每个像素的(L,a,b)颜色值和(x,y)坐标组成一个5维向量V[l, a, b, x, y],两个像素的相似性即可由它们的向量距离来度量,距离越大,相似性越小。
    算法首先生成K个种子点,然后在每个种子点的周围空间里搜索距离该种子点最近的若干像素,将他们归为与该种子点一类,直到所有像素点都归类完毕。然后计算这K个超像素里所有像素点的平均向量值,重新得到K个聚类中心,然后再以这K个中心去搜索其周围与其最为相似的若干像素,所有像素都归类完后重新得到K个超像素,更新聚类中心,再次迭代,如此反复直到收敛。
    有点像聚类的K-Means算法,最终会得到K个超像素。
    Mostahabi等人提出的一种前向传播的分类方法叫做Zoom-Out就使用了SLIC的算法,它从多个不同的级别提取特征:局部级别:超像素本身;远距离级别:能够包好整个目标的区域;全局级别:整个场景。这样综合考虑多尺度的特征对于像素或者超像素的分类以及分割来说都是很有意义的。
    接下来的部分我将给大家介绍另一种完整的分割网络:PSPNet:Pyramid Scene Parsing Network
    论文提出在场景分割是,大多数的模型会使用FCN的架构,但是FCN在场景之间的关系和全局信息的处理能力存在问题,其典型问题有:1.上下文推断能力不强;2.标签之间的关系处理不好;3.模型可能会忽略小的东西。
    本文提出了一个具有层次全局优先级,包含不同子区域时间的不同尺度的信息,称之为金字塔池化模块。
    该模块融合了4种不同金字塔尺度的特征,第一行红色是最粗糙的特征–全局池化生成单个bin输出,后面三行是不同尺度的池化特征。为了保证全局特征的权重,如果金字塔共有N个级别,则在每个级别后使用1×1 1×11×1的卷积将对于级别通道降为原本的1/N。再通过双线性插值获得未池化前的大小,最终concat到一起。其结构如下图:

    最终结果就是,在融合不同尺度的feature后,达到了语义和细节的融合,模型的性能表现提升很大,作者在很多数据集上都做过训练,最终结果是在MS-COCO数据集上预训练过的效果最好。

    为了捕捉多尺度特征,高层特征包含了更多的语义和更少的位置信息。结合多分辨率图像和多尺度特征描述符的优点,在不丢失分辨率的情况下提取图像中的全局和局部信息,这样就能在一定程度上提升网络的性能。

    7.使用CRF/MRF的方法

    首先让我们熟悉熟悉到底啥是MRF的CRF的。
    MRF全称是Marcov Random Field,马尔可夫随机场,其实说起来笔者在刚读硕士的时候有一次就有同学在汇报中提到了隐马尔可夫、马尔可夫链啥的,当时还啥都不懂,小白一枚(现在是准小白hiahia),觉得马尔可夫这个名字贼帅,后来才慢慢了解什么马尔科夫链呀,马尔可夫随机场,并且在接触到图像分割了以后就对马尔科夫随机场有了更多的了解。
    MRF其实是一种基于统计的图像分割算法,马尔可夫模型是指一组事件的集合,在这个集合中,事件逐个发生,并且下一刻事件的发生只由当前发生的事件决定,而与再之前的状态没有关系。而马尔可夫随机场,就是具有马尔可夫模型特性的随机场,就是场中任何区域都只与其临近区域相关,与其他地方的区域无关,那么这些区域里元素(图像中可以是像素)的集合就是一个马尔可夫随机场。
    CRF的全称是Conditional Random Field,条件随机场其实是一种特殊的马尔可夫随机场,只不过是它是一种给定了一组输入随机变量X的条件下另一组输出随机变量Y的马尔可夫随机场,它的特点是埃及设输出随机变量构成马尔可夫随机场,可以看作是最大熵马尔可夫模型在标注问题上的推广。
    在图像分割领域,运用CRF比较出名的一个模型就是全连接条件随机场(DenseCRF),接下来我们将花费一些篇幅来简单介绍一下。
    CRF在运行中会有一个问题就是它只对相邻节点进行操作,这样会损失一些上下文信息,而全连接条件随机场是对所有节点进行操作,这样就能获取尽可能多的临近点信息,从而获得更加精准的分割结果。
    在Fully connected CRF中,吉布斯能量可以写作:

    我们重点关注二元部分:

    其中k(m)为高斯核,写作:

    该模型的一元势能包含了图像的形状,纹理,颜色和位置,二元势能使用了对比度敏感的的双核势能,CRF的二元势函数一般是描述像素点与像素点之间的关系,鼓励相似像素分配相同的标签,而相差较大的像素分配不同标签,而这个“距离”的定义与颜色值和实际相对距离有关,这样CRF能够使图像尽量在边界处分割。全连接CRF模型的不同就在于其二元势函数描述的是每一个像素与其他所有像素的关系,使用该模型在图像中的所有像素对上建立点对势能从而实现极大地细化和分割。
    在分割结果上我们可以看看如下的结果图:

    可以看到它在精细边缘的分割比平常的分割方法要出色得多,而且文章中使用了另一种优化算法,使得本来需要及其大量运算的全连接条件随机场也能在很短的时间里给出不错的分割结果。
    至于其优缺点,我觉得可以总结为以下几方面:

    • 在精细部位的分割非常优秀;
    • 充分考虑了像素点或者图片区域之间的上下文关系;
    • 在粗略的分割中可能会消耗不必要的算力;
    • 可以用来恢复细致的局部结构,但是相应的需要较高的代价。
      OK,那么本次的推送就到这里结束啦,本文的主要内容是对图像分割的算法进行一个简单的分类和介绍。综述对于各位想要深入研究的看官是非常非常重要的资源:大佬们经常看综述一方面可以了解算法的不足并在此基础上做出改进;萌新们可以通过阅读一篇好的综述入门某一个学科,比如今天的内容就是图像分割。
      谢谢各位朋友们的观看!

    推荐阅读

    如何从零开始系统化学习视觉SLAM?
    从零开始一起学习SLAM | 为什么要学SLAM?
    从零开始一起学习SLAM | 学习SLAM到底需要学什么?
    从零开始一起学习SLAM | SLAM有什么用?
    从零开始一起学习SLAM | C++新特性要不要学?
    从零开始一起学习SLAM | 为什么要用齐次坐标?
    从零开始一起学习SLAM | 三维空间刚体的旋转
    从零开始一起学习SLAM | 为啥需要李群与李代数?
    从零开始一起学习SLAM | 相机成像模型
    从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?
    从零开始一起学习SLAM | 神奇的单应矩阵
    从零开始一起学习SLAM | 你好,点云
    从零开始一起学习SLAM | 给点云加个滤网
    从零开始一起学习SLAM | 点云平滑法线估计
    从零开始一起学习SLAM | 点云到网格的进化
    从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码
    从零开始一起学习SLAM | 掌握g2o顶点编程套路
    从零开始一起学习SLAM | 掌握g2o边的代码套路
    零基础小白,如何入门计算机视觉?
    SLAM领域牛人、牛实验室、牛研究成果梳理
    我用MATLAB撸了一个2D LiDAR SLAM
    可视化理解四元数,愿你不再掉头发
    最近一年语义SLAM有哪些代表性工作?
    视觉SLAM技术综述
    汇总 | VIO、激光SLAM相关论文分类集锦
    研究SLAM,对编程的要求有多高?
    2018年SLAM、三维视觉方向求职经验分享
    2018年SLAM、三维视觉方向求职经验分享
    深度学习遇到SLAM | 如何评价基于深度学习的DeepVO,VINet,VidLoc?
    视觉SLAM关键方法总结
    SLAM方向公众号、知乎、博客上有哪些大V可以关注?
    SLAM实验室
    SLAM方向国内有哪些优秀公司?
    SLAM面试常见问题
    SLAM相关领域数据集调研
    从零开始一起学习SALM-ICP原理及应用
    解放双手——相机与IMU外参的在线标定
    目标检测

    展开全文
  • 自适应阈值分割matlab代码 迁移学习和传统机器学习在手写数字识别问题上的性能差异分析报告 工作概述: 运用matlab读取手写数字识别数据集,对其分别进行传统机器学习建模和迁移学习建模。对比分析两者性能差异。 ...
  • matlab图像分割肿瘤代码斯坦福大学-机器学习 在本课程中,我们涵盖以下主题: 第一周 介绍 一变量线性回归 线性代数复习 第二周 多元线性回归 八度/ Matlab教程 第三周 逻辑回归 正则化 第四周神经网络:表示 第五周...
  • ——大家应该都知道,只需要一种黑色的画笔,只需要将大熊猫黑色的地方涂上黑色,一个大熊猫的图像就可以展现出来。 我们画大熊猫的方式,其实和妈妈们的十字绣很接近——在给定的格子里,绣上不同的颜色,最后就...
  • 数字图像处理的k-means算法实现,能够完全把图像分割为k个聚点,进而把图片分为k中不同的颜色,比如:k=2,图像包含两种颜色(黑,白);k=3,图像包含两种颜色(黑白灰),等等。随着k值越大,图像越来越靠近原图...
  • 2005年第z1期Matlab提出的尺度空间词分割技术的实现。 即使该论文来自1999年,该方法仍然取得了良好的结果,速度快,易于实施。 该算法以包含单词的图像作为输入,并输出分割后的单词。 运行演示 通过运行pip ...
  • 包括灰度图像二值化,图像孤立像素滤波,图像膨胀,腐蚀,按字母最小行分割,按字母最小列分割,图像紧缩,归一化等;第二,用处理好的多个样本进行BP神经网络训练.包括BP网络参数的选择,目标结果构建,输入到结果的映射即用...
  • kmeans之于模式识别,如同“hello world”之于C、之于任何一门高级语言。 算法的规格(specification) ...matlab计算程序: J_cur = sum(sum((X - C(label, :)).^ 2 , 2 )); 效果图
  • 基于MATLAB手写体数字识别系统一、课题介绍手写体数字识别是模式识别中一个非常重要和活跃的研究领域,数字识别也不是一项孤立的技术,它所涉及的问题是模式识别的其他领域都无法回避的;应用上,作为一种信息处理...
  • 图像分割技术研究及MATLAB仿真摘要:作为一项热门的计算机科学技术,图像分割技术已经在我们生活中越来越普及。顾名思义这项技术的目的就是,将目标图像从背景图像中分离出去。由于这些被分割图像区域在某些属性上...
  • MATLAB图像与视频处理实用案例详解》详细讲解了25个MATLAB图像与视频处理实用案例(含可运行程序),涉及雾霾去噪、答题卡自动阅卷、肺部图像分割、小波数字水印、图像检索、人脸二维码识别、车牌定位及识别、...
  • MATLAB图像与视频处理实用案例详解》详细讲解了25个MATLAB图像与视频处理实用案例(含可运行程序),涉及雾霾去噪、答题卡自动阅卷、肺部图像分割、小波数字水印、图像检索、人脸二维码识别、车牌定位及识别、...
  • 图像如何分割matlab代码阿拉伯语OCR JOSA深度学习研究小组 欢迎来到JOSA深度学习研究小组的第一份作业! 在本作业中,我们将使用您想要构建的任何神经网络对手写阿拉伯字母(共28个)进行分类。 要求 Python 3(建议...
  • 该论文的Matlab代码: ... 该函数接受一个图像输入,图像应该是一个需要被分割成子词的词。 函数返回分段子词的单元格。 如果这对您有帮助,请在您的工作中参考 IEEE 论文。
  • 图像分割基于两个性质: 不连续性和相似性。一种是基于灰度的突变(如边缘),另一种是分为相似的区域。 3*3模板在某一点的响应:R= 。  是与之对应的图像像素的灰度。 点检测: -1-1 -1 这是点检测的模板w,...
  • 基于支持向量机的图像分类(下篇:MATLAB实现)

    万次阅读 多人点赞 2018-04-11 00:19:20
    摘要:本文通过图文详细介绍如何利用支持...点我下载:SVM图像分类的MATLAB完整程序及图片集文件 1. 前言 机器学习是人工智能研究发展到一定阶段的必然产物。二十世纪八十年代是机器学习成为一个独立学...
  • 奥兰加巴德 Babasaheb Ambedkar ... 电子邮件:sadanandkulkarni1980@gmail.com 该代码旨在预处理扫描图像、字符分割并使用 HU 矩、Zernike 矩、Zernike Complex Moments 使用 Zoning 进行识别。 传达你的建议。
  • 基于MATLAB的字符的分割与识别 摘 要:本文主要介绍字符识别的基本原理,并且利用MATLAB工具软件实现图片中字符的分割和识别,对于满足一定要求的图片可以实现字符的分割与识别 ,通过图像读取,图像预处理,图像...
  • 软件:Matlab R2018b 数据集:MNIST手写体数字数据集 网络:自建简单网络 & AlexNet 数据准备 MNIST数据集还挺有名的,这里就不过多介绍了。数据集本身读取格式官网有给,怎么转换成图片格式网上也有很多,这里...
  • Matlab编程手写代码基础测试题硕士论文 题目:硕士论文——文档归档自动化的手写识别大学:AGH/UST Cracow,波兰作者:亚当·米卡 描述: 这个 repo 包含我的硕士论文项目的代码。 此外,它还包含纸张本身(波兰语)...
  • matlab基于朴素贝叶斯变换的手写数字识别

    千次阅读 热门讨论 2019-06-04 20:46:24
    matlab基于朴素贝叶斯变换的手写数字识别 欢迎各位大佬的指点。 文章目录matlab基于朴素贝叶斯变换的手写数字识别代码fun1.mfun2.mpreDeal.m 代码 ​ 原理部分参考大佬的即可。 ...
  • 现在很多工作都转移到了线上,有些情况下需要将签名插入word,但是我们有时候是没法打印后再签名的,因此我就写了...%对图像二值化,黑色的为0,白色的为1 imshow(pic_bw) % 展示处理前的二值化图片 pic_backup = p
  • 基于 MATLAB图像中汉字识别

    千次阅读 多人点赞 2020-06-16 17:06:21
    随着科技的发展,人们越来越习惯于对电子书的阅读,因此把 纸质书转换成电子书是一个非常...我们小组的主要内容是在 Matlab 上用一下算法的方法分辨图片 中的汉字。 关键词:汉字识别 腐蚀 膨胀 特征提取 贝叶斯分类器
  • 扫描完整版带书签 <br/>《MATLAB图像与视频处理实用案例详解》详细讲解了25个MATLAB图像与视频处理实用案例(含可运行程序),涉及雾霾去噪、答题卡自动阅卷、肺部图像分割、小波数字水印、图像检索、人脸二维码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 848
精华内容 339
关键字:

matlab手写图像分割

matlab 订阅