在 Android智能识别 - 银行卡区域裁剪 一文中我们用了如下几行代码,获取发现银行卡的轮廓:

    // 梯度增强 , x 轴和 y 轴    Mat grad_x, grad_y;    Scharr(blur, grad_x, CV_32F, 1, 0);    Scharr(blur, grad_y, CV_32F, 0, 1);    Mat grad_abs_x, grad_abs_y;    convertScaleAbs(grad_x, grad_abs_x);    convertScaleAbs(grad_y, grad_abs_y);    Mat grad;    addWeighted(grad_abs_x, 0.5, grad_abs_y, 0.5, 0, grad);

轮廓发现是图像图形处理中最常见的一个操作,Opencv 到底提供了哪些边缘检测的方法?其内部的实现原理是怎样的?为啥我在上面要用 Scharr ?下面我们就来做一个彻底的刨析。

Opencv 为我们提供了常用的四个方法 Sobel() Scharr() Laplacian() Canny() 用来处理边缘检测,当然还可以自定义卷积操作来实现,但这里我们先不做考虑。

1. Sobel 算子

X和Y方向
对X\Y两个方向的梯度进行合并

Sobel算子如果光从核上面去看,根本什么都不知道,我们得去看他的原理。

他的原理就是利用导数求解边缘,我们知道像素差别大的时候那么它的切点越陡峭,那么这个时候就找到了边缘!Sobel 算子检测方法对灰度渐变和噪声较多的图像处理效果较好,但 Sobel 算子对边缘定位不是很准确,图像的边缘不止一个像素。

2. Scharr 算子

这个滤波是Sobel的升级版,原理是一样的,就是实现的近似代替不一样,说白了就事核改进了。


3. Laplacian 算子

拉普拉斯算子

拉普拉斯边缘检测是通过二阶倒数,从上面的一阶倒数的理解就不难发现二阶倒数是怎么进行的了。二阶倒数比一阶倒数的好处是在与受到周围的干扰小,其不具有方向性,操作容易,且对于很多方向的图像处理好。Laplacian 算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。

4. Canny 算子

这是比较新的算法,运用的也是最广泛的。Canny的步骤是:

1.给一张图片,先进行滤波消除干扰,滤波之前已经说明。
2.计算梯度(进行 Sobel/Scharr 算子)
3.非极大值抑制。
4.滞后阈值。

非极大值抑制: 从字面上的理解就是从一群数据中找到真正的极大值,对于不是极大值的省略或者抑制显示。我们来想一下,Sobel算子计算的值就是边缘的值吗?算子是固定的,那就有很大的几率会计算到不是边缘的数据。计算的结果不会省略不好的点,也不会去加强好的点,所以显示就不明显。我们的目的就是改进上面两个点,对于第一个点,我们得比较那些计算的点进行比较,把不好点舍去。高等数学中有 “梯度” 的这个概念,就是数据下降或者上升最快的方向,简单的说就是求导切线的方向!

void Canny(InputArray image, // 输入           OutputArray edges,// 输出           double threshold1, // 低阈值           double threshold2, // 高阈值           int apertureSize = 3, // 卷积核大小           bool L2gradient = false );// 采用何种方式做梯度合并

视频地址:https://pan.baidu.com/s/1BHGR6hcunmgS5m_NGK_x2Q
视频密码:dtvq

更多相关文章

  1. Android(安卓)UI 基本布局 weight 在 LinearLayout 中
  2. Android(安卓)众多的布局属性详解
  3. Android(安卓)View坐标系
  4. Android常用布局样式介绍
  5. android相对布局的几组属性
  6. opencv在android预览上实现灰化/感应触屏/边缘检测(3)
  7. RelativeLayout常用属性介绍及实例讲解
  8. 浅析Android(安卓)App的相对布局RelativeLayout
  9. Android基础_页面布局_RelativeLayout(相对布局)

随机推荐

  1. 关于 android 的缩略图 Thumbnail
  2. Symbian/Android/iOS/WM应用程序开发感受
  3. 《Google!Android2手机应用程序设计入门》
  4. android modbus协议之(三)modbus-TCP/IP
  5. GTS李万鹏:Android游戏开发者的亲身感受
  6. Unity与EasyAR
  7. Android(安卓)开发自己的网络收音机4——
  8. Android基站信息获取以及Sim卡相关信息获
  9. Android在开发中的实用技巧之ExpandableL
  10. Android(安卓)多用户