第六章 - 图像变换 - Canny算子边缘检测(cvCanny)
来源:互联网 发布:ssh 默认端口是多少 编辑:程序博客网 时间:2024/05/18 00:06
Canny是常用的边缘检测方法,其特点是试图将独立边的候选像素拼装成轮廓。
(参考:摘自网络)
John Canny于1986年提出Canny算子,它与Marr(LoG)边缘检测方法类似,也属于是先平滑后求导数的方法。
John Canny研究了最优边缘检测方法所需的特性,给出了评价边缘检测性能优劣的三个指标:
1.好的信噪比,即将非边缘点判定为边缘点的概率要低,将边缘点判为非边缘点的概率要低;
2.高的定位性能,即检测出的边缘点要尽可能在实际边缘的中心;
3. 对单一边缘仅有唯一响应,即单个边缘产生多个响应的概率要低,并且虚假响应边缘应该得到最大抑制。
用一句话说,就是希望在提高对景物边缘的敏感性的同时,可以抑制噪声的方法才是好的边缘提取方法。
Canny算子求边缘点具体算法步骤如下:
1. 用高斯滤波器平滑图像.
2. 用一阶偏导有限差分计算梯度幅值和方向.
3. 对梯度幅值进行非极大值抑制 .
4. 用双阈值算法检测和连接边缘
-----------------------------具体参考博客经典图像边缘检测 - Canny以及图象处理中的边缘检测 - canny算子-------------------------------------------------------------------------------------------------------
Canny算子格式如下:
Canny
采用 Canny 算法做边缘检测
void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 );
- image
- 单通道输入图像.
- edges
- 单通道存储边缘的输出图像
- threshold1
- 第一个阈值
- threshold2
- 第二个阈值
- aperture_size
- Sobel 算子内核大小 (见 cvSobel).
函数 cvCanny 采用 CANNY 算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。
- 注意事项:cvCanny只接受单通道图像作为输入。
- 外部链接:经典的canny自调整阈值算法的一个opencv的实现见在OpenCV中自适应确定canny算法的分割门限
/*code*/
注意:cvCanny只接受单通道图像作为输入,因此cvLoadImage的第二给参数表示是否加载有颜色的图像,因设为0,表示单通道图像,故src = cvLoadImage( argv[1], 0 );
否则会出现编译错误,会提示canny.cpp不合法。
#include <highgui.h>#include <cv.h>#include <cxcore.h> //人脸识别的一个库文件//Canny:Implements Canny algorithm for edge detection.int main( int argc, char** argv ){IplImage* src = NULL;IplImage* dst = NULL;//载入图像,转换为灰度图src = cvLoadImage( argv[1], 0 ); //为canny边缘图像申请空间,1表示单通道灰度图dst = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 ); cvCanny( src, dst, 50, 150, 3 );//边缘检测cvNamedWindow( "src", 1 );cvNamedWindow( "canny", 1 );cvShowImage( "src", src );cvShowImage( "canny", dst );cvWaitKey(0);cvReleaseImage( &src );cvReleaseImage( &dst );cvDestroyAllWindows();return 0;}-------------------------------------------------------------------------------------------------------
/*result*/
src
canny
由此看出,canny算法得到的轮廓比较清新。
- 第六章 - 图像变换 - Canny算子边缘检测(cvCanny)
- 第六章 - 图像变换 - Canny算子边缘检测(cvCanny)
- 图像变换 - Canny算子边缘检测(cvCanny)
- 图像变换-用canny算子实现边缘检测
- cvCanny:Canny边缘检测
- canny边缘检测算子
- Canny边缘检测算子
- canny算子边缘检测
- Canny算子边缘检测
- Canny边缘检测算子
- 边缘检测:Canny算子
- 图像基本变换---Canny边缘检测算法
- 图像处理-Canny算子、Sobel算子边缘检测
- 边缘检测——cvCanny算子
- canny 算子检测图像边缘 C++程序问题探究
- Opencv对图像做边缘检测——canny算子
- opencv图像边缘检测Canny算子的总结分析
- Matlab图像边缘检测Roberts\Sobel\Prewitt\Canny算子
- Factory Method工厂方法(创建型模式)
- js指定移除数组里面元素
- Prototype原型(创建型模式)
- 游戏开发中常用的设计模式
- 创建型模式总结
- 第六章 - 图像变换 - Canny算子边缘检测(cvCanny)
- Android的开机流程
- Adapter适配器(结构型模式)
- Android 面试题
- 三根普被,如何利钝兼收?
- Bridge桥接模式(结构型模式)
- 如何用程序确认当前系统的存储模式
- 希尔排序
- Composite组合(结构型模式)