Vignetting Diagrams

Matlab code for vignetting diagrams

function [percent, rgb] = vignette(ap,ya,yc)

N=201;
[x,y] = meshgrid(linspace(-1,1,N));
xsq = x.*x;
rsq = xsq+y.*y;
base = rsq<=1.0;
base_area = sum(sum(base));
radius = zeros(size(ap));
offset = radius;
ya = abs(ya);
idx = find(ya>0);
map = base;
radius(idx) = ap(idx)./ya(idx);
offset(idx) = yc(idx)./ya(idx);
for i=1:length(idx)
    k = idx(i);
    yd = y - offset(k);
    rsq = radius(k)*radius(k);
    lens_map = (xsq+yd.*yd)<rsq;
    map = and(map,lens_map);
end
vign_area = sum(sum(map));
percent = 100.0*(1-vign_area/base_area);
rgb = cat(3,base,base,base&~map);

Example Calculation

>> ap = [ 4 3 ];
>> ya = [ 3 2 ];
>> yc = [ -2 2];
>> [percent, map] = vignette(ap,ya,yc);
>> percent

percent =

   42.3996

>> imwrite(map,'vig3-8c.bmp');
>> imshow(map);

>> [percent, map] = vignette(ap,ya,0.75*yc);
>> percent

percent =

   17.3909

>> imwrite(map,'vig3-8b.bmp');


Maintained by John Loomis, last updated 17 Oct 2001