当前位置:首页 » 操作系统 » 图像分割的算法

图像分割的算法

发布时间: 2023-07-12 15:59:05

A. 目前应用最广的图像分割算法是什么

小波变换是近年来得到了广泛应用的数学工具,它在时域和频域都具有良好的局部化性质,而且小波变换具有多尺度特性,能够在不同尺度上对信号进行分析,因此在图像处理和分析等许多方面得到应用。
基于小波变换的阈值图像分割方法的基本思想是首先由二进小波变换将图像的直方图分解为不同层次的小波系数,然后依据给定的分割准则和小波系数选择阈值门限,最后利用阈值标出图像分割的区域。整个分割过程是从粗到细,有尺度变化来控制,即起始分割由粗略的L2(R)子空间上投影的直方图来实现,如果分割不理想,则利用直方图在精细的子空间上的小波系数逐步细化图像分割。分割算法的计算馈与图像尺寸大小呈线性变化。

B. 图像分割最好方法

1.基于阈值的分割方法

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

阈值法特别适用于目标和背景占据不同灰度级范围的图。图像若只有目标和背景两大类,那么只需要选取一个阈值进行分割,此方法成为单阈值分割;但是如果图像中有多个目标需要提取,单一阈值的分割就会出现作物,在这种情况下就需要选取多个阈值将每个目标分隔开,这种分割方法相应的成为多阈值分割。
2.基于区域的图像分割方法

基于区域的分割方法是以直接寻找区域为基础的分割技术,基于区域提取方法有两种基本形式:一种是区域生长,从单个像素出发,逐步合并以形成所需要的分割区域;另一种是从全局出发,逐步切割至所需的分割区域。
分水岭算法

分水岭算法是一个非常好理解的算法,它根据分水岭的构成来考虑图像的分割,现实中我们可以想象成有山和湖的景象,那么一定是水绕山山围水的景象。

分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。

C. 图像分割——分水岭算法

姓名:谢意远

学号:19021110366T

嵌牛导读:图像中的目标物体是连接在一起的,则分割起来很困难,分水岭分割算法经常用于处理这类问题,通常会取得比较好的效果。

嵌牛鼻子:图像分割、分水岭绝源算法

嵌牛提问:分水岭算法具体有哪些步骤?

嵌牛正文:

一、综述

分水岭分割算法把图像看成一幅“地形图”,其中亮度比较强的区域像素值较大,而比较暗的区域像素值较小,通过寻找“汇水盆地”和“分水岭界限”,对图像进行分割。而直接应用分水岭分割算法的效果往往并不好,如果在图像中对前景对象和背景对象进行标注区别,再应用分水岭算法会取得较好的分割效果。基于标记控制的分水岭分割方法有以下基本步骤:

1  综述

分水岭分割算法把图像看成一幅“地形图”,其中亮度比较强的区域像素值较大,而比较暗的区域像素值较小,通过寻找“汇水盆地”和“分水岭界限”,对图像进行分割。直接应用分水岭分割算法的效果往往并不好,如果在图像中对前景对象和背景对象进行标注区别,再应用分水岭算法会取得较好的分割效果。基于标记控制的分水岭分割方法有以下基本步骤:

1.计算分割函数。图像中较暗的区域是要分割的对象

2.计算前景标志。这些是并运态每个对象内部连接的斑点像素。

3.计算背景标志。这些是不属于任何对象的要素。

4.修改分割函数,使其仅在前景和后景标记位置有极小值。

5.对修改后的分割函数做分水岭变换计算。

使用MATLAB图像处理工具箱

注:期间用到了很多图像处理工具箱的函数,例如fspecial、imfilter、watershed、label2rgb、imopen、imclose、imreconstruct、imcomplement、imregionalmax、bwareaopen、graythresh和imimposemin函数等。

2  步骤

 第一步:读入彩色图像,将其转化成灰度图像

clc; clear all; close all;

rgb = imread('pears.png');

if ndims(rgb) == 3

 I = rgb2gray(rgb);

else

 I = rgb;

end

figure('units', 'normalized', 'position', [0 0 1 1]);

第2步:将梯度幅值作为分割函数

使用Sobel边缘算子对图像进行水平和垂直方向的滤波,然后求取模值,sobel算子滤波后的图像在边界处会显示比较大的值,在没有边界处的值会很小。

