当使用我的径向梯度算法与扩散属性设置为反射或重复,我得到疯狂的驴云纹时,波段太近了。这很正常。
我一直在试图理解的是如何弄清楚这件事发生在哪里,或者是否有可能弄清楚这件事。如果我能确定某种“不同的混淆”值,我可以使用它作为权重,在给定像素处的渐变颜色和所有颜色的加权平均值之间混合,从而减轻莫尔条纹。
我知道这是一个很模糊的话题,也许这更像是一个数学问题,但是有人有什么想法吗?
作为参考,我的算法类似于this implementation
下面是我的代码:

最佳答案

使用一个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;
}

高方差的斑块不是平滑的梯度,几乎肯定是高云纹区。

10-04 16:45