3

SpreadプロパティをReflectまたはRepeatに設定して放射状グラデーションアルゴリズムを使用すると、バンドが近すぎるとお尻のモアレが狂ってしまいます。これは正常です。

私が理解しようとしているのは、これがどこで発生するかを理解する方法、またはこれを理解することが可能かどうかです。ある種の「明確な<->混乱した」値を決定できれば、それを重みとして使用して、特定のピクセルのグラデーションカラーとすべてのカラーの加重平均をブレンドし、モアレを軽減できます。

私はこれがかなりあいまいなトピックであることを知っています、そして多分これはもっと数学の質問です、しかし誰かが何か考えを持っていますか?

参考までに、私のアルゴリズムはこの実装に似ています。

これが私のコードが今与えるものです:

SpreadがReflectに設定された放射状グラデーション

4

1 に答える 1

2

3x3フィルターを使用し、3x3ピクセルパッチごとに色の分散を計算します。たとえば、パッチ内の隣接する2つのピクセル(たとえば、pix(0,0)とpix(0,1))ごとに、各カラーチャネル間の差の絶対値を取得し、それを2乗して合計します。

だから次のようなもの:

double pixelVariance( pix a, pix b )
{
    double variance = 0;
    variance += ( a.red   - b.red   ) * ( a.red   - b.red   );
    variance += ( a.green - b.green ) * ( a.green - b.green );
    variance += ( a.blue  - b.blue  ) * ( a.blue  - b.blue  );
    return variance;
}

次に、3x3パッチの差異:

double patchVariance( Patch patch )
{
   double variance = 0;
   variance += pixelVariance( patch( 0, 0 ), patch( 0, 1 )); 
   variance += pixelVariance( patch( 0, 0 ), patch( 1, 0 )); 
   // etc.
   return variance;
}

分散の大きいパッチは滑らかなグラデーションではなく、ほぼ確実にモアレの多い領域になります。

于 2012-07-03T18:11:11.500 に答える