hy = fspecial('sobel');

hx = hy';

Iy = imfilter(double(I), hy, 'replicate');

Ix = imfilter(double(I), hx, 'replicate');

gradmag = sqrt(Ix.^2 + Iy.^2);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(1, 2, 1); imshow(I,[]), title('灰度图像')

subplot(1, 2, 2); imshow(gradmag,[]), title('梯度幅值图像')

可否直接对梯度幅值图像使用分水岭算法?

L = watershed(gradmag);

Lrgb = label2rgb(L);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(1, 2, 1); imshow(gradmag,[]), title('梯度幅值图像')

subplot(1, 2, 2); imshow(Lrgb); title('梯度幅值做分水岭变换')

直接使用梯度模值图像进行分水岭算法得到的结果往往会存在过度分割的现悄指象。因此通常需要分别对前景对象和背景对象进行标记,以获得更好的分割效果。

第3步:标记前景对象

有多种方法可以应用在这里来获得前景标记,这些标记必须是前景对象内部的连接斑点像素。这个例子中,将使用形态学技术“基于开的重建”和“基于闭的重建”来清理图像。这些操作将会在每个对象内部创建单位极大值,使得可以使用imregionalmax来定位。

开运算和闭运算:先腐蚀后膨胀称为开;先膨胀后腐蚀称为闭。开和闭这两种运算可以除去比结构元素小的特定图像细节,同时保证不产生全局几何失真。开运算可以把比结构元素小的突刺滤掉,切断细长搭接而起到分离作用;闭运算可以把比结构元素小的缺口或孔填充上,搭接短的间隔而起到连接作用。

开操作是腐蚀后膨胀,基于开的重建(基于重建的开操作)是腐蚀后进行形态学重建。下面比较这两种方式。首先,用imopen做开操作。

se = strel('disk', 20);

Io = imopen(I, se);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(1, 2, 1); imshow(I, []); title('灰度图像');

subplot(1, 2, 2); imshow(Io), title('图像开操作')

接下来,通过腐蚀后重建来做基于开的重建计算。

Ie = imerode(I,se)

Iobr = imreconstruct(Ie,I);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(1, 2, 1); imshow(I, []); title('灰度图像');

subplot(1, 2, 2); imshow(Iobr, []), title('基于开的重建图像')

开操作后,接着进行闭操作,可以移除较暗的斑点和枝干标记。对比常规的形态学闭操作和基于闭的重建操作。首先,使用imclose:

Ioc = imclose(Io, se);

Ic = inclose(I,se);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(2, 2, 1); imshow(I, []); title('灰度图像');

subplot(2, 2, 2); imshow(Io, []); title('开操作图像');

subplot(2, 2, 3); imshow(Ic, []); title('闭操作图像');

subplot(2, 2, 4); imshow(Ioc, []), title('开闭操作');

现在使用imdilate,然后使用imreconstruct。注意必须对输入图像求补,对imreconstruct输出图像求补。IM2 = imcomplement(IM)计算图像IM的补集。IM可以是二值图像,或者RGB图像。IM2与IM有着相同的数据类型和大小。

Iobrd = imdilate(Iobr, se);

Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));

Iobrcbr = imcomplement(Iobrcbr);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(2, 2, 1); imshow(I, []); title('灰度图像');

subplot(2, 2, 2); imshow(Ioc, []); title('开闭操作');

subplot(2, 2, 3); imshow(Iobr, []); title('基于开的重建图像');

subplot(2, 2, 4); imshow(Iobrcbr, []), title('基于闭的重建图像');

通过比较Iobrcbr和loc可以看到,在移除小污点同时不影响对象全局形状的应用下,基于重建的开闭操作要比标准的开闭重建更加有效。计算Iobrcbr的局部极大来得到更好的前景标记。

fgm = imregionalmax(Iobrcbr);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(1, 3, 1); imshow(I, []); title('灰度图像');

subplot(1, 3, 2); imshow(Iobrcbr, []); title('基于重建的开闭操作');

subplot(1, 3, 3); imshow(fgm, []); title('局部极大图像');

为了帮助理解这个结果,叠加前景标记到原图上。

It1 = rgb(:, :, 1);

It2 = rgb(:, :, 2);

