gpt4 book ai didi

Android图像处理算法性能

转载 作者:搜寻专家 更新时间:2023-11-01 08:12:26 26 4
gpt4 key购买 nike

我创建了一种执行 sobel 边缘检测的方法。我使用 Camera yuv 字节数组来执行检测。现在我的问题是我只能得到 5fps 之类的东西,这真的很低。我知道它可以更快地完成,因为市场上还有其他应用程序能够以良好的 fps 和高质量来完成它。我以 800x400 分辨率传递图像。谁能检查我的算法是否可以缩短或提高性能?我已经将算法放在 native 代码中,但 fps 似乎没有区别。

public void process() {
progress=0;
index = 0;
// calculate size

// pixel index

size = width*(height-2) - 2;
// pixel loop
while (size>0)
{
// get Y matrix values from YUV
ay = input[index];
by = input[index+1];
cy = input[index+2];
gy = input[index+doubleWidth];
hy = input[index+doubleWidth+1];
iy = input[index+doubleWidth+2];

// get X matrix values from YUV
ax = input[index];
cx = input[index+2];
dx = input[index+width];
fx = input[index+width+2];
gx = input[index+doubleWidth];
ix = input[index+doubleWidth+2];

// 1 2 1
// 0 0 0
// -1 -2 -1
sumy = ay + (by*2) + cy - gy - (2*hy) - iy;

// -1 0 1
// -2 0 2
// -1 0 1
sumx = -ax + cx -(2*dx) + (2*fx) - gx + ix;

total[index] = (int) Math.sqrt(sumx*sumx+sumy*sumy);
// Math.atan2(sumx,sumy);
if(max < total[index])
max = total[index];
// sum = - a -(2*b) - c + g + (2*h) + i;

if (total[index] <0)
total[index] = 0;

// clamp to 255
if (total[index] >255)
total[index] = 0;

sum = (int) (total[index]);
output[index] = 0xff000000 | (sum << 16) | (sum << 8) | sum;
size--;
// next
index++;
}
//ratio = max/255;

}

提前致谢!问候

最佳答案

所以我有两件事:

  1. 我会考虑放弃 Math.sqrt() 表达式:如果你只对边缘检测感兴趣,我认为不需要这个,因为 sqrt 函数是单调的,而且它真的很昂贵计算。
  2. 我会考虑另一种算法,尤其是我使用单独的卷积滤波器获得了很好的结果:http://www.songho.ca/dsp/convolution/convolution.html#separable_convolution因为这可能会减少算术浮点运算的数量(这可能是您的瓶颈)。

我希望这会有所帮助,或者至少能激发一些灵感。祝你好运。

关于Android图像处理算法性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521462/

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