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