IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> EMGU.CV入门(十二、Canny边缘检测) -> 正文阅读

[人工智能]EMGU.CV入门(十二、Canny边缘检测)

一、Canny边缘检测

Canny边缘检测是一种非常流行的边缘检测算法,是John Canny在1986年提出的。它是一个多阶段的算法,有以下四个步骤组成。

1.1 图像降噪

噪声对图像影响很大,所以首先需要进行滤波,去掉噪声的干扰
这一步使用的是高斯滤波(前文中有提到),而高斯滤波主要使图像变得平滑(模糊),同时也有可能增大了边缘的宽度。

1.2 计算图像梯度

计算图像梯度能够得到图像的边缘,因为梯度是灰度变化明显的地方,而边缘也是灰度变化明显的地方。
这一步通常使用的是sobel算子,在前文有提到过,这一步是为了得到所有可能是边缘的地方,接下来的两步主要是过滤掉其中不是边缘的。

1.3 非极大值抑制

在高斯滤波过程中,边缘有可能被放大了。这个步骤使用一个规则来过滤不是边缘的点,使边缘的宽度尽可能为1个像素点:如果一个像素点属于边缘,那么这个像素点在梯度方向上的梯度值是最大的。否则不是边缘,将灰度值设为0。
即 将局部范围内的梯度方向上,灰度变化最大的保留下来。

1.4 阈值筛选

  1. maxVal以上保留
  2. maxVal和minVal之间,且连接到A区域的保留
  3. minVal以下剔除

所以这张图可以看出,AC为边缘,B剔除。
在这里插入图片描述

二、代码与效果

2.1 代码

EMGU中将2-4步合为一个算法 ,Cvinvork.Canny

// 1. 加载原图
var image1 = new Image<Bgr, byte>("bird1.png");
var image0 = image1.Mat.Clone();
PreviewImage1 = new WriteableBitmap(Bitmap2BitmapImage(Text(image1.Bitmap, "原图")));

// 2. 转为灰度(当然也可以直接读取为灰度)
Mat image2 = new Mat();
CvInvoke.CvtColor(image0.Clone(), image2, ColorConversion.Bgr2Gray);
PreviewImage2 = new WriteableBitmap(Bitmap2BitmapImage(Text(image2.Bitmap, "灰度")));

// 3. 不降噪的Canny
Mat image5 = new Mat();
CvInvoke.Canny(image2.Clone(), image5, 50, 150);
PreviewImage3 = new WriteableBitmap(Bitmap2BitmapImage(Text2(image5.Bitmap, "不降噪Canny 50,150")));

// 4. 图片降噪
Mat image3 = new Mat();
CvInvoke.GaussianBlur(image2.Clone(), image3, new Size(5, 5), 4);
PreviewImage4 = new WriteableBitmap(Bitmap2BitmapImage(Text(image3.Bitmap, "高斯滤波")));

// 5. Canny
Mat image4 = new Mat();
CvInvoke.Canny(image3.Clone(),image4,50,150);
PreviewImage5 = new WriteableBitmap(Bitmap2BitmapImage(Text2(image4.Bitmap, "Canny 50,150")));

// 6. Canny
Mat image6 = new Mat();
CvInvoke.Canny(image3.Clone(), image6, 80, 100);
PreviewImage6 = new WriteableBitmap(Bitmap2BitmapImage(Text2(image6.Bitmap, "Canny 80,100")));

// 7. Canny
Mat image7 = new Mat();
CvInvoke.Canny(image3.Clone(), image7, 80, 150);
PreviewImage7 = new WriteableBitmap(Bitmap2BitmapImage(Text2(image7.Bitmap, "Canny 80,150")));

// 8. Canny
Mat image8 = new Mat();
CvInvoke.Canny(image3.Clone(), image8, 100, 150);
PreviewImage8 = new WriteableBitmap(Bitmap2BitmapImage(Text2(image8.Bitmap, "Canny 100,150")));

// 9. Canny
Mat image9 = new Mat();
CvInvoke.Canny(image3.Clone(), image9, 50, 80);
PreviewImage9 = new WriteableBitmap(Bitmap2BitmapImage(Text2(image9.Bitmap, "Canny 50,80")));

2.2 效果

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:27:05  更:2021-12-04 13:28:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/20 3:26:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码