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