It3 = rgb(:, :, 3);

It1(fgm) = 255; It2(fgm) = 0; It3(fgm) = 0;

I2 = cat(3, It1, It2, It3);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(2, 2, 1); imshow(rgb, []); title('原图像');

subplot(2, 2, 2); imshow(Iobrcbr, []); title('基于重建的开闭操作');

subplot(2, 2, 3); imshow(fgm, []); title('局部极大图像');

subplot(2, 2, 4); imshow(I2); title('局部极大叠加到原图像');

注意到大多闭塞处和阴影对象没有被标记,这就意味着这些对象在结果中将不会得到合理的分割。而且,一些对象的前景标记会一直到对象的边缘。这就意味着应该清理标记斑点的边缘,然后收缩它们。可以通过闭操作和腐蚀操作来完成。

se2 = strel(ones(5,5));

fgm2 = imclose(fgm, se2);

fgm3 = imerode(fgm2, se2);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(2, 2, 1); imshow(Iobrcbr, []); title('基于重建的开闭操作');

subplot(2, 2, 2); imshow(fgm, []); title('局部极大图像');

subplot(2, 2, 3); imshow(fgm2, []); title('闭操作');

subplot(2, 2, 4); imshow(fgm3, []); title('腐蚀操作');

这个过程将会留下一些偏离的孤立像素,应该移除它们。可以使用bwareaopen,用来移除少于特定像素个数的斑点。BW2 = bwareaopen(BW,P)从二值图像中移除所以少于P像素值的连通块,得到另外的二值图像BW2。

fgm4 = bwareaopen(fgm3, 20);

It1 = rgb(:, :, 1);

It2 = rgb(:, :, 2);

It3 = rgb(:, :, 3);

It1(fgm4) = 255; It2(fgm4) = 0; It3(fgm4) = 0;

I3 = cat(3, It1, It2, It3);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(2, 2, 1); imshow(I2, []); title('局部极大叠加到原图像');

subplot(2, 2, 2); imshow(fgm3, []); title('闭腐蚀操作');

subplot(2, 2, 3); imshow(fgm4, []); title('去除小斑点操作');

subplot(2, 2, 4); imshow(I3, []); title('修改局部极大叠加到原图像');

第4步:计算背景标记

现在,需要标记背景。在清理后的图像Iobrcbr中,暗像素属于背景,所以可以从阈值操作开始。

bw =im2bw(Iobrcbr, graythresh(Iobrcbr));

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(1, 2, 1); imshow(Iobrcbr, []); title('基于重建的开闭操作');

subplot(1, 2, 2); imshow(bw, []); title('阈值分割');

背景像素在黑色区域,但是理想情形下,不必要求背景标记太接近于要分割的对象边缘。通过计算“骨架影响范围”来“细化”背景,或者SKIZ,bw的前景。这个可以通过计算bw的距离变换的分水岭变换来实现,然后寻找结果的分水岭脊线(DL==0)。D = bwdist(BW)计算二值图像BW的欧几里得矩阵。对BW的每一个像素,距离变换指定像素和最近的BW非零像素的距离。bwdist默认使用欧几里得距离公式。BW可以由任意维数,D与BW有同样的大小。

D = bwdist(bw);

DL = watershed(D);

bgm = DL == 0;

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(2, 2, 1); imshow(Iobrcbr, []); title('基于重建的开闭操作');

subplot(2, 2, 2); imshow(bw, []); title('阈值分割');

subplot(2, 2, 3); imshow(label2rgb(DL), []); title('分水岭变换示意图');

subplot(2, 2, 4); imshow(bgm, []); title('分水岭变换脊线图');

第5步:计算分割函数的分水岭变换

函数imimposemin可以用来修改图像,使其只是在特定的要求位置有局部极小。这里可以使用imimposemin来修改梯度幅值图像,使其只在前景和后景标记像素有局部极小。

gradmag2 = imimposemin(gradmag, bgm | fgm4);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(2,2,1)imshow(bgm,[]);title('分水岭变换脊线图');

subplot(2, 2, 2); imshow(fgm4, []); title('前景标记');

subplot(2, 2, 3); imshow(gradmag, []); title('梯度幅值图像');

subplot(2, 2, 4); imshow(gradmag2, []); title('修改梯度幅值图像');

