zoukankan      html  css  js  c++  java
  • 边缘分割技术

    常见检测模板

    检测间断点

    [检测间断点= left[ egin{matrix} -1 & -1 & -1 \ -1 & 8 & -1 \ -1 & -1 & -1 \ end{matrix} ight] ]

    检测线段

    [水平检测= left[ egin{matrix} -1 & -1 & -1 \ 2 & 2 & 2 \ -1 & -1 & -1 \ end{matrix} ight] ]

    [垂直检测= left[ egin{matrix} -1 & 2 & -1 \ -1 & 2 & -1 \ -1 & 2 & -1 \ end{matrix} ight] ]

    [+45°检测= left[ egin{matrix} -1 & -1 & 2 \ -1 & 2 & -1 \ 2 & -1 & -1 \ end{matrix} ight] ]

    [-45°检测= left[ egin{matrix} 2 & -1 & -1 \ -1 & 2 & -1 \ -1 & -1 & 2 \ end{matrix} ight] ]

    如何使用这些检测模板?

    h1=模板;
    h2=模板;
    h3=模板;
    h4=模板;
    imgOut1=imfilter(imgIn,h1);
    imgOut2=imfilter(imgIn,h2);
    imgOut3=imfilter(imgIn,h3);
    imgOut4=imfilter(imgIn,h4);
    
    J=imgOut1+imgOut2+imgOut3+imgOut4;
    imshow(J);
    

    微分算子

    roberts算子

    • roberts算子由下面两个组成

    [left[ egin{matrix} 1 & 0 \ 0 & -1 \ end{matrix} ight] ]

    [left[ egin{matrix} 0 & 1 \ -1 & 0 \ end{matrix} ight] ]

    • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
      BW=edge(I,'roberts'); %采用系统自动计算的阈值分割图像,返回BW二值图像
      BW=edge(I,'roberts',thresh); %自己设定分割阈值,忽略小于阈值的像素
      [BW,thresh]=edge(I,'roberts'...) %返回采用的分割阈值

    prewitt算子

    • 可定义方向
    • prewitt算子由下面两个组成

    [水平梯度= left[ egin{matrix} -1 & -1 & -1 \ 0 & 0 & 0 \ 1 & 1 & 1 \ end{matrix} ight] ]

    [垂直梯度= left[ egin{matrix} -1 & 0 & -1 \ -1 & 0 & -1 \ -1 & 0 & -1 \ end{matrix} ight] ]

    • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
      BW=edge(I,'prewitt'); %采用系统自动计算的阈值分割图像,返回BW二值图像
      BW=edge(I,'prewitt',thresh); %thresh不设或为[],则系统自己计算
      BW=edge(I,'prewitt',thresh,direction); %direction方向,可取horizontal、vertical和both(默认)
      [BW,thresh]=edge(I,'prewitt'...) %返回采用的分割阈值

    sobel算子

    • 可定义方向
    • sobel算子由下面两个组成

    [水平梯度= left[ egin{matrix} -1 & 0 & 1 \ -2 & 0 & 2 \ -1 & 0 & 1 \ end{matrix} ight] ]

    [垂直梯度= left[ egin{matrix} -1 & -2 & -1 \ 0 & 0 & 0 \ 1 & 2 & 1 \ end{matrix} ight] ]

    • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
      BW=edge(I,'sobel'); %采用系统自动计算的阈值分割图像,返回BW二值图像
      BW=edge(I,'sobel',thresh); %归一化阈值
      BW=edge(I,'sobel',thresh,direction); %direction方向,可取horizontal、vertical和both(默认)
      [BW,thresh]=edge(I,'sobel'...) %返回采用的分割阈值

    canny算子

    • canny算子具有低误码率、高定位精度和抑制虚假边缘等优点
    • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
      BW=edge(I,'canny'); %采用系统自动计算的阈值分割图像,返回BW二值图像
      BW=edge(I,'canny',thresh); %阈值是一个含2个元素的向量(最低和最高阈值),当单指定时默认是最高阈值,最低阈值为0.4*thresh
      BW=edge(I,'canny',thresh,direction); %direction方向,可取horizontal、vertical和both(默认)
      [BW,thresh]=edge(I,'canny'...) %返回采用的分割阈值

    LOG算子

    • 二阶微分的拉普拉斯算子对噪声非常敏感,LOG算子是在经典算子基础发展起来的边缘检测算子,根据信噪比求得检测边缘的最有滤波器。先采用Gaussian对图像进行平滑,在采用拉普拉斯算子检测图像边缘。
    • 边界定位精度高,抗干扰能力强,连续性好
    • 使用edge()进行图像边缘检测,该函数返回二值图像,大小与输入相同,数据类型为逻辑型
      BW=edge(I,'log'); %采用系统自动计算的阈值分割图像,返回BW二值图像
      BW=edge(I,'log',thresh); %阈值是一个含2个元素的向量(最低和最高阈值),当单指定时默认是最高阈值,最低阈值为0.4*thresh
      BW=edge(I,'log',thresh,sigma); %高斯平滑的sigma参数
      [BW,thresh]=edge(I,'log'...) %返回采用的分割阈值

    利用fspecial()产生域定义模板

    h=fspecial(method,patter)
    -method:算子
    	-'sobel'
    	-'prewitt'
    	-'laplacian'
    	-'log',带参数:高斯sigma
    -patter:参数,根据算子方法不同拥有不同参数
    imgOut=imfilter(I,h...)
    
  • 相关阅读:
    分页精度
    abp zero core 启动vue项目
    swagger 配置错误
    .net core 3.0配置跨域
    .net core 3.0 swagger
    .net core 3.0一个记录request和respose的中间件
    .net Core3.0 +Nlog+Sqlserver
    .net core 3.0+unit of work (一)
    .NetCore 3.0迁移遇到的各种问题
    open xml 导出excel遇到的问题
  • 原文地址:https://www.cnblogs.com/thgpddl/p/12520464.html
Copyright © 2011-2022 走看看