I have to assume incident angle is gaussian distributed, and use uncertainty propagation rule.
I= F(O,A) = arccos(<O,A>/|A|)
where I is the incident angle, A= [a,b,c] is the surface normal before normalization, Σ is [σa,σb,σc], O is the camera pose vector. <> is inner product symbol
The preciseness of this method depends on the ratio between sigma term and partial derivative term. It is relatively precise when sigma term is smaller than partial derivative term.
Experiment
let surface normal N be a random vector
let uncertainty of N be sigma = N.*(rand(1,3)*0.1+0.1)
let camera pose be an random vector
figure: ratio between estimated σI and the real σI from 1000000 points simulation. A result from 1000 trial experiment.
和monte carlo的对照看来效果并不理想
误差传递公式用的是一阶泰勒展开
https://zh.wikipedia.org/wiki/%E8%AF%AF%E5%B7%AE%E4%BC%A0%E6%92%AD
二阶貌似是这样:
http://stats.stackexchange.com/questions/13004/propagation-of-error-using-2nd-order-taylor-series
实验以后发现二阶分量小到忽略不计,无法改善
难道是求导错了?