精华内容
下载资源
问答
  • 分水岭算法matlab程序

    2011-11-07 17:10:30
    效果很好的分水岭算法!利用MATLAB编写,需要的自行下载!
  • 分水岭算法是现在医学图像分割的经典算法,具有非常高的参考价值
  • 图像分割分水岭算法MATLAB源代码

    热门讨论 2010-06-07 23:21:49
    数字图像处理 图像分割分水岭算法 源代码 matlab
  • 分水岭算法matlab实现

    热门讨论 2009-12-30 20:15:54
    分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界...
  • 改进版分水岭,可以一定程度的消除传统分水岭算法中的过分割现象。原理是用内外部标记。
  • 分水岭算法MATLAB编程代码解析

    千次阅读 2015-10-11 15:48:27
    主要讲述分水岭matlab编程,其中包括步骤和解析。


    close all;


    %%
    %Step 1: 彩色图像->灰度图像
    rgb = imread('pears.png');
    I = rgb2gray(rgb);
    figure;subplot(121)
    imshow(I)
    %Step 2: 利用梯度实现图像的分割
    %使用sobel算子进行边缘检测,
    text(732,501,'Image courtesy of Corel','FontSize',7,'HorizontalAlignment','right')
    hy = fspecial('sobel');
    hx = hy';
    Iy = imfilter(double(I), hy, 'replicate');%实现线性空间滤波函数,一种采用滤波处理的影像增强方法。其理论基础是空间卷积和空间相关。目的是改善影像质量,包括去除高频噪声与干扰,及影像边缘增强、线性增强以及去模糊等。
    Ix = imfilter(double(I), hx, 'replicate');
    gradmag = sqrt(Ix.^2 + Iy.^2);%求模
    subplot(122), imshow(gradmag,[]), title('gradmag')
    %直接用分水岭
    %L=watershed(gradmag);
    %Lrgb=label2rgb(L);
    %figure;imshow(Lrgb),
    %title('Lrgb')
    %No. 如果没有额外的预处理,如下面的标记计算,使用分水岭变换直接结果往往是“过度分割。” 
    % 以下是标记前景和背景物体
    %各种程序可以在这里应用到找到前景标记,它必须连接内的每个前景对象的像素的斑点。在这个例子中,你将使用名为“开放由重建”及以上的图像“闭合由重建”为“干净”的形态学技术。这些操作将创建一个可以使用imregionalmax位于每个对象内部平最大值。
    %Step 3:形态学开操作
    se = strel('disk', 20);%圆形结构元素
    Io = imopen(I, se);%形态学开操作
    figure;subplot(121)
    imshow(Io), title('Io')%显示执行后的图
    %Step 4:腐蚀与重建
    Ie = imerode(I, se);%对图像进行腐蚀
    Iobr = imreconstruct(Ie, I);%对图像进行重建
    subplot(122);imshow(Iobr), %显示重建后的图像
    title('Iobr')
    %Step 5:形态学关操作
    Ioc = imclose(Io, se);%形态学关操作
    figure;subplot(121)
    imshow(Ioc), 
    title('Ioc')
    %Step 6:图像膨胀与求反
    Iobrd = imdilate(Iobr, se);%对图像进行膨胀
    Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
    Iobrcbr = imcomplement(Iobrcbr);%对图像求反
    subplot(122);imshow(Iobrcbr), 
    title('Iobrcbr')
    %%Step 7:获得局部最大值
    fgm = imregionalmax(Iobrcbr);%获得局部最大值
    figure;imshow(fgm), 
    title('fgm')
    %Step 8:在原图上显示极大值区域
    I2 = I;
    I2(fgm) = 255;%局部极大值处像素值设为255
    figure;imshow(I2), 
    title('fgm superimposed on original image')%在原图上显示极大值区域
    se2 = strel(ones(5,5));%构建元素
    fgm2 = imclose(fgm, se2);%关操作
    fgm3 = imerode(fgm2, se2);%腐蚀
    fgm4 = bwareaopen(fgm3, 20);%开操作
    %Step 9:显示修改后的极大区域
    I3 = I;
    I3(fgm4) = 255;%前景设置为255
    figure;subplot(121),
    imshow(I3)%显示修改后的极大区域
    title('fgm4 superimposed on original image')
    %现在标记背景, 在清理后的图像,Iobrcbr,暗像素属于背景,所以你可以从一个阈值操作。
    %Step 10:转化为二值图像
    bw = im2bw(Iobrcbr, graythresh(Iobrcbr));
    subplot(122);imshow(bw),
    title('bw')
    %背景像素是黑色的,但理想地,我们不希望的背景标记是太靠近我们目标对象的边缘。我们通过'骨骼化'进行细分,对二值图像的距离进行分水岭变换,然后寻找分水岭的界线。
    %Step 11:
    D = bwdist(bw);%计算距离
    DL = watershed(D);%分水岭变换
    bgm = DL == 0;%求取分割边界
    figure; imshow(bgm), %显示分割后的边界
    title('Watershed ridge lines (bgm)')
    gradmag2 = imimposemin(gradmag, bgm | fgm4);%置最小值
    L = watershed(gradmag2);%分水岭变换
    I4 = I;
    I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255;%前景及边界处置255
    figure; subplot(121)
    imshow(I4)%突出前景及边界
    title('Markers and object boundaries')
    Lrgb = label2rgb(L, 'jet', 'w', 'shuffle');%转化为伪彩色图像
    subplot(122); imshow(Lrgb)%显示伪彩色图像
    title('Colored watershed label matrix')
    figure; imshow(I), 
    hold on
    himage = imshow(Lrgb);%在原图上显示伪彩色图像
    set(himage, 'AlphaData', 0.3);
    title('Lrgb superimposed transparently on original image')
    展开全文
  • 基于标记的分水岭算法matlab程序

    热门讨论 2011-05-26 15:57:20
    基于标记的分水岭自动分割算法,目的是为了降低分水岭的过分割问题。较为准确地标记提取方法可以实现对图像的成功分割。
  • 【图像处理】分水岭算法 Matlab

    千次阅读 2018-06-29 14:28:08
    %watershed分水岭算法 Lim的值greater than or equal to 0,等于0是分水岭脊像素 em=Lim==0; g3=imimposemin(g2,im|em); g4=watershed(g3); figure; imshow(g4); g5=I; g5(g4==0)=255; figure; imshow(g5); #######...
    I= imread('road.jpg');    
    imshow(I);
    h=fspecial('sobel'); %h = fspecial(type) creates a two-dimensional filter h of the specified type. fspecial returns h as
                         %a correlation kernel, which is the appropriate form to use with imfilter. type is a string having one of these values. 
    fd=double(I);%double使数据变成双精度
    g=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2);
    figure;
    imshow(g);
    g2=imclose(imopen(g,ones(3,3)),ones(3,3));
    figure;
    imshow(g2);
    im=imextendedmin(g2,10);   %
    Lim=watershed(bwdist(im)); %watershed分水岭算法 Lim的值greater than or equal to 0,等于0是分水岭脊像素
    em=Lim==0;
    g3=imimposemin(g2,im|em);
    g4=watershed(g3);
    figure;
    imshow(g4);
    g5=I;
    g5(g4==0)=255;
    figure;
    imshow(g5);


    ####################################################

    另一篇文章

    点击打开链接


    展开全文
  • 分水岭算法Matlab实现——三种方法

    千次阅读 2012-07-08 15:55:29
    clear,clc%三种方法进行分水岭分割 %读入图像 filename='sar1.bmp'; f=imread(filename); Info=imfinfo(filename); if Info.BitDepth>8  f=rgb2gray(f); end figure, mesh(double(f));%显示图像,类似集水...

    clear,clc%三种方法进行分水岭分割

    %读入图像

    filename='sar1.bmp';

    f=imread(filename);

    Info=imfinfo(filename);

    if Info.BitDepth>8   

    f=rgb2gray(f);

    end

    figure,

    mesh(double(f));%显示图像,类似集水盆地

    %方法1:一般分水岭分割,从结果可以看出存在过分割问题

    b=im2bw(f,graythresh(f));%二值化,注意应保证集水盆地的值较低(为0),否则就要对b取反

    d=bwdist(b);             %求零值到最近非零值的距离,即集水盆地到分水岭的距离  

      l=watershed(-d);         %matlab自带分水岭算法,l中的零值即为风水岭

    w=l==0;                  %取出边缘

    g=b&~w;                  %用w作为mask从二值图像中取值

    figure

    subplot(2,3,1),

    imshow(f);

    subplot(2,3,2),

    imshow(b);

    subplot(2,3,3),

    imshow(d);

    subplot(2,3,4),

    imshow(l);

    subplot(2,3,5),

    imshow(w);

    subplot(2,3,6),

    imshow(g);

    %方法2:使用梯度的两次分水岭分割,从结果可以看出还存在过分割问题(在方法1的基础上改进)

    h=fspecial('sobel');%获得纵方向的sobel算子

    fd=double(f);

    g=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2);%使用sobel算子进行梯度运算

    l=watershed(g);%分水岭运算

    wr=l==0;      

     g2=imclose(imopen(g,ones(3,3)),ones(3,3));%进行开闭运算对图像进行平滑

    l2=watershed(g2);%再次进行分水岭运算

    wr2=l2==0;f2=f;

    f2(wr2)=255;

    figuresubplot(2,3,1),

    imshow(f);

    subplot(2,3,2),imshow(g);

    subplot(2,3,3),imshow(l);

    subplot(2,3,4),imshow(g2);

    subplot(2,3,5),imshow(l2);

    subplot(2,3,6),imshow(f2);

    %方法3:使用梯度加掩模的三次分水岭算法(在方法2的基础上改进)

    h=fspecial('sobel');%获得纵方向的sobel算子

    fd=double(f);

    g=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2);%使用sobel算子进行梯度运算

    l=watershed(g);%分水岭运算

    wr=l==0;

     rm=imregionalmin(g);  %计算图像的区域最小值定位,该函数仅仅是用来观察为何分水岭算法产生这么多集水盆地

    im=imextendedmin(f,2);%上面仅是产生最小值点,而该函数则是得到最小值附近的区域,此处的附近是相差2的区域

    fim=f;                 

      fim(im)=175;              %将im在原图上标识出,用以观察

     lim=watershed(bwdist(im));%再次分水岭计算

    em=lim==0;

    g2=imimposemin(g,im|em);%在梯度图上标出im和em,im是集水盆地的中心,em是分水岭

    l2=watershed(g2);       %第三次分水岭计算

    f2=f;f2(l2==0)=255;          %从原图对分水岭进行观察

    figuresubplot(3,3,1),imshow(f);

    subplot(3,3,2),imshow(g);

    subplot(3,3,3),imshow(l);

    subplot(3,3,4),imshow(im);

    subplot(3,3,5),imshow(fim);

    subplot(3,3,6),imshow(lim);

    subplot(3,3,7),imshow(g2);

    subplot(3,3,8),imshow(l2);

    subplot(3,3,9),imshow(f2);

    以上是分水岭的算法,这是摘抄自百度知道的里的回复,感觉挺好,就年过来了。摘抄地址http://zhidao.baidu.com/question/254301763.html

    展开全文
  • 分水岭算法 matlab的三种实现方法

    千次阅读 2012-08-14 19:16:02
    本文转自: ... clear,clc%三种方法进行分水岭分割 %读入图像 filename='sar1.bmp'; f=imread(filename); Info=imfinfo(filename); if Info.BitDepth>8  f=rgb2gray

    本文转自:

    http://blog.csdn.net/caiye917015406/article/details/7726628

    clear,clc%三种方法进行分水岭分割

    %读入图像

    filename='sar1.bmp';

    f=imread(filename);

    Info=imfinfo(filename);

    if Info.BitDepth>8   

    f=rgb2gray(f);

    end

    figure,

    mesh(double(f));%显示图像,类似集水盆地

    %方法1:一般分水岭分割,从结果可以看出存在过分割问题

    b=im2bw(f,graythresh(f));%二值化,注意应保证集水盆地的值较低(为0),否则就要对b取反

    d=bwdist(b);             %求零值到最近非零值的距离,即集水盆地到分水岭的距离  

      l=watershed(-d);         %matlab自带分水岭算法,l中的零值即为风水岭

    w=l==0;                  %取出边缘

    g=b&~w;                  %用w作为mask从二值图像中取值

    figure

    subplot(2,3,1),

    imshow(f);

    subplot(2,3,2),

    imshow(b);

    subplot(2,3,3),

    imshow(d);

    subplot(2,3,4),

    imshow(l);

    subplot(2,3,5),

    imshow(w);

    subplot(2,3,6),

    imshow(g);

    %方法2:使用梯度的两次分水岭分割,从结果可以看出还存在过分割问题(在方法1的基础上改进)

    h=fspecial('sobel');%获得纵方向的sobel算子

    fd=double(f);

    g=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2);%使用sobel算子进行梯度运算

    l=watershed(g);%分水岭运算

    wr=l==0;      

     g2=imclose(imopen(g,ones(3,3)),ones(3,3));%进行开闭运算对图像进行平滑

    l2=watershed(g2);%再次进行分水岭运算

    wr2=l2==0;f2=f;

    f2(wr2)=255;

    figuresubplot(2,3,1),

    imshow(f);

    subplot(2,3,2),imshow(g);

    subplot(2,3,3),imshow(l);

    subplot(2,3,4),imshow(g2);

    subplot(2,3,5),imshow(l2);

    subplot(2,3,6),imshow(f2);

    %方法3:使用梯度加掩模的三次分水岭算法(在方法2的基础上改进)

    h=fspecial('sobel');%获得纵方向的sobel算子

    fd=double(f);

    g=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2);%使用sobel算子进行梯度运算

    l=watershed(g);%分水岭运算

    wr=l==0;

     rm=imregionalmin(g);  %计算图像的区域最小值定位,该函数仅仅是用来观察为何分水岭算法产生这么多集水盆地

    im=imextendedmin(f,2);%上面仅是产生最小值点,而该函数则是得到最小值附近的区域,此处的附近是相差2的区域

    fim=f;                 

      fim(im)=175;              %将im在原图上标识出,用以观察

     lim=watershed(bwdist(im));%再次分水岭计算

    em=lim==0;

    g2=imimposemin(g,im|em);%在梯度图上标出im和em,im是集水盆地的中心,em是分水岭

    l2=watershed(g2);       %第三次分水岭计算

    f2=f;f2(l2==0)=255;          %从原图对分水岭进行观察

    figuresubplot(3,3,1),imshow(f);

    subplot(3,3,2),imshow(g);

    subplot(3,3,3),imshow(l);

    subplot(3,3,4),imshow(im);

    subplot(3,3,5),imshow(fim);

    subplot(3,3,6),imshow(lim);

    subplot(3,3,7),imshow(g2);

    subplot(3,3,8),imshow(l2);

    subplot(3,3,9),imshow(f2);

    以上是分水岭的算法,这是摘抄自百度知道的里的回复,感觉挺好,就年过来了。摘抄地址http://zhidao.baidu.com/question/254301763.html

    展开全文
  • 分水岭算法 matlab的三种实现方法 .

    万次阅读 2012-11-27 16:47:03
    本文转自: ... clear,clc%三种方法进行分水岭分割 %读入图像 filename='sar1.bmp'; f=imread(filename); Info=imfinfo(filename); if Info.BitDepth>8  f=rgb2gray
  • 分水岭:Matlab分水岭算法
  • MATLAB 分水岭算法

    2018-03-03 12:05:49
    MATLAB自己实现的分水岭算法,细节都是自己实现的,严格按照原本步骤实现,没有任何加速算法,带一张图片,可与MATLAB自带分水岭算法比较,看不出区别,中科大数字图像分析作业,自己做的,慎重下载
  • matlab 分水岭算法

    2015-12-30 10:52:48
    matlab 多个分水岭算法实现图像分割,注释详细
  • matlab分水岭算法

    2011-12-02 09:53:36
    matlab分水岭算法,一个基础的matlab分水岭算法代码,可根据其进行移植和更改
  • 分水岭算法matlab实现

    热门讨论 2009-08-25 17:03:00
    该算法是分水岭算法的典型实现,用于图像分割,通过matlab便可打开,来完成输入图像的分割!
  • matlab分水岭算法.docx

    2021-03-19 21:14:17
    matlab分水岭算法的图像分割
  • matlab实现图像分水岭分割算法并且有改进的算法实现,两者相互比较效果,并且文档最后直接复制了全部的实现代码
  • Matlab实现分水岭算法,这个算法是图像边缘检测的常用算法。
  • 标记符控制的分水岭算法原理及matlab实现

    万次阅读 多人点赞 2016-11-30 21:17:51
    本文介绍了分水岭算法,以及改进的标记符控制的分水岭算法,并提供了matlab源码
  • Matlab关于分水岭算法及改进的分水岭算法
  • matlab实现的区域增长和分水岭算法,以及基于sobel算子,prewitt算子,canny算子,log算子的边缘检测算法。
  • matlab实现分水岭算法

    千次阅读 2017-02-14 23:09:23
    数学形态学以图像的形态特征为研究...分水岭算法(Watershed)基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形
  • 利用分水岭算法进行图像分割matlab实现 1’原理 分水岭算法将图像看成“地形图”,灰度值大的对应山峰,灰度值小的对应集水盆,集水盆边界即为分水岭。 在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸...
  • matlab实现分水岭算法处理图像分割

    千次阅读 2018-11-08 09:03:15
    matlab实现分水岭算法处理图像分割
  • watershed分水岭算法matlab例子详解

    万次阅读 2014-11-24 21:45:14
    今天本来想试试mser算法的,结果没看懂。就先看看类似的fen'shui'l

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 188
精华内容 75
关键字:

分水岭算法matlab

matlab 订阅