gpt4 book ai didi

c++ - 在 C++ 中计算直方图的梯度

转载 作者:行者123 更新时间:2023-11-30 00:42:04 24 4
gpt4 key购买 nike

我计算了 3D 灰度图像的直方图(一个简单的一维数组)。现在我想计算这个直方图在每个点的梯度。所以这实际上意味着我必须在某些点计算一维函数的梯度。但是我没有功能。那么如何使用具体的 x 和 y 值来计算它呢?

为了简单起见,您能否通过示例直方图向我解释一下 - 例如使用以下值(x 是强度,y 是该强度的频率):

x1 = 1; y1 = 3

x2 = 2; y2 = 6

x3 = 3; y3 = 8

x4 = 4; y4 = 5

x5 = 5; y5 = 9

x6 = 6; y6 = 12

x7 = 7; y7 = 5

x8 = 8; y8 = 3

x9 = 9; y9 = 5

x10 = 10; y10 = 2

我知道这也是一个数学问题,但由于我需要用 C++ 解决它,所以我想你可以在这里帮助我。

谢谢你的建议马克

最佳答案

我认为您可以使用图像边界检测中使用的相同方法(这是一种梯度微积分)来计算梯度。如果您的直方图在 vector 中,您可以计算梯度的近似值*:

for each point in the histogram compute 
gradient[x] = (hist[x+1] - hist[x])

这是一种非常简单的方法,但我不确定这是否是最准确的。

  • 近似值,因为您使用的是离散数据而不是连续数据

已编辑:

其他运算符可能会强调小差异(小梯度会变得更加强调)。罗伯茨算法来源于导数演算:

lim delta -> 0 = f(x + delta) - f(x) / delta

delta 无限趋向于 0(为了避免 0 除法)但永远不会为零。因为在计算机内存中这是不可能的,我们可以获得的最小增量是 1(因为 1 是图像(或直方图)中点到点的最小距离)。

替换

lim delta -> 0 to lim delta -> 1

我们得到

f(x + 1) - f(x) / 1 = f(x + 1) - f(x) => vet[x+1] - vet[x]

关于c++ - 在 C++ 中计算直方图的梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1974006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com