标签:c image-processing gradient
我正在从事计算机视觉课程的任务.子任务之一是基于图像亮度的梯度方向计算.我已经制作了一个明亮的[宽度] [高度]矩阵,其中包含图像每个像素的亮度值.我有两个这样的功能:
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,image-processing,gradient 来源: https://codeday.me/bug/20191008/1871725.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。