最后,可以做基于分水岭的图像分割计算。

第6步:查看结果

一个可视化技术是叠加前景标记、背景标记、分割对象边界到初始图像。可以使用膨胀来实现某些要求,比如对象边界,更加清晰可见。对象边界定位于L==0的位置。

It1 = rgb(:, :, 1);

It2 = rgb(:, :, 2);

It3 = rgb(:, :, 3);

fgm5 = imdilate(L == 0, ones(3, 3)) | bgm | fgm4;

It1(fgm5) = 255; It2(fgm5) = 0; It3(fgm5) = 0;

I4 = cat(3, It1, It2, It3);

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(1, 2, 1); imshow(rgb, []); title('原图像');

subplot(1, 2, 2); imshow(I4, []); title('标记和对象边缘叠加到原图像');

可视化说明了前景和后景标记如何影响结果。在几个位置,部分的较暗对象与它们相邻的较亮的邻接对象相融合,这是因为受遮挡的对象没有前景标记。

另外一个有用的可视化技术是将标记矩阵作为彩色图像进行显示。标记矩阵,比如通过watershed和bwlabel得到的,可以使用label2rgb转换到真彩图像来显示。

Lrgb = label2rgb(L,'jet', 'w', 'shuffle');

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(1, 2, 1); imshow(rgb, []); title('原图像');

subplot(1, 2, 2); imshow(Lrgb); title('彩色分水岭标记矩阵');

可以使用透明度来叠加这个伪彩色标记矩阵在原亮度图像上进行显示。

figure('units', 'normalized', 'position', [0 0 1 1]);

subplot(1, 2, 1); imshow(rgb, []); title('原图像');

subplot(1, 2, 2); imshow(rgb, []); hold on;

himage = imshow(Lrgb);

set(himage, 'AlphaData', 0.3);

title('标记矩阵叠加到原图像');

D. 跪求图像分割snake算法详细解释_基于遗传算法的图像分割

这个不太熟悉,下面是转载,希望能帮到你:

图像分割有那些方法区别如何

图像分割有那些方法区别如何?

图像分割是图像处理领域中的一个基本问题。从大的方面来说,图像分割方法可大致分为基于区域的方法、基于边缘的方法、区域与边缘相结合的方法,以及在此基础上的、采用多分辨率图像处理理论的多尺度分割方法。基于区域的方法采用某种准则,直接将图像划分为多个区域,基于边缘的方法则通过检测包含不同区域的边缘,获得关于各区域的边界轮廓描述,达到图像分割的目的,而区域与边缘相结合的方法通过区域分割与边缘检测的相互作用,得到分割结果。

·1基于区域的图像分割兄旅蚂

图像分割中常用的直方图门限法、区域生长法、基于图像的随机场模型法、松弛标记区域分割法等均属于基于区域的方法。

(1)直方图门限分割就是在一定的准则下,用一个或几个门限值将图像的灰度直方图(一维的或多维的)分成几个类,认为图像中灰度值在同一个灰度类内的象素属于同一个物体,可以采用的准则包括直方图的谷底、最小类内方差(或最大类间方差)、最大熵(可使用各种形式的熵)、最小错误率、矩不变、最大繁忙度(由共生矩阵定义)等。门限法的缺陷在于它仅仅考虑了图像的灰度信息,而忽略了图像中的空间信息,对于图像中不存在明显的灰度差异或各物体的灰度值范围有较大重叠的图像分割问题难以得到准确的结果。

(2)区域生长是一种古老的图像分割方法,最早的区域生长图像分割方法是由Levine等人提出的。该方法一般有两种方式,一种是先给定图像中要分割的目标物体内的一个小块或者说种子区域,再在镇闷种子区域基础上不断将其周围的像素点以一定的规则加入其中,达到最终将代表该物体的所有像素点结合成一个区域的目的;另一种是先将图像分割成很多的一致性较强,如区域内像素灰度值相同的小区域,再按一定的规则将小区域融合成大区域,达到分割图像的目的,典型的区域生长法如T.C.Pong等人提出的基于小面(facet)模型的区域生长法,区域生长法固有的缺点是往往会造成过度分割,即将图像分割成过多的区域。

