精华内容
下载资源
问答
  • 2022-05-28 18:05:25

    一、 功能

    适用:图像的边缘检测
    

    二、 算法思路

      对图像进行预处理,转成灰度图、灰度图转成二值图、然后进行膨胀操作,最后进行边缘检测。

    三、 matlab代码

    代码示例:

    
    % 1 读取文件
    I=imread('tu.jpg');
    figure(1),imshow(I)
    title('原图像');
    
    % 2 rgb图转灰度图
    if length(size(I))==3                        
        I=rgb2gray(I);
    end     
    
     % 3 灰度图转二值图
    I=im2bw(I,0.4);                             
    figure(2),imshow(I)
    title('二值图');
    
    % 4 图像膨胀处理
    B=[0 1 0;1 1 1;0 1 0];                      
    I=imdilate(I,B);
    figure(3),imshow(I);
    title('膨胀');
    
    % 5 边缘检测(亚像素点提取)
    I=edge(I,'canny',0.9);             
    更多相关内容
  • MATLAB图像边缘提取

    2016-11-21 10:03:19
    用于图像处理初学者使用,对比了Sobel算子,Roberts算子,Prewitt算子,Canny算子,Laplacian算子等5种算子提取图像边缘的效果
  • 使用matlab app进行图形界面化设计,能够从文件夹中读取文件并在界面上展示,设计多种边缘检测算子与滤波处理和二值化处理,最后通过Hough变换检测进行图像边缘描绘并且能够在界面上显示处理效果。并能将最后的效果...
  • matlab图像边缘提取

    2012-09-27 11:41:38
    matlab中对图像边缘提取的简单程序
  • 这次小白为大家带来滤波的新用处——边缘提取。什么是图像边缘所谓图像边缘(Edlge)是指图像局部特性的不连续性,例如,灰度级的突变,颜色的突变,纹理结构的突变等。边缘广泛存在于目标与目标、物体与背景、区域与...

    60e39024d492757c16ce0ba71c7af96e.gif

    上一讲小白为小伙伴们带来了如何使用自编函数和自带函数对图像进行滤波,去除图像的噪声。这次小白为大家带来滤波的新用处——边缘提取。

    什么是图像边缘

    所谓图像边缘(Edlge)是指图像局部特性的不连续性,例如,灰度级的突变,颜色的突变,纹理结构的突变等。边缘广泛存在于目标与目标、物体与背景、区域与区域(含不同色彩)之间,它是图像分割所依赖的重要特征。

    小白今天主要介绍几种典型的图像灰度值突变的边缘检测方法,其原理也适用用于其他特性突变的边缘检测。图像的边缘通常与图像灰度的一阶导数的不连续性有关。图像灰度的不连续性可分为两类:阶跃不连续,即图像灰度在不连续处的两边的像素灰度有明显的差异。线条不连续,即图像灰度突然从一个值变化到另一个值,保持一个较小的行程又返回到原来的值。但是在实际中,阶跃和线条边缘图像是较少见的,由于空间分辨率(尺度空间)、图像传感器等原因会使阶跃边缘变成斜坡形边缘,线条边缘变成房顶形边缘。它们的灰度变化不是瞬间的而是跨越一定距离的。几种边缘类型,可以通过下面的图片有个更清晰的认识。

    8277d33621eaf5f6231e4d5c63cc608e.png

    Sobel算子

    在前面的关于图像滤波的讲解中,小白为大家介绍了sobel算子模板,但是没有讲解其具体作用。这次的讲解中,小白将为大家讲解什么是sobel算子。

    sobel算子是一阶的梯度算子,也就是对信号求取一阶导数,对噪声具有平滑作用,提供较为精确的边缘方向信息,但是边缘定位精度不够高;但是该种方法比较简单,容易实现,也比较容易理解。

    对一个连续函数求导是一件比较容易的事情,但是图像中的数据都是数字化之后的数据,是离散的,因此对于求导就需要使用差分方式:前面的像素灰度值减去后面像素的灰度值,并将结果大于一定阈值的设为边缘,否则就不是边缘。我们用数学公式表示就是:I(x,y)-I(x-n,y)。公式给出的是两个像素在同一行中,两个像素也可以在同一列中,而且方向也可以更改。

    根据之前的模板来看的话,只有一个维度的求导可以用如下的模板表示:

    416187976c0946b4df4614ab6fc43d02.png

    66c0b332954b66a2cde509ef2692a462.png

    可以用上面两个模板分别对原图像求取横着和竖着边缘,之后对两者求并集,便是图像整体的边缘。但是细心的小伙伴肯定会发现,模板之后两个元素,以哪个元素作为模板的中心呢?为了解决这个问题,研究者将其进行了扩展,变为以下的模板:

    19b62086c125c20715fe14556af30e4b.png

    4645680808349cc635a355e83beaa782.png

    模板长度变为奇数便可以解决模板没有“中心”的问题。后续经过各种演化,最终变为前面几讲中提到的模板的样子。小伙伴在使用的过程中可以直接使用其模板就可以,而且Matlab也是带有sobel边缘提取的函数,不需要小伙伴自己编写复杂的程序。

    91a6383d1d6413714ceeef7989c780b7.png

    常用的sobel边缘提取模板

    Roberts算子

    其实很多种算子都借鉴了sobel方法的思想,Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。我们直接给出Roberts算子的模板:

    68cf8efb81d2d8181f3ba847637e3c6c.png

    通过模板我们也能看出来,该算法是采用检测斜着方向的梯度变化来判定图像的边缘。

    Canny算子

    Canny算子是目前边缘检测最常用的算法,效果也是最理想的。但是Canny边缘检测算法不是简单的模板卷积而已,通过梯度方向和双阈值法来检测边缘点,具体算法讲解,可以通过点击”原文阅读“来了解更多:

    Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。

    Matlab边缘提取

    Matlab提供多种边缘检测方法,通过函数edge(image,'method')来实现图像的边缘提取,通过修改参数‘method’来实现不同滤波方法。具体的边缘检测代码如下:

    I=imread('lena.bmp');%  提取图像

    I=rgb2gray(I);%将彩色图转换灰度图

    BW1=edge(I,'sobel'); %用SOBEL算子进行边缘检测

    BW2=edge(I,'roberts');%用Roberts算子进行边缘检测

    BW3=edge(I,'prewitt'); %用prewitt算子进行边缘检测

    BW4=edge(I,'log'); %用log算子进行边缘检测

    BW5=edge(I,'canny'); %用canny算子进行边缘检测

    subplot(2,3,1), imshow(BW1);

    title('sobel edge check');

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

    title('roberts edge check');

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

    title('prewitt edge check');

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

    title('log edge check');

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

    title('canny edge check');

    将上述代码复制到Matalb里,把图像地址改成自己想要提取边缘的图像,运行之后便可的得到图像边缘。小白在自己的电脑上运行程序的结果如下图。在程序里也利用其他算子提取了边缘,方便小伙伴的对比。

    49c19fa212de4fd512b53a81888e23d0.png

    总结

    图像的边缘提取是对像素灰度值连续性、变化大小的检测,不同边缘检测的方法各有优缺点,需要根据实际的情况来选择提取边缘的方法。

    相关阅读:

    展开全文
  • 本资源是Matlab图像处理程序——去噪、边缘增强、边缘提取,直接是.m文件,可直接运行,但里面并未附加图片资源,大家需要使用自己的待处理图片
  • 使用soble算子对图像进行边缘检测。再进行细化(阈值有问题),但是效果不是很好。效果如下图处理的目的是检测出道路。请问接下来如何处理,把边缘点连成线,从而检测出道路。先在这里谢谢大家了。下面是代码hg=zeros...

    使用soble算子对图像进行边缘检测。再进行细化(阈值有问题),但是效果不是很好。效果如下图

    处理的目的是检测出道路。请问接下来如何处理,把边缘点连成线,从而检测出道路。

    先在这里谢谢大家了。下面是代码

    hg=zeros(3,3);  %设定高斯平滑滤波模板的大小为3*3

    delta=0.5;

    for x=1:1:3

    for y=1:1:3

    u=x-2;

    v=y-2;

    hg(x,y)=exp(-(u^2+v^2)/(2*pi*delta^2));

    end

    end

    h=hg/sum(hg(:));

    g = imread('1.bmp');

    f=rgb2gray(im2double(g));

    subplot(2,2,1),imshow(f)

    title('原始图像');

    [m,n]=size(f);

    ftemp=zeros(m,n);

    rowhigh=m-1;

    colhigh=n-1;

    %%%高斯滤波%%%

    for x=2:1:rowhigh-1

    for y=2:1:colhigh-1

    mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];

    A=h.*mod;

    ftemp(x,y)=sum(A(:));

    end

    end

    f=ftemp

    subplot(2,2,2),,imshow(f)

    title('高斯滤波器后的图像');

    %%%%3*3的soble算子%%%%%%%%

    sx=[-1 -2 -1;0 0 0;1 2 1];

    sy=[-1 0 1;-2 0 2;-1 0 1];

    for x=2:1:rowhigh-1

    for y=2:1:colhigh-1

    mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];

    fsx=sx.*mod;

    fsy=sy.*mod;

    ftemp(x,y)=max(abs(sum(fsx(:))),abs(sum(fsy(:))));

    end

    end

    fs=im2uint8(ftemp);

    subplot(2,2,3),imshow(fs)

    title('用soble检测的原始图像');

    %%%域值分割%%%

    TH2=30;  %设定阈值

    for x=2:1:rowhigh-1

    for y=2:1:colhigh-1

    if (fs(x,y)>=TH2)&((fs(x,y-1) <= fs(x,y)) & (fs(x,y) > fs(x,y+1)) )

    fs(x,y)=200;

    elseif(fs(x,y)>=TH2)&( (fs(x-1,y) <=fs(x,y)) & (fs(x,y) >fs(x+1,y)))

    fs(x,y)=200;

    else fs(x,y)=50;

    end

    end

    end

    subplot(2,2,4),imshow(fs)

    title('用soble检测并细化后的图像')

    展开全文
  • 自编matlab程序,实现对图像边缘提取。简单实用!
  • MATLAB图像处理之图像边缘提取

    万次阅读 多人点赞 2018-10-02 23:06:53
    MATLAB中有几种算法可以对图像进行边缘提取,其中一种就是edge算法,这个edge算法中有好几个算子,每一个算子分别对应着一种边缘提取的原理,接下来就来看一下几种方法的异同 %读取一张图片,并显示 original_...

    MATLAB中有几种算法可以对图像进行边缘提取,其中一种就是edge算法,这个edge算法中有好几个算子,每一个算子分别对应着一种边缘提取的原理,接下来就来看一下几种方法的异同

    %读取一张图片,并显示
    original_picture=imread('D:\SoftWare\matlab2016a\Project\Picture\cat.jpg');
    Pic2=im2bw(original_picture,thresh);
    figure(1)
    subplot(2,2,1);
    imshow(original_picture);
    title('原始RGB图像')
    subplot(222)
    imshow(Pic2)
    title('二值化图像')
    
    %用edge算法对二值化图像进行边缘提取
    PicEdge1=edge(Pic2,'log');
    subplot(223);
    imshow(PicEdge1);
    title('log算子')
    
    PicEdge2 = edge(Pic2,'canny');
    subplot(224);
    imshow(PicEdge2);
    title('canny算子');
    
    PicEdge3=edge(Pic2,'sobel');
    figure(2)
    subplot(221)
    imshow(PicEdge3);
    title('sobel算子')
    
    PicEdge4=edge(Pic2,'prewitt');
    subplot(222)
    imshow(PicEdge4);
    title('sprewitt算子')
    
    PicEdge5=edge(Pic2,'zerocross');
    subplot(223)
    imshow(PicEdge5);
    title('zerocross算子')
    
    PicEdge6=edge(Pic2,'roberts');
    subplot(224)
    imshow(PicEdge6);
    title('roberts算子')
    
    



    虽然我们从提取的结果来看,可能他们的差别不是很明显,但是这几个算子的基本原理还是有区别的,另外由于我采用的原始图片可能图中的猫和背景颜色有的部分很相似,所以会导致有些猫的边缘没有被提取出来,以后还需改善。

    展开全文
  • 数字图像边缘提取

    2017-07-01 16:55:54
    利用傅里叶描述子复原图像 傅里叶描述子逆变换重建边界 对边界进行二次取样源码 进行边缘提取,得到包络数据信息等等。
  • 基于形态学处理的医学图像边缘轮廓提取matlab仿真+含代码操作演示视频 运行注意事项:使用matlab2021a或者更高版本测试,运行里面的Runme.m文件,不要直接运行子函数文件。运行时注意matlab左侧的当前文件夹窗口...
  • MATLAB_抠图_锐化_边缘提取.zip
  • 数学建模挑战赛的代码,边缘提取,然后使用函数拟合
  • 这个程序里面是matlab自定义代码实现对图像的均值滤波、中值滤波、边缘提取,DFT,matlab实现,自定义函数实现的
  • Matlab实现:图像边缘提取

    万次阅读 2018-08-24 23:17:13
    1、 边缘提取算法 方法一:一阶微分算子 Sobel算子 Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像的边缘不止一个像素。 Roberts算子 ...
  • matlab函数用于图像边缘提取,包含的方法有说soble算子
  • 主要为大家详细介绍了MATLAB Delaunay算法提取离散点边界的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 拉普拉斯算法实现图像边缘提取(MATLAB实现)clear;clc;a=imread('street.jpg');e=a(:,:,1);r=e;c=e;[m,n]=size(e);%拉普拉斯算法提取边缘h=zeros(m-1,n-1);for i=2:m-1for j=2:n-1h(i,j)=c(i,j+1)+c(i,j-1)+c(i+1,j)+...
  • 代码 目的使用Roberts算子、Prewitt算子、Prewitt斜对角线算子、Laplacian算子(中心-4)、Laplacian算子(中心-20)提取图像边缘。思路用矩阵表示算子。遍历图像,以每个像素点为中心的33/22矩阵为待处理数据,将算子...
  • 这是华中科技大学数字图像处理课程的作业,涉及图像边缘检测、手动实现sobel算子和prewitt算子,梯度图像的生成,街区距离的计算
  • MATLAB数字图像处理
  • Matlab 代码,该程序功能实现对图像进行边缘提取,计算周长。
  • 该资源是Matlab图像处理——小波变换去噪声、边缘提取,直接是.m文件,可直接运行。里面并未附加图像资源,需要使用自己待处理图像。
  • 调用matlab中的函数对图像进行边缘提取,对遥感图像非常有帮助,建议大家来看看!
  • 图像分割时,经常需要实现对边界的跟踪,从而实现对区域的提取。输入是一幅图像,输出是提取的该图像的轮廓。
  • 数字图像处理(DIP)作业8 matlab or OpenCV 对lena 图片进行边缘提取
  • 【边缘检测】基于CNN的灰度图像边缘提取matlab源码.md
  • 这是个doc文档,里面写满了各种图像处理中边缘检测的matlab代码,包括分割、检测、提取等源程序代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,377
精华内容 3,350
关键字:

matlab图像边缘提取

matlab 订阅