image thumbnail
from Draw Line Segments (anti aliased) by Alvin
Drawing line segments, Distances from line segments, and line segment masks

lineMask(imgSize, p0, p1, sigma)
function mask = lineMask(imgSize, p0, p1, sigma)
% function mask = lineMask(imgSize, p0, p1 [, sigma])
% generates a weighted line mask(i,j) = weight,
% optional argument sigma (default=4) controls the width of the line
% imgSize = [height, width]
% p0 = [row,col]
% p1 = [row,col] 
% points do not have to be within the image
% example:
%  img  = rgb2gray(im2double(imread('peppers.png')));
%  mask = lineMask(size(img), [50,50], [1005,4000]);
%  %put a gray (intensity=.75) line in the image at the place specified
%  out  = img.*(1-mask) + .75*mask;
%  figure(1); imshow(mask);
%  figure(2); imshow(out);
% REQUIRES distanceFromLineSegment.m

%
% by alvin.a.raj@gmail.com 11/23/2009

% Copyright (c) 2009 Alvin Raj
% 
%  Permission is hereby granted, free of charge, to any person
%  obtaining a copy of this software and associated documentation
%  files (the "Software"), to deal in the Software without
%  restriction, including without limitation the rights to use,
%  copy, modify, merge, publish, distribute, sublicense, and/or sell
%  copies of the Software, and to permit persons to whom the
%  Software is furnished to do so, subject to the following
%  conditions:
% 
%  The above copyright notice and this permission notice shall be
%  included in all copies or substantial portions of the Software.
% 
%  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
%  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
%  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
%  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
%  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
%  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
%  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
%  OTHER DEALINGS IN THE SOFTWARE.


if (~exist('sigma','var'))
    sigma = 4;
end

[x y] = meshgrid(1:imgSize(2),1:imgSize(1));
% convert (row,col) -> (x,y) 
p0 = [p0(2),p0(1)]; 
p1 = [p1(2),p1(1)]; 
dist = distanceFromLineSegment(x,y,p0,p1);
mask = exp(-dist.^2 / (2*sigma^2));

Contact us at files@mathworks.com