执行边缘检测的三个基本步骤:
1、为降噪对图像进行平滑处理。(导数对噪声具有敏感性。图像的正负分量检测困难)
2、边缘点的检测。(提取边缘点的潜在候选者)
3、边缘定位。(从候选者中选出真是边缘点成员)

基本算子:梯度算子(表征某点边缘强度和方向,又称边缘检测子)

较为简单的边缘检测算子模板:


sobel模板能较好地抑制噪声。
常用绝对值来近似梯度幅值,保持灰度级的相对变化,代价是导致滤波器不再是各向同性的。

sobel计算过程


Opencv库函数调用方法:

void Sobel (
InputArray src,
OutputArray dst,
int ddepth,
int dx, x方向上的差分阶数
int dy, y方向上的差分阶数
int ksize=3, 核的大小,为奇数
double scale=1, 计算导数时的缩放因子
double delta=0, 将结果存入目标图像前可选的值
int borderType=BORDER_DEFAULT ) ;

int main()
{// Read image 读取图像SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);       //字体为绿色//载入原图Mat srcImage = imread("D:\\opencv_picture_test\\形态学操作\\coin_inv.png",0);    //读取灰度图//判断图像是否加载成功if (srcImage.empty()){cout << "图像加载失败!" << endl;return -1;}elsecout << "图像加载成功!" << endl << endl;Mat gradx, grady;Mat abs_gradx, abs_grady;Mat dstImage;//求x方向的梯度Sobel(srcImage,gradx,CV_16S,1,0,3,1,1,BORDER_DEFAULT);//  x方向1阶差分 y方向0 核大小3convertScaleAbs(gradx, abs_gradx);     //绝对值//求y方向的梯度Sobel(srcImage, grady, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT);//  x方向1阶差分 y方向0 核大小3convertScaleAbs(grady, abs_grady);     //绝对值addWeighted(abs_gradx,0.5, abs_grady,0.5,0,dstImage);imshow("srcImage", srcImage);imshow("x方向", abs_gradx);imshow("y方向", abs_grady);imshow("整体", dstImage);waitKey(0);return 0;
}



经过ImageWatch放大发现,提取出的边缘比较粗。

减少精密细节的两种方法:
1、对图像进行平滑处理(例如用均值滤波,得到主要边缘)
2、对梯度图像进行阈值处理(梯度幅值大于等于阈值为黑白,小于阈值为黑),不过这一方法容易断线。
当为了突出主要边缘并尽可能维护连续性时,平滑处理和阈值处理两者都要使用。
roberts、prewitt,sobel算子都是以一个或多个模板进行滤波,而未对图像特性和噪声内容采取防护措施。

接下来介绍一种最优的边缘检测方法:canny算子

●低错误率:标识出尽可能多的实际边缘,同时尽可能地减少噪声产生的误报。
●高定位性:标识出的边缘要与图像中的实际边缘尽可能接近。
●最小响应:图像中的边缘只能标识-一次,并且可能存在的图像噪声不应标
识为边缘。

canny算子计算过程


Opencv库函数调用方法:

void Canny (InputArray image , OutputArray edges, double threshold1,
double threshold2 , 两个阈值较小的用于边缘连接,较大的用于控制强边缘的初始端,一般比例控制在3:1或者2:1
int apertureSize=3, sobel核大小
bool L2gradient=false )

int main()
{// Read image 读取图像SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);       //字体为绿色//载入原图Mat srcImage = imread("D:\\opencv_picture_test\\形态学操作\\coin_inv.png",0);    //读取灰度图//判断图像是否加载成功if (srcImage.empty()){cout << "图像加载失败!" << endl;return -1;}elsecout << "图像加载成功!" << endl << endl;Mat dstImage;Canny(srcImage,dstImage,100,33,3,false);imshow("srcImage", srcImage);imshow("整体", dstImage);waitKey(0);return 0;
}

效果:

经过ImageWatch放大,可以发现,边缘只有一格

总的看来,canny算子确实具有优越性。

laplace计算过程


3*3孔径的模板:

opencv库函数调用:


int main()
{// Read image 读取图像SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);       //字体为绿色//载入原图Mat srcImage = imread("D:\\opencv_picture_test\\形态学操作\\coin_inv.png", 0);   //读取灰度图//判断图像是否加载成功if (srcImage.empty()){cout << "图像加载失败!" << endl;return -1;}elsecout << "图像加载成功!" << endl << endl;Mat dstImage,abs_dst;GaussianBlur(srcImage,srcImage,Size(3,3),0); //高斯模糊Laplacian(srcImage,dstImage,CV_16S,3,1,0);convertScaleAbs(dstImage, abs_dst);imshow("srcImage", srcImage);imshow("整体", dstImage);waitKey(0);return 0;
}

