www.pudn.com > levelsetImage.rar > adaptivescript.m
% ADAPTIVESCRIPT Script to open image file, set initial circle, and % run narrow band algorithm on several different sizes of the % image. % constants clear close all global ITERATIONS; ITERATIONS = 25; display_it = 100; movie_it = inf; scales = [ 0.1, 0.25, 0.375, 0.5, 0.75, 1.0 ]; iterations = [ 5000, 4000, 3000, 2000, 1000, 500 ]; % grab the image filename and path [ filename, pathname ] = uigetfile( '*', 'Select an image to segment' ); % if user cancelled dialog box then exit if( filename == 0 ) return; end; % otherwise open the image and display it im = readimage( strcat( pathname, filename ) ); im_resized = imresize( im, scales( 1 ) ); %im_resized = imresize( im); imshow( uint8( im_resized ) ); % and get the user to click on the circle center disp( 'Click on circle center' ); center = ginput( 1 ); % display the center and get the user to click again to define the % radius disp( 'Click again to define radius' ); hold on; plot( center(1), center(2), 'go-' ); hold off; radius = round( sqrt( sum( ( center - ginput( 1 ) ).^2 ) ) ) % Get the user to pick whether the circle contains the object disp( 'Choose whether or not entire object is inside circle' ); disp( '1. Completely Inside' ); disp( '2. Not Completely Inside' ); inside = 0; while( inside ~= 1 & inside ~= 2 ) inside = input( 'Please pick (1) or (2): ' ); end; % determine movie name moviename = filename( 1 : strfind( filename, '.' ) - 1 ); % initialize phi to signed distance function phi = initphi( size( im_resized ), circshift( center, [ 0, 1 ] ), radius, inside ); % and run the level set segmentation for i = 1 : size( iterations, 2 ); %for i = 1 : 2; % setup adaptive parameters ITERATIONS = iterations( i ); im_resized = imresize( im, scales( i ) ); phi = imresize( phi, size( im_resized ) ); % perform segmentation at i'th level phi = levelsetbandadaptive( im_resized, display_it, movie_it, moviename, phi ); end; im_segmented = createimage( im, phi ); % display the segmented image and save it to disk clf; imshow( im_segmented ); drawnow; imwrite( im_segmented, strcat( moviename, '_segmented.png' ) );