|
请教各位高手:
最近由于论文的需要开始学习图像工程,在测试OpenCV的边缘检测函数。有以下几点收获与大家分享,还有一些困惑的地方请大家指点。(我这几天都是用棋盘格图作为例图)
1 边缘检测离不开求方向导数,OpenCV是通过一些过滤器对象来实现的,包括有cvBaseImageFilter对象,这是一个基类,在此基础上实现了cvSepFilter(可分离滤波),cvLinearFiler(线性滤波),cvBoxFilter和cvLaplaceFilter这几个过滤器,其中cvFilter2D用的是cvLinearFiler对象实现,cvSobel是用cvSepFilter对象实现的,CornerEigenValsVecs特征值和特征向量函数是通过cvSepFilter对象与CvBoxFilter对象共同实现的,请问这几种滤波器对象之间有什么差异吗?
2 Sobel边缘检测函数就是一个卷积函数,也是一个求导数(带方向),使用一个模版对目标图像进行Sobel算子的卷积运算(通过CvSepFilter对象进行),可以进行X方向1、2阶,Y方向1、2阶,XY方向混合1、2阶,对例图进行检测的时候发现,进行1阶计算的时候发现,只要左边是白色,右边是黑色的边缘都丢失了,我分析的结果是,Sobel的结果存在一个深度为IPL_DEPTH_8U的图中,Sobel的X方向算子为
|-1 0 1|
|-2 0 2|
|-1 0 1|
对于左边是白色,右边是黑色的边缘,白色为255*-1+黑色0*1,结果是一个负数,对于深度为IPL_DEPTH_8U的图,负数就是黑色,因此显示结果的时候就看不见了!
进行二阶计算的时候就没有丢失边缘的问题,因为负负得正了。
想请问大家我的分析对吗?
请问大家平时对于Sobel、Laplace的边缘检测很少用?Canny和Harris用得比较多?我认为OpenCV中只把Sobel边缘检测当作一个求导数、梯度的计算工具。
3 cvSobel(source,destination,2,2,3)这个函数求出来的是xy方向的混合2阶导数还是梯度? |
|