3

在将Spread 属性设置为Reflect 或Repeat 的情况下使用我的径向渐变算法时,当条带靠得太近时,我会出现疯狂的莫尔条纹。这个是正常的。

我一直试图了解的是如何弄清楚这种情况发生在哪里,或者是否有可能弄清楚这一点。如果我可以确定某种“不同的<->混淆”值,我可以将其用作权重,在给定像素的渐变颜色和所有颜色的加权平均值之间进行混合,从而减轻莫尔条纹。

我知道这是一个相当晦涩的话题,也许这更像是一个数学问题,但是有人有什么想法吗?

作为参考,我的算法类似于这个实现

这是我的代码现在给出的内容:

扩散设置为反射的径向渐变

4

1 回答 1

2

使用 3x3 过滤器并为每个 3x3 像素块计算颜色方差。例如,对于补丁中的每两个相邻像素(例如 pix(0,0) 和 pix(0,1)),获取每个颜色通道之间差异的绝对值,对其进行平方和求和。

所以像:

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 回答