(3)基于图像的随机场模型法主要以Markov随机场作为图像模型,并假定该随机场符合Gibbs分布。使用MRF模型进行图像分割的问题包括:邻域系统的定义;能量函数的选择及其参数的估计;极小化能量函数从而获得最大后验概率的策略。邻域系统一般是事先定义的,因而主要是后面两个问题。S.Geman,首次将基于Gibbs分布的Markov随机场模型用于图像处理,详细讨论了MRF模型的邻域系统,能量函数,Gibbs采样方法等各种问题,提出用模拟退火算法来极小化能量函数的方法,并给出了模拟退火算法收敛性的证明,同时给出了MRF模型在图像恢复中的应用实例。在此基础上,人们提出了大量的基于MRF模型的图像分割算法。

(4)标记法(labeling)就是将图像欲分割成的几个区域各以一个不同的标号来表示,对图像中的每一个象素,用一定的方式赋之以这些标记中的某一个,标记相同的连通象素就组成该标记所代表的区域。标记法常采用松弛技术来给图像中的各个象素赋予标记,一般可分为离散松弛、概率松弛、模糊松弛等三种。Smith等人最先采用松弛标记技术进行图像分割,以后人们又提出了大量的图像松弛分割算法。另外,松弛标记不仅可用于图像分割,还可用于边缘检测、目标识别等。

·2基于边缘的图像分割

基于边缘的分割方法则与边缘检测理论紧密相关,此类方法大多是基于局部信息的,一般利用图像—阶导数的极大值或二阶导数的过零点信息来提供判断边缘点的基本依据,进一步还可以采用各种曲线拟合技术获得划分不同区域边界的连续曲线。根据检测边缘所采用的方式的不同,边缘检测方法可大致分为以下几类:基于局部图像函数的方法、图像滤波法、基于反应—扩散方程的方法、基于边界曲线拟合的方法及活动轮廊(activecontour)法等。

(1)基于局部图像函数羡埋法的基本思想是将灰度看成高度,用一个曲面来拟合一个小窗口内的数据,然后根据该曲面来决定边缘点.

(2)图像滤波法是基于如下理论的:即对滤波算子与图像的卷积结果求导,相当于用算子的同阶导数与图像做卷积。于是,只要事先给出算子的一阶或二阶导数,就可以将图像平滑滤波与对平滑后的图像求一阶或二阶导数在一步完成。因而,这种方法的核心问题是滤波器的设计问题。

常用的滤波器主要是高斯(Gaussian)函数的一阶和二阶层数,Canny认为高斯函数的一阶导数是他求得的最优滤波器的较好似近,一般采用Laplacian算子求高斯函数的二阶导数得到LOG(LaplacianofGaussian)滤波算子,该算子由计算机视觉的创始人Marr首先提出.近年来研究的滤波器还有可控滤波器(steerable),B-样条滤波器等。

问题提出:图像滤波的方法是基于对平滑滤波后的图像求其一阶导数的极大值或二阶导数的过零点来决定边缘的,必然遇到的问题是,一阶的极大值或二阶导数的过零点对应的像素点是否真的就是边缘点?

(3)基于反应—扩散方程的方法是从传统意义上的Gaussian核函数多尺度滤波来的。由于本人阅读文献有限,这里不多做介绍了。

(4)基于边界曲线拟合的方法用平面曲线来表示不同区域之间的图像边界线,试图根据图像梯度等信息找出能正确表示边界的曲线从而得到图像分割的目的,而且由于它直接给出的是边界曲线而不象一般的方法找出的是离散的、不相关的边缘点,因而对图像分割的后继处理如物体识别等高层处理有很大帮助。即使是用一般的方法找出的边缘点,用曲线来描述它们以便于高层处理也是经常被采用的一种有效的方式。L.H.Staib等人在文献中给出了一种用Fourier参数模型来描述曲线的方法,并根据Bayes定理,按极大后验概率的原则给出了一个目标函数,通过极大化该目标函数来决定Fourier系数。实际应用中,先根据对同类图像的分割经验,给出一条初始曲线,再在具体分割例子中根据像数据优化目标函数来改变初始曲线的参数,拟合图像数据,得到由图像数据决定的具体曲线。这种方法比较适合于医学图像的分割。除了用Fourier模型来描述曲线外,近年来还研究了一些其它的曲线描述方法,如A.Goshtasby详细介绍了用有理Gaussian曲线和曲面来设计和拟合二维及三维形状的方法。R.Legault等人给出了一种曲线平滑的方法。M.F.Wu等人给出了一种双变量三维Fourier描述子来描述三维曲面。

