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

作者: 秦明Qinmin | 来源:发表于2017-02-22 20:24 被阅读801次

    前言

    本文是关于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编程入门》

    相关文章

      网友评论

        本文标题:OpenGL ES入门08-图像边缘检测

        本文链接:https://www.haomeiwen.com/subject/oyimwttx.html