Blender Git Commit Log
Git Commits -> Revision 3830bf4
July 6, 2016, 22:50 (GMT) |
Cycles: Add experimental alternative SVD-threshold norm based on power iteration One of the first steps of the algorithm is to apply a truncated SVD to a matrix formed by the features in order to reduce the dimensionality of the problem and decorrelate dimensions. The truncation threshold, according to the paper, is defined by twice the spectral norm of the matrix that is formed like the first one, but from the variances of the features. The reference implementation doesn't compute the spectral norm, but instead computes the Frobenius norm and multiplies it with sqrt(Rank)/2. That makes sense since it's guaranteed that the Frobenius norm lies somewhere between the one and sqrt(Rank) times the spectral norm. However, it's still an approximation. Therefore, in this commit I've tried to directly compute the spectral norm since the runtime performance is currently mainly limited by the per-pixel loops, so a small constant increase shouldn't matter too much. In order to compute it, the code just constructs the Gramian matrix of the variance matrix and computes the square root of its largest eigenvalue, which is found via power iteration. I haven't tested the code too much yet, but it seems that the improvement is quite negligible and not really worth the effort. Still, it might be interesting to tweak it further. |
Commit Details:
Full Hash: 3830bf4bbc812aea436102e45970f13f417a2174
Parent Commit: 83c37d7
Lines Changed: +763, -2
4 Added Paths:
/intern/cycles/kernel/kernel_filter.h.orig (+506, -0) (View)
/intern/cycles/kernel/kernel_filter.h.rej (+43, -0) (View)
/intern/cycles/render/denoising.cpp (+17, -0) (View)
/intern/cycles/render/denoising.h (+122, -0) (View)
/intern/cycles/kernel/kernel_filter.h.rej (+43, -0) (View)
/intern/cycles/render/denoising.cpp (+17, -0) (View)
/intern/cycles/render/denoising.h (+122, -0) (View)