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);
>> 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