图像处理--边缘检测算子

算子推导过程
1、知识引入:


在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率,根据导数的定义有:
这里写图片描述

在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数,根据定义有:
这里写图片描述

2、梯度和Roberts算子:

对于图像来说,是一个二维的离散型数集,通过推广二维连续型求函数偏导的方法,来求得图像的偏导数,即在(x,y)处的最大变化率,也就是这里的梯度:


这里写图片描述

梯度是一个矢量,则(x,y)处的梯度表示为:

这里写图片描述

其大小为:

这里写图片描述

因为平方和平方根需要大量的计算开销,所以使用绝对值来近似梯度幅值:
这里写图片描述

方向与α(x,y)正交:

这里写图片描述

其对应的模板为:

这里写图片描述

上面是图像的垂直和水平梯度,但我们有时候也需要对角线方向的梯度,定义如下:
这里写图片描述

对应模板为:

这里写图片描述

     上述模板就是Roberts交叉梯度算子。

2*2大小的模板在概念上很简单,但是他们对于用关于中心点对称的模板来计算边缘方向不是很有用,其最小模板大小为3*3。3*3模板考虑了中心点对段数据的性质,并携带有关于边缘方向的更多信息。

3、Prewitt和Sobel算子:


在3*3模板中:

这里写图片描述

如下定义水平、垂直和两对角线方向的梯度:
这里写图片描述

该定义下的算子称之为Prewitt算子:
这里写图片描述

Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2,相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声。


计算公式为:

这里写图片描述


Sobel算子:这里写图片描述

上述所有算子都是通过求一阶导数来计算梯度的,用于线的检测,在图像处理中,通常用于边缘检测。在图像处理过程中,除了检测线,有时候也需要检测特殊点,这就需要用二阶导数进行检测。

4、Lapacian算子:


一阶导数:

这里写图片描述

二阶导数:

这里写图片描述

我们感兴趣的是关于点x的二阶导数,故将上式中的变量减1后,得到:
这里写图片描述

在图像处理中通过拉普拉斯模板求二阶导数,其定义如下:
这里写图片描述

对应模板为:
这里写图片描述

模板中心位置的数字是-8而不是-4,是因为要使这些系数之和为0,当遇到恒定湖对区域时,模板响应应将0。

在用lapacian算子图像进行卷积运算时,当响应的绝对值超过指定阈值时,那么该点就是被检测出来的孤立点,具体输出如下:
这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#图像梯度 (注意都需要cv.convertScaleAbs将得到的有些负值取绝对值得到正数,并将数据转化到0-255之间,且sobel与Scarr算法中的数据位数都是32位浮点型的) import cv2 as cv import numpy as np def sobel_demo(image): #注意是32位float数据 grad_x = cv.Scharr(image, cv.CV_32F, 1, 0) grad_y = cv.Scharr(image, cv.CV_32F, 0, 1) #当用sobel算子不能很好的得到边缘的时候,就可以用Scharr算子,这是加强版的sobel算子,就可以得到 #原图像不是很明显的边缘了 # grad_x =cv.Sobel(image,cv.CV_32F,1,0) # grad_y =cv.Sobel(image,cv.CV_32F,0,1) gradx =cv.convertScaleAbs(grad_x) grady = cv.convertScaleAbs(grad_y) #cv.imshow("gradx",gradx) #cv.imshow("grady",grady) dst = cv.addWeighted(gradx,0.5,grady,0.5,0) cv.imshow("sobel_demo",dst) def lapalace_demo(image): #dst =cv.Laplacian(image,cv.CV_32F) #dst =cv.convertScaleAbs(dst) 会把dst变成单通道的8位的0-255的图像 #也可以用filter2D来做拉普拉斯算子 kernel = np.array([[0,-1,0],[-1,4,-1],[0,-1,0]]) dst = cv.filter2D(image,cv.CV_32F,kernel) dst = cv.convertScaleAbs(dst) cv.imshow("lapalace",dst) src = cv.imread("E:/opencv/picture/step.jpg") cv.imshow("inital_window",src) #sobel_demo(src) lapalace_demo(src) cv.waitKey(0) cv.destroyAllWindows() 分析: 图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。 一、 Sobel算子是普通一阶差分,是基于寻找梯度强度。拉普拉斯算子(二阶差分)是基于过零点检测。通过计算梯度,设置阀值,得到边缘图像。 def sobel_demo(image): #注意是32位float数据 grad_x = cv.Scharr(image, cv.CV_32F, 1, 0) grad_y = cv.Scharr(image, cv.CV_32F, 0, 1) #当用sobel算子不能很好的得到边缘的时候,就可以用Scharr算子,这是加强版的sobel算子,就可以得到 #原图像不是很明显的边缘了 # grad_x =cv.Sobel(image,cv.CV_32F,1,0) # grad_y =cv.Sobel(image,cv.CV_32F,0,1) gradx = cv.convertScaleAbs(grad_x) grady = cv.convertScaleAbs(grad_y) #cv.imshow("gradx",gradx) #cv.imshow("grady",grady) dst = cv.addWeighted(gradx,0.5,grady,0.5,0) cv.imshow("sobel_demo",dst) 1.Sobel算子用来计算图像灰度函数的近似梯度。Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。 2.Sobel具有平滑和微分的功效。即:Sobel算子先将图像横向或纵向平滑,然后再纵向或横向差分,得到的结果是平滑后的差分结果。 Ope
要下载和安装HM NIS Edit,您需要先准备以下工具和资源: 1. NIS Edit Nullsoft Installation System (NSIS):这是HM NIS Edit所依赖的安装工具。您可以从官方网站或其他可信的软件下载网站获取NSIS的安装程序。 一旦您已经获得了NSIS的安装程序,您可以按照以下步骤下载和安装HM NIS Edit: 1. 打开您的网络浏览器并访问HM NIS Edit的官方网站或其他可靠的软件下载网站。 2. 在网站的搜索栏中输入“HM NIS Edit”。 3. 找到适用于您操作系统的HM NIS Edit下载链接,并单击下载按钮。 4. 下载完成后,找到下载的安装程序文件并双击运行它。 5. 按照安装向导的指示,选择您想要安装HM NIS Edit的目标文件夹和其他设置。 6. 点击“下一步”或“继续”按钮,直到安装完成。 7. 在安装完成后,您可以在系统的开始菜单或桌面上找到HM NIS Edit的快捷方式,双击它即可打开程序。 请注意,具体的安装步骤可能因您的操作系统和下载源的不同而有所差异。确保从官方网站或其他可信的软件下载网站获取安全可靠的HM NIS Edit安装程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用HM NIS Edit 创建一个简单的脚本打包程序](https://blog.csdn.net/flysh05/article/details/124616168)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [nisedit203-src.zip](https://download.csdn.net/download/wm9028/11838677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [QT 的打包成一个安装程序 , 其中的问题,和HM Nis Edit 打包成安装程序的时候 没有语言的问题。](https://blog.csdn.net/she666666/article/details/127038569)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值