1.Fisheye distortion  鱼眼镜头

解释来自百度百科:鱼眼镜头是一种焦距为16mm或更短的并且视角接近或等于180°。 它是一种极端的广角镜头,“鱼眼镜头”是它的俗称。为使镜头达到最大的摄影视角,这种摄影镜头的前镜片直径很短且呈抛物状向镜头前部凸出,与鱼的眼睛颇为相似,“鱼眼镜头”因此而得名。

关键代码如下:

[cpp] view plain copy
 
  1. float2 fisheye(float2 uv)  
  2. {  
  3. float2  n_uv = (uv - 0.5) * 2.0;  
  4.   
  5.     float2 r_uv;  
  6.     r_uv.x = (1 - n_uv.y * n_uv.y) * _Intensity_y * (n_uv.x);  
  7.     r_uv.y = (1 - n_uv.x * n_uv.x) * _Intensity_x * (n_uv.y);  
  8.     return(uv* _scale - r_uv);  
  9. }  



 

效果是这样的:

 

 

2.Barrel Distortion  桶形畸变

桶形畸变(Barrel Distortion),又称桶形失真,是由镜头中透镜物理性能以及镜片组结构引起的成像画面呈桶形膨胀状的失真现象。我们在使用广角镜头或使用变焦镜头的广角端时,最容易察觉桶形失真现象。当画面中有直线(尤其是靠近相框边缘的直线)的时候,桶形失真最容易被察觉。普通消费级数码相机的桶形失真率通常为1%。

关键代码如下:

[cpp] view plain copy
 
  1. float2 barrel(float2 uv)  
  2.         {   
  3.   
  4.             float2 h = uv.xy - float2(0.5, 0.5);  
  5.             float r2 = h.x * h.x + h.y * h.y;  
  6.             float f = 1.0 + r2 * (_distortion + _cubicDistortion * sqrt(r2));  
  7.   
  8.             return f * _scale * h + 0.5;  
  9.         }  



 

效果是这样的:

 

3.Pincushion Distortion  枕形畸变

在正确的拍摄条件下,矩形物体的像仍应呈矩形。但有的镜头由于有缺陷,将矩形物体拍成四边向内凹进形如枕头的影像,称镜头的这种像差为枕形畸变。相反如拍成四边突出的影像即称桶形畸变。

枕形畸变又称正畸变,是由于视场边缘部分的放大率高于中心部分放大率所引起,即倾斜角度大的光线的放大率比倾斜角度小的光线的放大率高。

把桶形畸变参数修改即为枕形畸变

效果是这样的:

 

全部代码已上传至GitHub

                       ------by wolf96    http://blog.csdn.net/wolf96

posted on 2017-03-24 18:52  chenzhao  阅读(5235)  评论(0编辑  收藏  举报