18-Sobel算子

Sobel原理及计算过程详解 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的。接下来,我们将使用Sobel算子计算这个点的梯度值。 阅读详情

Sobel算子

1、卷积应用-图像边缘提取;
2、相关API;
3、代码演示;
4、掌握使用Sobel算子计算图像梯度,提取图像轮廓边缘;

卷积应用-图像边缘提取

1、边缘:像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取,对象检测,模式识别等方面有重要的作用;
2、捕捉提取边缘方法:对图像求取一阶导数,图像上前一个像素点像素值与后一个像素值的差值即为一阶导数:delta = f(x) - f(x-1); delta越大,说明像素在x方向变化越大,边缘信号越强;
3、通过Sobel算子,卷积操作即可求取灰度图像的在X方向和Y方向的梯度图像;
4、Sobel算子是离散微分算子,用来计算图像灰度的近似梯度,Sobel算子功能集合高斯平滑,微分求导,又被称为一阶微分算子,求导算子,在水平和垂直两个方向上求导,得到图像X方向和Y方向的梯度图像; Laplace算子为二阶微分算子;
在这里插入图片描述
在这里插入图片描述

Sobel算子

1、Sobel算子值:分为水平梯度Sobel算子,垂直梯度Sobel算子两个;合成后(近似合成可以直接用加法直接将水平梯度和垂直梯度相加,速度更快,减少计算量,如下图)得到最终图像梯度;
在这里插入图片描述
2、Sobel算子在kernel(卷积核)= 3时求导不是很准确,OpenCV使用改进的Sobel算子,算子值如下:(算子值变大了)
在这里插入图片描述

相关API

1、Sobel();
参数如下:
注意:输出图像一般比灰度图像大,输出图像深度depth通常取值CV_16S或CV_32F,dx,dy取1,代表一阶导数,ksize取3(常见的Sobel算子为3阶),scale表示放大倍数,一般取1,delta常量值一般取0,borderType表示边缘处理方式;

在这里插入图片描述
注:Output depth栏下:-1表示Input depth栏对应的位图深度值;

convertScaleAbs():
在这里插入图片描述

2、Scharr();参数基本同上;
在这里插入图片描述

使用注意

  1. Sobel算子对噪声比较敏感,容易受到噪声影响,使用时应先进行高斯模糊降噪;
  2. 使用步骤:
    ①高斯平滑处理;
    ②转灰度图像;
    ③求X和Y方向;
    ④对求得的结果取绝对值处理(梯度有较大的负值,这些值也是边缘信息,需要保留)(convertScaleAbs()函数);
    ⑤使用addWeighted()函数进行混合,得到综合图像,称为振幅图像;或者直接操作X梯度图像像素点与Y梯度图像像素点相加;
  3. 正确处理Sobel算子运算得到的数据(取正)才能保证图像的正确显示;
  4. Scharr()函数相比于Sobel()函数对干扰噪声有更好的抵抗效果;

Code

#include <opencv2/opencv.hpp>
#include <iostream>


using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	Mat src, dst;
	src = imread("C:\\Users\\hello\\Desktop\\17.jpg");
	if (!src.data)
	{
		cout << "could not load the image" << endl;
		return -1;
	}
	char INPUT_WIN[] = "input image";
	char OUTPUT_WIN[] = "Sobel image";
	namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
	//namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);
	imshow(INPUT_WIN, src);

	//Sobel算子运算
	Mat g1,gray_src,sx,sy;
	GaussianBlur(src, g1, Size(3, 3), 0, 0); //一般给 3 * 3 小模糊
	cvtColor(g1, gray_src, CV_BGR2GRAY);
	imshow("gray image", gray_src);
	//Sobel算子不需要自己再定义了
	//Mat kernel_x = (Mat_<int>(3, 3) << -1, 0, 1, -2, 0, 2, -1, 0, 1);  //水平方向Sobel算子
	//Mat kernel_y = (Mat_<int>(3, 3) << -1, -2, -1, 0, 0, 0, 1, 2, 1);  //垂直方向Sobel算子

	Sobel(gray_src, sx, CV_32F, 1, 0, 3);  //x方向梯度为1,y方向梯度为0   
	Sobel(gray_src, sy, CV_32F, 0, 1, 3);  //x方向梯度为0,y方向梯度为1
	//Sobel算子运算后梯度结果并不一定是正数,可能是负数(负梯度);需要调用函数转换为正数,保证信息不遗漏
	//负的绝对值也保留了边缘信息,为了不遗漏边缘信息,这个函数必须有!
	convertScaleAbs(sx, sx);  
	convertScaleAbs(sy, sy);

	imshow("x gray", sx);
	imshow("y gray", sy);

	//方法1:按权重合成
	//Mat fin;
	//addWeighted(sx, 0.5, sy, 0.5, 0, fin);  //使用简化的混合方法,没有开平方
	//imshow("x y 混合结果", fin);   

	//方法2:直接像素操作相加,相比于addWeight()效果更好
	Mat xygrad = Mat(sx.size(), sx.type());
	int width = xygrad.cols;
	int height = xygrad.rows;
	printf("type: %d\n", sx.type());
	for (int row = 0; row < height; row++)
	{
		for (int col = 0; col < width; col++)
		{
			int xg = sx.at<uchar>(row, col);
			int yg = sy.at<uchar>(row, col);
			int xy = xg + yg;
			xygrad.at<uchar>(row, col) = saturate_cast<uchar>(xy);  //有被截断
			
		}
	}
	imshow("Sobel Image", xygrad);


	//Scharr() API使用
	Mat xsch, ysch;
	Scharr(gray_src, xsch, CV_16S, 1, 0);  //X方向Sobel运算
	Scharr(gray_src, ysch, CV_16S, 0, 1);  //Y方向Sobel运算
	convertScaleAbs(xsch, xsch);
	convertScaleAbs(ysch, ysch);
	
	Mat xysch = Mat(xsch.size(), xsch.type());
	int schwidth = xysch.cols;
	int schheight = xysch.rows;

	for (int row = 0; row < schheight; row++)
	{
		for (int col = 0; col < schwidth; col++)
		{
			int x = xsch.at<uchar>(row, col);
			int y = ysch.at<uchar>(row, col);
			int xys = x + y;
			xysch.at<uchar>(row, col) = saturate_cast<uchar>(xys);
		}
	}
	imshow("scharr image", xysch);
	waitKey(0);
	return 0;
}