(5)活动轮廓(又称Snake模型)是一种可变形模型(或称弹性模型),最初由Kass等人提出。活动轮廓法边缘检测认为图像中各区域的轮廓线应为平滑曲线,各轮廓线的能量由内部能量及外部能量(包括图像能量及控制能量)两部分组成,其中内部能量表征了轮廓线的光滑约束,图像能量由轮廓线上对应点的灰度、梯度和角点曲率半径(若该点为角点)等决定,而控制能量则代表了图像平面上固定点对轮廓线的吸引或排斥作用。采用变分法求解该能量函数的极小值就可得到与区域边界相对应的轮廓线。

E. 图像分割算法总结

       图像处理的很多任务都离不开图像分割。因为图像分割在cv中实在太重要(有用)了,就先把图像分割的常用算法做个总结。

        接触机器学习和深度学习时间已经不短了。期间看过各种相关知识但从未总结过。本文过后我会尽可能详细的从工程角度来总结,从传统机器学习算法,传统计算机视觉库算法到深度学习目前常用算法和论文,以及模型在各平台的转化,量化,服务化部署等相关知识总结。

        图像分割常用算法大致分为下面几类。由于图像的能量范函,边缘追踪等方法的效果往往只能解决特定问题,效果并不理想,这里不再阐述。当然二值化本身也可以分割一些简单图像的。但是二值化算法较多,我会专门做一个文章来总结。这里不再赘述。

        1.基于边缘的图像分割算法:

            有利用图像梯度的传统算法算子的sobel,roberts,prewitt,拉普拉斯以及canny等。

            这些算法的基本思想都是采用合适的卷积算子,对图像做卷积。从而求出图像对应的梯度图像。(至于为什么通过如图1这样的算子卷积,即可得到图像的梯度图像,请读者复习下卷积和倒数的概念自行推导)由于图像的边缘处往往是图像像素差异较大,梯度较大地方。因此我们通过合适的卷积核得到图像的梯度图像,即得到了图像的边缘图像。至于二阶算子的推导,与一阶类似。优点:传统算子梯度检测,只需要用合适的卷积核做卷积,即可快速得出对应的边缘图像。缺点:图像边缘不一定准确,复杂图像的梯度不仅仅出现在图像边缘,可以能出现在图像内部的色彩和纹理上。

             也有基于深度学习方法hed,rcf等。由于这类网络都有同一个比较严重的缺陷,这里只举例hed网络。hed是基于FCN和VGG改进,同时引出6个loss进行优化训练,通过多个层输出不同scale的粒度的边缘,然后通过一个训练权重融合各个层的边缘结果。hed网络结构如下:

