边缘提取--原理小结(持续更新)

一直以来,在处理边缘检测问题的时候,都是把卷积核拿过来,与原图像做一个卷积操作,求取各个位置的梯度值,然后设置一个阈值,就得到了图像的边缘。

算法实现起来倒是很简单,但却一直对背后的数学模型不甚理解。最近查阅资料,有一点点感悟,不一定准确,如有错误求指正,谢谢。

梯度,是一个向量,既有大小,也有方向。表示的是某一个函数在该点处的方向导数沿着该方向(梯度方向)取得最大值(梯度的模),即在梯度方向上变化最快,变化率最大。

而对于图像来说,边缘就是图像灰度发生急剧变化的区域边界,因为对应到数学模型上,就是找变化率较大的点,即梯度的模。若模大于阈值,则为边界,否则为轮廓。

总结:边缘检测在数学上的含义:基于梯度的滤波器。

附上:一阶,二阶导数含义的链接

https://blog.csdn.net/chehec2010/article/details/79874815

https://www.baidu.com/link?url=T7SoV_pt3mitTnectOaucymdefKw0X6GO0kx_yDE480ljgdZRqcpjiXVslPm3xHx2Wv3Zg3wYR5TLGSqahdmCIEJr-DOzwhQepMUAQ84vka&wd=&eqid=a50de77a000007a0000000045e4828ee

https://blog.csdn.net/Touch_Dream/article/details/62447801

我理解的就是,一阶算子如Robert算子,Gx=[-1,0; 0,1]. Gy=[0,-1;  1,0], 检测的是45度方向上的边缘,平别代表二维函数f(x,y)在x和y上的偏导数,计算出该梯度模= sqrt( x*x+y*y)  得到梯度影像后,再与阈值比较大小得出边缘点。

备注:图像f(x,y),在其坐标(x,y)上的梯度是通过一个二维向量来表示的,即▼f=[Gx; Gy]; 所以分别求出(x,y)位置处x方向的偏导数和在y方向上的偏导数,按照求矢量和的方法算出的斜边的长度就是梯度值,方向就是梯度方向。这样就是把图像中频域(高频:细节,噪声,低能量;低频:图像轮廓,细节以内,高能量)乘积转到了 空域的卷积。降低了计算复杂度。

看到有总结说:一阶导数通常图像中产生较粗的边缘,而二阶导数对精细细节,如细线,孤立点和噪声有较强的相应。

下面是我强行做的解释,不知道对不对。

像robert算子就是一阶导,  laplacian算子就是二阶导, 单从算子上来看,区别就是一阶导计算的是卷积核中心点两侧的灰度差,求出x,y方向的偏导数,然后算梯度。因为图像边缘灰度是逐渐变化的,所以一阶导对边缘敏感度较低,算出的边缘较粗,而二阶导计算时考虑了卷积核中心点的灰度值,增强了中心点像素与周围像素的对比度,灰度值大的更大,小的更小,所以对一些精细边缘,孤立点就响应更强烈,而一阶导因为计算的时候不考虑中心点的灰度值,因此会漏掉一些细节,孤立点等。

最后就是看谁的算子选的巧妙了。

你可能感兴趣的:(C++,MFC)