Select Git revision
GetRandomEllipseImage.m
GetRandomEllipseImage.m 4.46 KiB
% GetRandomEllipseImage(K)
% generate a logical image with K overlapping ellipses
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Copyright (c) 2016, Drexel University
% All rights reserved.
%
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions are met:
%
% * Redistributions of source code must retain the above copyright notice, this
% list of conditions and the following disclaimer.
%
% * Redistributions in binary form must reproduce the above copyright notice,
% this list of conditions and the following disclaimer in the documentation
% and/or other materials provided with the distribution.
%
% * Neither the name of PixelRep nor the names of its
% contributors may be used to endorse or promote products derived from
% this software without specific prior written permission.
%
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
% DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
% FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
% DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
% SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
% OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
% OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function bw=GetRandomEllipseImage(K)
IMSIZE=1000;
mu1=[500,500];
bw=logical(zeros(IMSIZE));
pts={};
ptsEdge={};
bValidEllipse=0;
while ~bValidEllipse
for kk=1:K
[pts{kk} ptsEdge{kk}] = GetRandomEllipsePts(mu1,IMSIZE);
end
% place each ellipse
for kk=2:K
ptsCombined=vertcat(pts{1:kk-1});
idxK = 1+round((length(pts{kk})-1)*rand());
idxCombined = 1+round((length(ptsCombined)-1)*rand());
offset = ptsCombined(idxCombined,:)-pts{kk}(idxK,:);
pts{kk} = pts{kk} + repmat(offset,[size(pts{kk},1) 1]);
ptsEdge{kk} = ptsEdge{kk}+repmat(offset,[size(ptsEdge{kk},1) 1]);
end
idxPts={};
for kk=1:K
idxPts{kk}=sub2ind([1000,1000],pts{kk}(:,2),pts{kk}(:,1));
end
idxPtsOverlap=GetOverlap(idxPts);
% make sure no ellipse is fully contained in another