我有一個算法,根據距離到最接近的像素的距離創建一個灰度漸變。我通過構建一個圓圈的半徑增大和採樣的所有像素的面具對圓的像素找到像素:基於到像素的距離的漸變
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);
}
}
}
}
}
目前的算法是非常緩慢的 - 爲512×512和口罩大小的圖像128x128它將不得不做512 * 512 * 384 * 41 = 4 127 195 136比較,這需要花費大量的時間在CPU上進行計算。其中一種選擇是在GPU上進行計算,但是可以優化該算法以使其運行速度更快嗎?我最終想要相對快速地獲得一個很好的平滑梯度。
謝謝!
與你的問題沒有關係,但你可能想用'radius
2013-02-13 16:32:17
使'罪'(alpha)&'cos(alpha)'表 - 這些功能緩慢。你也做錯了一切!不要掃描*所有*像素,而是根據您的遮罩製作漸變遮罩(標記具有要標記距離值的像素)。你可以用隨後的擴張來完成。 – 2013-02-13 16:35:00
@Eddy_Em你應該充實你的漸變面具的建議,並將其作爲答案。 – 2013-02-13 17:35:00