マスク内の最も近いピクセルまでの距離に基づいてグレースケール グラデーションを作成するアルゴリズムがあります。半径が大きくなる円を作成し、マスク内のすべてのピクセルを円のピクセルに対してサンプリングすることで、ピクセルを見つけます。
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 での計算に膨大な時間がかかります。オプションの 1 つは、GPU で計算を行うことですが、このアルゴリズムを最適化して、はるかに高速に動作させることは可能ですか? 最終的には、滑らかなグラデーションを比較的速く取得したいと考えています。
ありがとう!