我有一种算法,可以根据到蒙版中最近像素的距离创建灰度渐变。我通过构造一个半径增加的圆并根据圆的像素对掩码中的所有像素进行采样来找到像素:
for (x = 0; x < width; x++){
for (y = 0; y < height; y++) {
bool pixelFound = false;
for (radius = 0; radius < resolution, pixelFound == false; radius++) {
for (alpha = 0; alpha < 2 * PI; alpha += 1/radius) {
xx = x + cos(alpha)*radius;
yy = y + sin(alpha)*radius;
if ( MaskHasPixel(xx, yy) ) {
pixelFound = true;
gradient = 1 - Magnitude(xx-x, yy-y) / resolution;
WriteGradientForPixel(x,y, gradient);
}
}
}
}
}
目前该算法非常慢 - 对于 512x512 的图像和 128x128 的掩码大小,它必须进行 512*512*384*41 = 4 127 195 136 次比较,这需要大量时间在 CPU 上进行计算。一种选择是在 GPU 上进行计算,但是否可以优化此算法以使其工作得更快?我希望最终获得相对较快的平滑渐变。
谢谢!