可以得到一个比较完整的梯度图像,可参考github的hed实现。优点:图像的梯度细节和边缘完整性,相比传统的边缘算子要好很多。但是hed对于边缘的图像内部的边缘并不能很好的区分。当然我们可以自行更改loss来尝试只拟合外部的图像边缘。但最致命的问题在于,基于vgg的hed的网络表达能力有限,对于图像和背景接近,或者图像和背景部分相融的图片,hed似乎就有点无能为力了。

        2.基于区域分割的算法:

            区域分割比较常用的如传统的算法结合遗传算法,区域生长算法,区域分裂合并,分水岭算法等。这里传统算法的思路是比较简单易懂的,如果有无法理解的地方,欢迎大家一起讨论学习。这里不再做过多的分析。

            基于区域和语意的深度学习分割算法,是目前图像分割成果较多和研究的主要方向。例如FCN系列的全卷积网络,以及经典的医学图像分割常用的unet系列,以及rcnn系列发展下的maskrcnn,以及18年底的PAnet。基于语意的图像分割技术,无疑会成为图像分割技术的主流。

            其中,基于深度学习语意的其他相关算法也可以间接或直接的应用到图像分割。如经典的图像matting问题。18年又出现了许多非常优秀的算法和论文。如Deep-Image-Matting,以及效果非常优秀的MIT的 semantic soft segmentation(sss).

            基于语意的图像分割效果明显要好于其他的传统算法。我在解决图像分割的问题时,首先尝试用了hed网络。最后的效果并不理想。虽然也参考github,做了hed的一些fine-tune,但是还是上面提到的原因,在我多次尝试后,最终放弃。转而适用FCN系列的网络。但是fcn也无法解决图像和背景相融的问题。图片相融的分割,感觉即需要大的感受野,又需要未相融部分原图像细节,所以单原FCN的网络,很难做出准确的分割。中间还测试过很多其他相关的网络,但都效果不佳。考虑到感受野和原图像细节,尝试了resnet和densenet作为图像特征提取的底层。最终我测试了unet系列的网络:

                unet的原始模型如图所示。在自己拍照爬虫等手段采集了将近1000张图片。去掉了图片质量太差的,图片内容太过类似的。爬虫最终收集160多张,自己拍照收集200张图片后,又用ps手动p了边缘图像,采用图像增强变换,大约有300*24张图片。原生unet网络的表现比较一般。在将unet普通的卷积层改为resnet后,网络的表达能力明显提升。在将resnet改为resnet101,此时,即使对于部分相融的图像,也能较好的分割了。但是unet的模型体积已经不能接受。

                在最后阶段,看到maskrcnn的实例分割。maskrcnn一路由rcnn,fasterrcnn发展过来。于是用maskrcnn来加入自己的训练数据和label图像进行训练。maskrcnn的结果表现并不令人满意,对于边缘的定位,相比于其他算法,略显粗糙。在产品应用中,明显还不合适。                

        3.基于图的分割算法

            基于深度学习的deepgrab,效果表现并不是十分理想。deepgrab的git作者backbone采用了deeplabv2的网络结构。并没有完全安装原论文来做。

论文原地址参考: https://arxiv.org/pdf/1707.00243.pdf

整体结构类似于encode和decoder。并没有太仔细的研究,因为基于resent101的结构,在模型体积,速度以及deeplab的分割精度上,都不能满足当前的需求。之前大致总结过计算机视觉的相关知识点,既然目前在讨论移动端模型,那后面就分模块总结下移动端模型的应用落地吧。

由于时间实在有限。这里并没有针对每个算法进行详细的讲解。后续我会从基础的机器学习算法开始总结。

F. 图像分割算法分为几类

从学术角度讲图像分割主要分成3大类,一是基于边缘的,二是基于区域的,三是基于纹理的。由于基于纹理的也可以看成是基于区域的,所以有些专家也把分割方法分成基于边缘和基于区域两大类。
选择算法的时候主要参考你要分割的图像样本的特点。
如果图像的边界特别分明,比如绿叶和红花,在边界处红绿明显不同,可以精确提取到边界,这时候用基于边缘的方法就可行。但如果是像医学图像一样,轮廓不是特别明显,比如心脏图像,左心房和左心室颜色比较接近,它们之间的隔膜仅仅是颜色比它们深一些,但是色彩上来说很接近,这时候用基于边缘的方法就不合适了,用基于区域的方法更好。再比如带纹理的图像,例如条纹衫,如果用基于边缘的方法很可能就把每一条纹都分割成一个物体,但实际上衣服是一个整体,这时候用基于纹理的方法就能把纹理相同或相似的区域分成一个整体。
不过总体来说,基于区域的方法近些年更热一些,如Meanshift分割方法、测地线活动轮廓模型、JSEG等。

热点内容
压缩油19 发布:2025-03-17 12:25:29 浏览:854
linux上网代理 发布:2025-03-17 12:23:56 浏览:358
c是高级语言吗 发布:2025-03-17 12:16:31 浏览:522
python泛型 发布:2025-03-17 12:15:01 浏览:481
编程猫被盗 发布:2025-03-17 12:02:18 浏览:130
海关锁密码箱如何设置新密码 发布:2025-03-17 11:53:50 浏览:559
农业卡号的密码在哪里改 发布:2025-03-17 11:48:57 浏览:966
杨澜超级访问 发布:2025-03-17 11:47:17 浏览:237
数据库无损连接 发布:2025-03-17 11:47:16 浏览:13
memcachephp类 发布:2025-03-17 11:40:04 浏览:829