梯度大小的单位和限制是什么?

2023-11-29

图像梯度大小的单位和限制是什么?例如,我知道如何获取图像的梯度大小(见下文)。以及由此产生的Mat将包含源图像中每个边缘的边缘强度(大小)。

但是“边缘强度/幅度”的单位是什么?梯度方向以度/弧度为单位,大小的单位是什么? OpenCV 中的 Magnitude 有哪些限制?是 0 到 1,即边缘的强度/大小介于 0 和 1 之间,其中 1 完全垂直?

因此,如果我要在直方图中绘制大小; x 轴代表边缘强度/陡度,y 轴代表具有该强度/陡度的像素数量?我对么?

Mat sX, sY, mag;
Sobel(src, sX, CV_32F, 1, 0, 1);
Sobel(src, sY, CV_32F, 0, 1, 1);

magnitude(sX, sY, mag);

// So mag now contains the image gradient magnitude 
// of the all the edges I pulled out by sobel.
// What are the units and limits of 'edge strength'/magnitude?
// For example are the limits 0 to 1?

Units

您正在获取函数的一些近似导数。如果函数是,比如说,f(x),然后记住你正在看的是change in f超过change in x。假设该函数是基于时间的位置r(t),那么导数的单位是位置(距离)差除以时间(时间)差。那么图像的单位是什么?嗯,它们是某些位置的亮度值。光度值的变化只是光度值,位置的变化是距离。所以导数的单位是光度/距离。

梯度幅值

由于我们正在处理图像,最小距离是一个像素,最大可能的变化是从白色到黑色(反之亦然),因此这些将与最大梯度相对应。但 Sobel 可以处理任意矩阵,其最小值和最大值可能远远超出 0 到 1 或 0 到 255 范围。

请注意,您可能会得到负的斜率值:以像素为单位的距离始终为正,但从白色到黑色以及从黑色到白色的变化具有相反的符号。索贝尔计算出这些导数后,您将计算震级分别从angle。您可以根据权重计算角度x and y方向由每个方向上的梯度强度决定,并且需要符号来返回 0 到 360 之间的任何角度。

如果您希望所有边缘的大小为正值,并且非边缘为 0,您可以采用L1-norm,即abs(x) + abs(y),或取欧几里得 or L2-norm with the magnitude功能这是sqrt(G(x)^2 + G(y)^2),就像计算三角形的斜边一样。直接添加意味着一些梯度为正,一些梯度为负,留下显示黑白边缘的灰色图像。

Sobel 算子的值

Sobel 运算符只是计算像素邻域的导数,不只是比较两个像素,而是比较六个像素,并对它们进行加权,将它们全部相加,因此它可能比图像中的值稍高一些。而且,浮点图像不会在 0 或 1 处被截断,因此您可以发送具有更大值的图像并获取更大的值。除了数据类型可以容纳的最大值之外,运算符没有虚拟最大值。 Sobel 算子还在梯度计算之前进行一些平滑处理以去除小边缘,但平滑算子不会缩放值。

OpenCV索贝尔的文档显示运算符与图像相乘的值。具体来说,对于x方向,每个 3x3 像素邻域按元素乘以

-1 0 1
-2 0 2
-1 0 1

并总结。如果您的图像类型的最大可能值为M最小值是m那么梯度中最大的正值是

(1+2+1)*M - (1+2+1)*m = 4*M - 4*m

类似地,最大负值是

-(1+2+1)*M + (1+2+1)*m = -4*M + 4*m

这对于每个方向的梯度都是相同的。所以,每个方向上的梯度范围Sobel[-4M+4m, 4M-4m].

规范化操作员

您将使用 L1 范数或 L2 范数以某种方式将其中两个量值相加。假设您坚持使用 L2 范数,则组合幅度的最大值将简单地遵循 L2 范数定义,

MAX = sqrt((4*M - 4*m)**2 + (4*M - 4*m)**2) 
    = sqrt(2 * (4*M - 4*m)**2)
    = sqrt(2 * 16 * (M - m)**2) 
    = sqrt(32) * (M - m)

由于 L1 或 L2 范数将正值和负值视为相等(重要的是它们与 0 的距离),因此 Sobel 算子中的最小值在组合幅度中给出与最大值相同的响应。当然,您的响应的某些点可能为 0,这会给出 Sobel 响应,因此总和幅度也为 0,因此 0 将是最小值。

