首页 > 其他 > 详细

图像梯度计算加速

时间:2020-06-28 18:40:49      阅读:69      评论:0      收藏:0      [点我收藏+]

常规方法:

 1 void SobelAmplitude(Mat &sobelx, Mat &sobely, Mat &SobelXY) {
 2     SobelXY = Mat::zeros(sobelx.size(), CV_32FC1);
 3     for (int i = 0; i < SobelXY.rows; i++) {
 4         float *data = SobelXY.ptr<float>(i);
 5         short *datax = sobelx.ptr<short>(i);
 6         short *datay = sobely.ptr<short>(i);
 7         for (int j = 0; j < SobelXY.cols; j++) {
 8             data[j] = sqrt(datax[j] * datax[j] + datay[j] * datay[j]);
 9         }
10     }
11 //    convertScaleAbs(SobelXY, SobelXY);
12 }

上述,图像在x和y方向上的梯度数据类型为CV_16S。

当然,也可以为uchar!
自己修改,uchar类型,就有很多种方式,比如:

查表法:提供者:GiantPandaCV 

unsigned char Table[65026];
for (int Y = 0; Y < 65026; Y++) Table[Y] = (sqrtf(Y + 0.0f) + 0.5f);

 for (int X = 0; X < Width; X++)
{
int GX = First[X] - First[X + 2] + (Second[X] - Second[X + 2]) * 2 + Third[X] - Third[X + 2];
int GY = First[X] + First[X + 2] + (First[X + 1] - Third[X + 1]) * 2 - Third[X] - Third[X + 2];
LinePD[X] = Table[min(GX * GX + GY * GY, 65025)];
}

图像梯度计算加速

原文:https://www.cnblogs.com/almn/p/13204108.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!