寒哥管理的技术专题OpenGLiOS Development

OpenGL ES入门08-图像边缘检测

2017-02-22  本文已影响801人  秦明Qinmin

前言

本文是关于OpenGL ES的系统性学习过程,记录了自己在学习OpenGL ES时的收获。
这篇文章的目标是学习OpenGL ES 2.0中的像素点的代数运算。
环境是Xcode8.1+OpenGL ES 2.0
目前代码已经放到github上面,OpenGL ES入门08-图像边缘检测

欢迎关注我的 OpenGL ES入门专题

概述

边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。 这些包括:1、深度上的不连续;2、表面方向不连续;3、物质属性变化;4、场景照明变化。 边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。

Canny 算子

Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。Canny算子是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声,Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中,Canny算子还将经过一个非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘。

Canny算子求边缘点具体算法步骤如下

Laplacian 算子

Laplace算子是一种各向同性算子,二阶微分算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适。Laplace算子对孤立象素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。所以,通常的分割算法都是把Laplacian算子和平滑算子结合起来生成一个新的模板。
二维函数f(x,y)的拉普拉斯是一个二阶的微分,定义为:

二阶微分

其中:


二阶的微分

拉普拉斯算子还可以表示成模板的形式:


拉普拉斯算子

拉普拉斯算子扩展模板


扩展模板形式

Sobel 算子

Sobel算子是计算机视觉领域的一种重要处理方法。主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值。在图像的任何一点使用此算子,将会产生该点对应的梯度矢量或是其法矢量。Sobel算子并没有将图像的主题与背景严格地区分开来,也就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。

检测水平边沿横向模板


横向模板

检测垂直平边沿纵向模板


纵向模板

图像梯度的大小


梯度公式

梯度方向


梯度方向公式

对于给定的图像


1351141152_6697.png

近似公式的计算的结果


1351141247_8193.png

参考资料

《OpenCV3编程入门》

上一篇下一篇

猜你喜欢

热点阅读