编辑:如中所述另一个答案对于这个问题,我们实际上无法同时在 X 和 Y 方向上达到最大值,如果你计算出实际的最大值是多少,它最终会更小一些:

sqrt(20) * (M - n)

因此,您可以将梯度标准化为介于 0 和 1 之间。除以最大值即可确定图像类型。这将允许您比较多个图像的边缘强度。

或者你可以只使用normalize函数,但最终值将取决于您的图像,因此您无法比较图像之间的相等值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

梯度大小的单位和限制是什么? 的相关文章

  • 在 opencv 中一次性将旋转和平移结合起来

    我有一段用于旋转和平移图像的代码 Point2f pt 0 in rows double angle atan trans c trans b 180 M PI Mat r getRotationMatrix2D pt angle 1 0
  • C# 中直接从 URL 获取图像尺寸

    我正在尝试使用以下代码直接从网络上获取图片的尺寸 string image http www hephaestusproject com csharp3 png byte imageData new WebClient DownloadDa
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • 为什么我在 WinForms 列表框中得到“System.Data.DataRowView”而不是实际值?

    每当我运行代码并尝试查看highscore我在列表框中得到的只是System Data DataRowView 谁能明白为什么吗 Code MySqlConnection myConn new MySqlConnection connStr
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • C#生成的csv文件通过电子邮件发送嵌入到Lotus Note中电子邮件的底部

    我遇到了一个奇怪的问题 即使用 NET SmtpClient 通过电子邮件发送的 CSV 附件出现在电子邮件底部 而不是 Lotus Note 中的附件 我只是不知道如何解决这个问题 而且我无法访问客户端计算机 这使得调试非常困难 我可以采
  • += 运算符在 C++ 中是如何实现的?

    这是我一直在思考的一个问题 但从未找到任何资源来说明这个问题的答案 事实上它不仅是为了 也适用于它的兄弟姐妹 即 等等 当然不是 考虑这个例子 int a 5 a 4 this will make a 9 现在考虑等效表达式 a a 4 T
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • List 或其他类型上的 string.Join

    我想将整数数组或列表转换为逗号分隔的字符串 如下所示 string myFunction List
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 删除数组时出现访问冲突异常

    删除分配的内存时 出现 访问冲突读取位置 异常 如下所示 我有一个针对 Visual Studio 2010 工具集 v100 C 编译器编译的本机 dll 我有一个针对它的托管 dll 包装器 它是针对工具集 v90 编译的 因为我想以
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 使用 WinAPI 连接禁用的显示设备

    我的问题是启用禁用的监视器ChangeDisplaySettingsEx 我想这不是火箭科学 但经过一番挖掘后 它看起来仍然是不可能的 我找到了一种根据找到的 Microsoft 代码示例禁用所有辅助显示器的方法here https msd
  • 如何使用“路径”查询 XDocument?

    我想查询一个XDocument给定路径的对象 例如 path to element I want 但我不知道如何继续 您可以使用以下方法System Xml XPath Extensions http msdn microsoft com
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • 在我网站的图像上添加 Instagram 滤镜

    我在用CSSGram在我的网站上使图像具有类似 Instagram 的滤镜 下面是向图像添加滤镜的方法
  • android中声音转换为频率[重复]

    这个问题在这里已经有答案了 可能的重复 实时音高检测 确定通过麦克风接收到的声音的音频频率 我正在开发自己的 Android 吉他调音器 在这里我将不得不使用吉他音符频率 因此 我想知道如何在android中将通过麦克风端口传来的声音转换为
  • 在静态类中使用依赖注入

    我需要在静态类中使用依赖注入 静态类中的方法需要注入依赖项的值 以下代码示例演示了我的问题 public static class XHelper public static TResponse Execute string metodo
  • 缓冲区为空后关闭“worker”go 例程

    我想要我的 goroutine 工作人员 ProcessToDo 在下面的代码中 等待所有 排队 工作处理完毕后再关闭 工作例程有一个 待办事项 通道 缓冲 通过该通道将工作发送给它 它有一个 完成 通道来告诉它开始关闭 文档称 如果满足多
  • 如何在JAVA中将纪元转换为mySQL时间戳

    如何获取mySQL时间戳格式mySQLtimestamp long epochNow System currentTimeMillis 1000 long epochWeek 604800 long date7daysAgo epochNo
  • 对 mongoose 3.x 填充文档进行排序的正确语法

    我有两个 MongoDB 集合Customer and User in 1 1关系 我正在尝试使用查询两个文档猫鼬种群并对它们进行排序User name 下面没有任何工作 我的猫鼬是 3 8 19 Customer find populat
  • PHP array_search 多维数组并返回键

    我试图在多维数组中搜索一个值 下面只是大数组的一部分 并获取该值的密钥 但我无法自己管理它 这是我尝试过的 Array 0 gt Array 0 gt SMEG 30 1 gt ALES 2 gt 3 gt 4 gt 5 gt ALES 6
  • 使用sklearn load_files()从png加载图像作为数据

    我目前正在使用 sklearn 构建一个简单的图像识别器 我需要使用 load files directory 从该目录中的子文件夹加载图像 它正确地获取了目标值 但数据属性不是简单的像素值 我假设我需要设置编码参数来考虑图像文件 但找不到
  • 整合ivy和doxygen

    有没有办法整合ivy和doxygen 我想通过 ivy 发布我的 doxygen 文档 可以吗 如果是的话怎么办 有文档说明如何操作吗 我不是 doxygen 用户 我假设您正在使用它来创建文档的 zip 存档 Ivy 可用于发布任何类型的
  • SwiftUI:了解使用常量与 @Binding 初始值设定项时的 .sheet / .fullScreenCover 生命周期

    我试图了解如何以及何时调用 sheet 和 fullScreenCover 初始值设定项 下面是一个最小的可重现示例 其中第一个屏幕有 3 个彩色矩形 而 SecondView 通过 fullScreenCover 显示 有 1 个矩形 该
  • 如何将方法作为回调传递给 Windows API 调用(后续)?

    这篇文章是相关文章的后续question发布于此处Ran The 接受的答案坚持使用通常的普通旧功能 这段摘录特别引起我的注意 实例方法有一个额外的隐式参数 其中包含 实例引用 即 Self 坚信应该有一种方法来使用一种 参数 适配器 重新
  • 如何在onsenui中使用多个html文件

    在 OnsenUI 中 它说 您还可以在同一页面中定义页面内容 而不是在单独的文件中创建 index html 和 services html 我不喜欢将整个应用程序放在一个 html 文件中 因此我尝试将每个模板放入一个单独的文件中 这是
  • 迭代器和列表迭代器的区别?

    Iterator ite Set iterator Iterator ite List iterator ListIterator listite List listIterator 我们可以用Iterator遍历一个Set or a Li
  • Folium Choropleth Map 呈现灰色阴影而不是专题地图的真实颜色

    我遇到的问题是我的分区统计图无法正确渲染 我有大量芝加哥市的叫车数据 我想按人口普查区创建分区统计图 我查了一下key ongeojson 文件中的特征为 geoid10 并确保拾取人口普查区域全部匹配 我还确保geojson文件和data
  • 你什么时候会看到 Jquery 美元符号出现在某个名称的末尾

    你什么时候会看到 jQuery 美元符号出现在某些名称的末尾 例如plot or plot getName 当美元符号位于这样的名称末尾时 这意味着什么 就其本身而言 什么也没有 这 只是标识符中的另一个合法字符 仅此而已 无论您使用什么代
  • 如何使用OpenSSL解密Java AES加密数据?

    我正在连接到一个旧版 Java 应用程序 该应用程序无法更改 该应用程序使用 AES 加密数据 以下是原始 Java 代码实例化 AES 密码的方式 SecretKeySpec skeySpec new SecretKeySpec key
  • 从 dask 读取并行 excel 表

    您好 到目前为止我遇到的使用 dask 的所有示例都有 使用 dask read csv 读取文件夹中的多个 csv 文件 称呼 如果我提供了一个包含多个选项卡的 xlsx 文件 我可以使用任何内容吗 在DASK并行阅读它们 附 我正在使用
  • 如何在给定包中查找带注释的方法?

    我有一个简单的方法标记注释 类似于第 35 项中的第一个示例 有效的Java 第二版 Marker annotation for methods that are called from installer s validation scr
  • didOutputSampleBuffer 委托未调用

    我的代码中的 didOutputSampleBuffer 函数没有被调用 我不知道为什么会这样 这是代码 import UIKit import AVFoundation import Accelerate class ViewContro
  • 梯度大小的单位和限制是什么?

    图像梯度大小的单位和限制是什么 例如 我知道如何获取图像的梯度大小 见下文 以及由此产生的Mat将包含源图像中每个边缘的边缘强度 大小 但是 边缘强度 幅度 的单位是什么 梯度方向以度 弧度为单位 大小的单位是什么 OpenCV 中的 Ma