效果

SCharr()运算的效果比Sobel更好一点:(纹理更明显)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

图像梯度-sobel算子 (1)理论部分 x 水平方向的梯度, 其实也就是右边 - 左边,有的权重为1,有的为2 。 若是计算出来的值很大 说明是一个边界 。 y 竖直方向的梯度,其实也就是下面减上面,权重1,或2 。 若是计算出来的值很大 说明是一个边界 。 图像的梯度为: 有时简化为: 即: (2)程序部分 函数:Sobel ddepth 通常取 -1,但是会导致结果溢出,检测不出边缘,故使... 阅读详情

相关推荐

【CV】Sobel算子简介

Sobel算子

LJF159的博客 5339

Sobel算子

幻灯片1 Sobel算子  幻灯片2 一、Sobel边缘检测算子 l 在讨论边缘算子之前,首先给出一些术语的定义: l (1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。 l (2)边缘点:图像中具有坐标[x,y],且处在强度显著变化的位置上的点。 l (3)边缘段:对应于边缘点坐标[x,y]及其方位 ,边缘的方位可能是梯度角。

GoodShot的专栏 7万+

18 - Sobel算子 测试

18 - Sobel 算子测试 代码和理解注释: #include<opencv2/opencv.hpp>; using namespace cv; int main(int argc,char* argv) { // 18 - Sobel算子 Mat source1,change1; source1 = imread("F:\\OpenCV-Test\\TestPicture...

lyjaoruiqiyuan的博客 353

sobel 算子

索伯算子(sobel operator)常用于边缘检测,在粗精度下,是最常用的边缘检测算子,以广泛应用几十年。sobel算子由两个3X3的卷积核构成,分别用于计算中心像素邻域的灰度加权差。分为垂直方向和水平方向的索伯滤波器Gx and Gy。 sobel 算子的用途主要为: 边缘检测时: Gx用于检测纵向边缘, Gy用于检测横向边缘. 计算法线时: Gx用于计算法线的横向偏移, Gy用于计算法线的纵向偏移. sobel算子应用时进行给定图像的卷积操作,卷积为计算图像大矩阵周围像素和滤波.

qq_55025358的博客 3万+

图像边缘提取——梯度算子、Roberts算子、prewitt算子、Sobel算子、Kirsch算子、LOG算子的matlab实现

图像边缘提取——梯度算子、Roberts算子、prewitt算子、Sobel算子、Kirsch算子、LOG算子的matlab实现

RangiLyu的博客 2万+

人工智能进程;算子加速的具体计算部分;大模型GPT5:参数18万亿;大模型面临问题

在Sobel算子的实现中,需要对图像中的每个像素点进行卷积运算,以计算其梯度值。这个卷积运算涉及大量的乘法和加法操作,是计算密集型任务之一。算子加速主要关注深度学习模型或图像处理算法中的计算密集型部分。算子加速是深度学习领域中的一个重要概念,它涉及到对深度学习模型中算子(即。算子加速不仅针对GPU,还可以针对其他类型的硬件加速器进行优化。,以提高模型的执行效率和性能。交互损耗多:模型规模增大,CPU、内存和NPU间交互损耗多。网络吞吐低:组网层数增加,网络拥塞加剧,网络吞吐下降。

ZhangJiqun&191cm&85kg 612

18.Sobel算子

1.主要内容 (1)卷积应用-图像边缘提取 (2)sobel经典算法与opencv提供的sobel算法 (3)当一些API不能满足自己的需求时,如何去自己完成一些计算 2.卷积应用——图像边缘提取 (1) 边缘是什么-是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用 (2)如何捕捉/提取边缘-对图像求它的一阶导数 delta = f(x)- f(...

罗伊的博客 1571

信道估计准则演进:从LS、MMSE到LMMSE的工程权衡

本文深入探讨了信道估计准则的演进历程,从LS、MMSE到LMMSE的工程权衡。通过对比分析三大经典算法的数学本质、工程实现及适用场景,揭示了在计算复杂度、实时性和性能之间的关键取舍。文章结合4G/5G基站项目实战经验,提供了算法选型的三维决策模型和前沿发展建议,为无线通信系统设计提供实用指导。

weixin_29327525的博客 280

(18)sobel算子

/* *Sobel算子 *卷积的应用-图像边缘提取 边缘是什么 -是像素值发生跃迁的地方,是图形显著特征之一,在图像特征提取、对象检测、模式识别等 方面都要重要的作用 如何捕捉/提取边缘 -对图像求它的一阶导数 delta = f(x) - f(x-1), delta越大,说明像素在x方向...

nuc_Sheryl的博客 1122

ASPP - 空洞空间金字塔池化

文章目录1 空洞卷积1.1 空洞卷积的理解1.1.1 一维1.1.2 二维1.2 空洞卷积的优劣2. ASPP3. 代码 1 空洞卷积 1.1 空洞卷积的理解 1.1.1 一维 (a) 正常卷积:输入特征 Input feature,kernel = 3,stride = 1,pad = 1,输出特征 Output feature。 (b) 空洞卷积:与图 (a) 不同之处在于 pad = 2,同时引入一个 rate = 2(表示卷积核中参数间间隔的超参)。   还可通过下图进一步理解普通卷积与空洞卷

晓野豬 2万+

电源完整性之Cadence Sigrity Power DC_电热协同仿真

之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的是Cadence Sigrity 中的Power DC组件,来操作一下电热协同仿真,下面开始享受仿真的快乐吧: 第0步:仿真简介 电热协同仿真把电和热相互的影响考虑到了一起。因为电导率并不是固定不变的,而是和温度有关,随着温度的升高导电率会下降。同样电流流径电阻的时候会产生热量,此热量为焦耳热。因此为了获得准确的仿真信息,应考虑电与热的互相影响,进行电

刘小同学的博客 1万+

OpenCV18Sobel算子卷积应用-图像边缘提取

/*cv18Sobel算子卷积应用-图像边缘提取 prepared by txwtech Sobel算子 卷积应用-图像边缘提取 边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、 对象检测、模式识别等方面都有重要的作用。 如何捕捉/提取边缘 – 对图像求它的一阶导数 delta = f(x) – f(x-1), delta越大,说明像素在X方向变化越大,边缘信号越强, Sobel算子,卷积操作 是离散微分算子(discrete differentiation oper.

Txwtech 685

西门子S7-200 SMART PLC控制伺服电机

以下是使用西门子S7-200 SMART PLC控制伺服电机的详细程序框架和配置说明,涵盖硬件接线、PLC配置和基本运动控制逻辑。具体实现需根据伺服电机型号(如松下、三菱、台达等)调整参数。通过以上步骤,可实现伺服电机的基础位置控制。实际应用需根据设备机械参数和伺服驱动器手册调整细节。建议在调试时逐步测试脉冲输出和方向信号是否正常。

CHUXUEZHE8210的博客 6424

OpenCV基础课程笔记18Sobel算子详解

写在前面 边缘:像素值发生跃迁的地方。可通过一阶导数求得 delta=f(x)-f(x-1) delta越大,说明像素在x方向变化越大,边缘信号越强 Sobel算子,称为一阶微分算子或者求导算子 (拉普拉斯为二阶) 水平梯度Gx,垂直梯度Gy 最终梯度: G=abs(Gx)+abs(Gy); G=pow(GxGx+GyGy,0.5); 代码 #include<iostream> #include<opencv2/opencv.hpp> #include<cmath> u

爱和九九的博客 527

1553B通信项目开发笔记(一)协议概述

最近接了个项目,需要用1553B协议通信,仅作为RT端口进行通信,控制器采用ARM 使用芯片为国产的BU61580芯片,功能和引脚和DDC的61580完全一致。

u010396127的博客 2万+

金蝶云星空核心数据表解析与高效关联查询指南

本文深入解析金蝶云星空核心数据表结构,提供高效关联查询的实战指南。文章详细介绍了基础资料、业务单据和财务模块的关键表及其关联逻辑,重点阐述了如何利用关联表(_LK表)进行跨单据溯源,并分享了编写高性能SQL的实用技巧与避坑建议,帮助开发者、实施顾问和数据分析师快速掌握数据查询方法,提升工作效率。

weixin_29254673的博客 524

学习c++版opencv3.4之18-sobel算子

sobel算子得到的是图像在x方向和y方向的梯度图像。拉普拉斯算子得到二阶梯度。 #include &lt;opencv2/opencv.hpp&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; using namespace cv; int threshold_value = ...

u010397980的博客 1147

24、水下传感器网络中混合LEACH协议与遗传算法获取路由节点

本文提出了一种结合遗传算法与LEACH协议的混合路由方案,用于提升水下无线传感器网络(UWSN)的能量利用效率和数据传输稳定性。通过遗传算法优化簇头选择与路径规划,有效避免节点过早死亡,减少能量消耗,在200个节点场景下显著提升网络寿命。相比传统LEACH协议,该方案具有更高的能量利用率、更强的环境适应性,并支持传输历史记录与并行传输序列。实验结果显示,该方案在总能量为2000焦耳时剩余能量达75.6%,远优于LEACH的34.8%能耗表现。适用于海洋监测、石油平台监控及水下灾害预警等复杂环境应用。

i8j9k0l1的博客 112

计算机视觉面试考点(18)边缘检测算子(Roberts、Prewitt、Sobel、Laplacian、LoG、Canny)

计算机视觉工程师在面试过程中主要考察三个内容:图像处理、机器学习、深度学习。然而,各类资料纷繁复杂,或是简单的知识点罗列,或是有着详细数学推导令人望而生畏的大部头。为了督促自己学习,也为了方便后人,决心将常考必会的知识点以通俗易懂的方式设立专栏进行讲解,努力做到长期更新。此专栏不求甚解,只追求应付一般面试。希望该专栏羽翼渐丰之日,可以为大家免去寻找资料的劳累。每篇介绍一个知识点,没有先后顺序。想了解什么知识点可以私信或者评论,如果重要而且恰巧我也能学会,会尽快更新。最后,每一个知识点我会参考很多资料。考虑到

嘻嘻哈哈yjy的博客 4047

ASPICE(Automotive SPICE)流程落地,研发管理工具自研,如何从量化数据体现研发效率提升的

摘要: ASPICE流程显著提升研发效率,主要体现在质量、成本和时间三个维度。关键量化指标包括:缺陷率降低30%-60%,维护工作量减少28%,研发周期缩短10%-20%,需求变更率降低58%,代码评审效率提升300%。初期开发成本虽增加9%,但长期回报率高。核心方法包括缺陷预防前移、需求精准管理和流程标准化与自动化。建立量化度量体系需覆盖缺陷密度、需求稳定性、进度偏差等指标,并依托工具链支持数据收集。实施ASPICE是短期投入换取长期质量提升和成本优化的高效投资。

汽车软件开发 182

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[CV] OpenCV图像处理教程- 18: Sobel 算子19:Laplace算子 20:canny边缘检测

...

weixin_30765475的博客 136

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

AI算法例程=maixpy3

MIIdock图像处理、图像分类、目标检测例程

栋哥修炼日记 775

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

matlab 图像主方向,得到图像的主方向(Matlab)

function [mdex ] = MainDirec(a)% function: the main direction of the image% description: the direction edge is [0,180],and the direction are divided% to 18 part by 10,% output: the index ...

weixin_39890327的博客 655

昇腾CANN elec-ops-inspection 实战:工业视觉缺陷检测算子在 NPU 上的完整优化

电网巡检无人机实时检测面临4K图像处理挑战。针对CPU推理速度不足和NPU利用率低的问题,elec-ops-inspection提供专用优化方案:1)绝缘子裂纹检测采用分块推理(512×512)+重叠融合,NPU推理速度提升4.6倍;2)导线异物检测结合Sobel边缘预筛选和Hough直线检测,将标准循环计算转化为NPU矩阵运算。核心创新包括多尺度滑动窗口、4K图像分块处理以及NPU Vector/Cube混合流水线,实现30FPS实时检测要求。

2501_94333695的博客 206

opencv 边缘检测sobel算子

opencv 边缘检测sobel算子

m0_37302966的博客 693

Sobel Operator

边缘是指图像中灰度或颜色强度发生显著变化的区域。Sobel算子是一种用于图像处理的边缘检测算子。它通过计算图像灰度值的梯度来检测图像中的边缘。

weixin_47020721的博客 412
上一篇: 17-边缘处理
下一篇: 19 - Laplace算子
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值