sobel算子原理与实现
一、原理: 首先介绍背景知识: 1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。 2)边缘点:图像中具有坐标[x,y],且处在强度显著变化的位置上的点。 3)边缘段:对应于边缘点坐标[x,y]及其方位 ,边缘的方位可能是梯度角。 索贝尔算子(Sobeloperator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。 为了节省时间,我就直接截图了,原理都这样。 套用公式就如下, Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。 如果求整体x和y方向的So被浏览梯度,只需要将Gx和Gy想家即可。 二、C++代码实现 我查过很多资料,都没有发现这个Sobel在C++上到底 是怎么实现的,以为就是没有代码,思索良久,在同学的提示下,终于写出来了,不过可能有不少瑕疵。 #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { Mat m