gpt4 book ai didi

c++ - 梯度方向计算

转载 作者:行者123 更新时间:2023-12-01 16:23:58 24 4
gpt4 key购买 nike

我正在完成计算机视觉类(class)中的任务。子任务之一是基于图像亮度的梯度方向计算。我制作了一个明亮[宽度][高度]矩阵,其中包含图像每个像素的亮度值。我有两个这样的功能:

double Image::grad_x(int x,int y){
if(x==width-1 || x==0) return bright[x][y];
return bright[x+1][y]-bright[x-1][y];
}
double Image::grad_y(int x,int y){
if(y==height-1 || y==0) return bright[x][y];
return bright[x][y+1]-bright[x][y-1];
}

编辑:边界检查已修复

我正在使用简单的导数,而不使用 Sobel 运算符,因为简单的导数足以满足我的需求。

问题是,我是否正确地进行了这个梯度计算,以及我到底与边框像素有什么关系(现在函数返回像素本身的值,我不确定它是否准确)?顺便问一下,计算图像的梯度有什么用处吗?我想确保我的程序运行良好。

最佳答案

你的计算是正确的。这是您正在使用的一种简单的渐变方法,但如果这适合您的使用,那就没有问题。

极端情况是一个问题,因为您没有足够的数据来以与其他像素相同的方式计算梯度。处理它们的一种方法是简单地不计算极端情况并使用稍小的图像。

如果这不是一个选项,您也可以推断丢失的数据。如果您假设渐变平滑变化,则其工作原理如下:

在 x 梯度计算中,您可能计算了像素 1 的导数 A 和像素 2 的导数 B。如果您想推断像素 0(极端情况)的值,则可以使用值 a-(b-a) .

数值示例:

  pixel1: gradient = 100
pixel2: gradient = 80

extrapolate using a-(b-a):

pixel0: gradient = 100 - (80-100)) = 120

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

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