OpenCV-25sobel算子(索贝尔算子)

前面所提到的滤波都是用于降噪的,去掉噪声,而算子是用来找边界,来识别图像的边缘。

一、概念

边缘是像素值发生跃迁的值,是图像的显著特点之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用。

人眼如何识别图像的边缘呢?

比如有一幅画,图里面有一条线,左边很亮,右边很暗,那人眼就很容易识别这条线作为边缘,也就是像素的灰度值快速变化的地方。

sobel算子对图像求一阶导数一阶导数越大,说明像素在该方面的变化越大,边缘信号越强。

因为图像的灰度值都是离散的数字,sobel算子采样离散差分算子计算图像像素点亮度值的近似梯度

差分算子是一种算子,对任一实函数f(x),若记Δf(x)=f(x+1)-f(x),则称Δ为向前差分算子,简称差分算子。

图像时二维的,即沿着宽度/高度两个方向。

我们使用卷积核对图像进行处理:

水平方向:

中间一列相当于f(x),第3列相当于f(x+1),第1列相当于f(x-1);相当于第3列的像素点减去第1列的像素点最后得到的就是水平方向上的近似梯度。

垂直方向:

中间一行相当于f(x),第3行相当于f(x+1),第1行相当于f(x-1); 相当于第3行的像素点减去第1行的像素点最后得到的就是垂直方向上的近似梯度。

综合考虑这两个方向上的变化,我们可以使用以下公式反应某个像素的梯度变化情况:

G = \sqrt{G_{x}^{2}+G_{y}^{2}}

有时候为了简单起见,也可以用绝对值相加替代:G = \left | GX \right | + \left | GY \right |

二.示例代码如下所示

import cv2
import numpy as np

img = cv2.imread("chess.png")

# 计算x轴方向的梯度,只有垂直方向的边缘
dx = cv2.Sobel(img, cv2.CV_64F, dx=1, dy=0, ksize=3)
# 计算y轴方向的梯度,只有水平方向的边缘
dy = cv2.Sobel(img, cv2.CV_64F, dx=0, dy=1, ksize=3)

new_img = cv2.add(dx, dy)
cv2.imshow("img1", img)
cv2.imshow("img2", dx)
cv2.imshow("img3", dy)
cv2.imshow("new_img", new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意点:

sobel算子必须分开计算x轴和y轴,不然的话效果很差。


http://www.niftyadmin.cn/n/5330992.html

相关文章

高级 Python 面试问题与解答

文章目录 专栏导读1.什么是PIP?2.什么是 zip 函数?3.Python 中的 __init __ () 是什么?4.Python 中的访问说明符是什么?5.Python 中的单元测试是什么?6.Python全局解释器锁(GIL)?7.P…

Mybatis基础---------增删查改

目录结构 增删改 1、新建工具类用来获取会话对象 import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.io.Resources;import java.io…

Python数据结构——元组

目录 一、元组和列表的区别 二、创建元组 (一)使用圆括号()创建 (二)使用tuple函数创建 三、元组常用函数和方法 (一)元组元素提取 (二)元组解包 (三&#xff09…

全自动网页制作系统流星全自动网页生成系统重构版输入网页信息即可制作

源码优点: 所有模板经过精心审核与修改,完美兼容小屏手机大屏手机,以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 免费制作 为用户使用方便考虑,全自动网页制作系统无需繁琐的注册与登入,直接…

uniapp 移动端app判断用户app版本是否是最新版(Android)

1.在uniapp项目中的App.vue文件下 <script>import { ref } from vue;const token ref();export default {onLaunch: function() {// #ifdef APP//获取打包时设置的版本号&#xff0c;然后存到storage里plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) > {u…

meter报OOM错误,如何解决?

根据在之前的压测过程碰到的问题&#xff0c;今天稍微总结总结&#xff0c;以后方便自己查找。 一、单台Mac进行压测时候&#xff0c;压测客户端Jmeter启动超过2000个线程&#xff0c;Jmeter报OOM错误&#xff0c;如何解决&#xff1f; 解答&#xff1a;单台Mac配置内存为8G&…

STM32快速复制MX25L1606E系列Flash

去年做了一个使用RS485对PIC18F45K80系列单片机进行在线升级的程序&#xff0c;如果是小批量的出厂烧录程序和升级验证&#xff08;出厂前肯定要测试单片机是否能正常读写Flash&#xff09;是可以的&#xff0c;但是后来产品订单量很大&#xff0c;生产线的烧录及升级验证就很缓…

8路DI高速计数器,8路DO支持PWM输出,Modbus TCP模块 YL93 开关量输入输出

特点&#xff1a; ● 8路开关量输入&#xff0c;8路开关量输出 ● DI每一路都可用作计数器或者频率测量 ● DO每一路都可独立输出PWM信号 ● DI和DO都支持PNP&#xff0c;NPN切换功能 ● 支持Modbus TCP 通讯协议 ● 内置网页功能&#xff0c;可以通过网页查询电平状…