图像分割-基本边缘检测roberts,prewitt,sobel,canny,laplace相关推荐

  1. Python图像锐化及边缘检测(Roberts、Prewitt、Sobel、Lapllacian、Canny、LOG)

    目录 图像锐化概述 算法方法介绍 代码实现 效果展示 图像锐化概述 图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处 ...

  2. 图像算法八:【图像分割】边缘检测(Roberts,Sobel,canny)、霍夫变换(hough)、阈值分割、区域分割

    1.我们主要学习以下四种差分算子 Roberts算子 Sobel算子 Prewitt算子 canny算子 % Matlab图像边缘检测梯度算子–Roberts.Prewitt.Sobel.LOG.Ca ...

  3. 几种边缘检测算子的比较Roberts,Sobel,Prewitt,LOG,Canny

    from:https://blog.csdn.net/gdut2015go/article/details/46779251 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中 ...

  4. 边缘检测的各种微分算子比较(Sobel,Robert,Prewitt,Laplacian,Canny)

    边缘检测的各种微分算子比较(Sobel,Robert,Prewitt,Laplacian,Canny) 不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像.需要说明的是:边缘和物体间的 ...

  5. OpenCV 笔记 -- 边缘检测(Sobel、Laplace、Canny)

    OpenCV 笔记 – 边缘检测(Sobel.Laplace.Canny) 参考文档 一.Sobel 算子 1.简介 Sobel 算子是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度近似值.在 ...

  6. 点、线和边缘检测 个人笔记(含Sobel和Laplace等算子、Marr-Hildreth和Canny实现及Hough变换)

    文章目录 1. 前言 2. 使用OpenCV 3 处理图像 笔记 2.1 傅里叶变换及相关.卷积 2.2 个人总结 2.3 相关链接 3. 点.线和边缘检测 笔记 3.1 背景知识 3.2 孤立点的检 ...

  7. 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...

  8. OpenCV边缘检测(Sobel,Scharr,Laplace,Canny)

    对于图像的处理,基本的步骤是这样的: 取得图像数据 -- 将图像进行平滑处理 -- 进行边缘检测,阈值分析 -- 进行形态学的操作 -- 获取某些特征点 -- 分析数据 那么在这里,我就讲解下边缘检测 ...

  9. 【OpenCV-Python】——边缘和轮廓Laplacian/Sobel/Canny边缘检测查找/绘制轮廓及轮廓特征霍夫直线/圆变换

    目录 前言: 1.边缘检测 1.1 Laplacian边缘检测 1.2 Sobel边缘检测 1.3 Canny边缘检测 2.图像轮廓 2.1 查找轮廓 2.2 绘制轮廓 2.3 轮廓特征 3.霍夫变换 ...

最新文章

  1. 什么是网络层?网络层概述—Vecloud微云
  2. Go image: unknown format 错误解决
  3. 大型网站典型故障案例分析
  4. HttpURLConnection总结
  5. 如何关掉Eclipse里对于Maven下载包的校验值检查
  6. Zookeeper Watch监听
  7. $0,$#,$@,$+特殊符号的含义,shell的传递参数
  8. mysql集群一:主从复制,通过mysql-proxy做负载均衡
  9. JSF 源代码赏析之Lifecycle
  10. java的关键字和保留字_Java关键字和保留字及其含义
  11. python时间格式化
  12. modelsim调用产生随机数及创建虚拟类
  13. VPS部署以及域名设置和DNS解析
  14. 模板--Guass消元法(求解多元一次方程组)
  15. uniapp手机定位或者uniapp结合原生安卓定位
  16. [BJWC2008]雷涛的小猫 dp
  17. Windows命令行打开常用设置/控制面板功能
  18. java中输出第一个a的的位置,java小编程--在一个A字符串中找到与B字符串一样的,返回B字符串出现的第一个位置...
  19. 使用ArcGIS实现数据的随机选取
  20. java 十六进制负数_Java 十六进制转十进制正负数

热门文章

  1. Bash脚本教程之字符串操作
  2. 无法获取签名信息,请上传有效包(110506)
  3. python中的大数据品牌运营专业公司_国内最好的专业数据分析公司有哪些?
  4. 怎么写计算机教学论文,如何写好一篇关于信息技术教育的论文
  5. freeredius3.0 mysql_EDIUS视频采集卡 STROM 3G HD/HD SDI
  6. nginx的ngx_http_realip_module模块和http头X-Forwarded-For、X-Real-IP
  7. 自定义scoll样式
  8. [JLOI2014]松鼠的新家
  9. 【BZOJ3589】动态树
  10. 阻塞/非阻塞/同步/异步方法和多线程的关系?没有任何关系,俩不挨着