* This example program applies image segmentation with an MLP
* classifier to separate oranges and lemons from the background.
*
read_image (Image, 'color/citrus_fruits_01')
get_image_pointer1 (Image, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
set_display_font (WindowHandle, 12, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (2)
dev_display (Image)
dev_update_window ('off')
dev_update_pc ('off')
dev_update_var ('off')
dev_set_color ('white')
*
* Create an MLP classifier
create_class_mlp (3, 3, 3, 'softmax', 'normalization', 10, 42, MLPHandle)
*
* Read a training image and add samples for the classes
* 'oranges' and 'background' to the classifier
read_image (Image, 'color/citrus_fruits_01')
dev_display (Image)
gen_rectangle1 (OrangeRegion, 100, 130, 230, 200)
dev_display (OrangeRegion)
disp_message (WindowHandle, 'OrangeRegion', 'window', 100, 210, 'black', 'true')
dev_set_color ('white')
gen_rectangle1 (BackgroundRegion, 30, 20, 50, 50)
dev_display (BackgroundRegion)
disp_message (WindowHandle, 'BackgroundRegion', 'window', 30, 60, 'black', 'true')
dev_set_color ('white')
gen_empty_region (EmptyRegion)
gen_empty_obj (TrainingRegions1)
concat_obj (TrainingRegions1, OrangeRegion, TrainingRegions1)
concat_obj (TrainingRegions1, EmptyRegion, TrainingRegions1)
concat_obj (TrainingRegions1, BackgroundRegion, TrainingRegions1)
add_samples_image_class_mlp (Image, TrainingRegions1, MLPHandle)
stop ()
*
* Read a training image and add samples for the classes
* 'lemons' and 'background' to the classifier
read_image (Image, 'color/citrus_fruits_03')
dev_display (Image)
gen_rectangle1 (LemonRegion, 180, 130, 230, 240)
dev_display (LemonRegion)
disp_message (WindowHandle, 'LemonRegion', 'window', 180, 250, 'black', 'true')
dev_set_color ('white')
gen_rectangle1 (BackgroundRegion, 400, 20, 430, 50)
dev_display (BackgroundRegion)
disp_message (WindowHandle, 'BackgroundRegion', 'window', 400, 60, 'black', 'true')
gen_empty_obj (TrainingRegions2)
concat_obj (TrainingRegions2, EmptyRegion, TrainingRegions2)
concat_obj (TrainingRegions2, LemonRegion, TrainingRegions2)
concat_obj (TrainingRegions2, BackgroundRegion, TrainingRegions2)
add_samples_image_class_mlp (Image, TrainingRegions2, MLPHandle)
stop ()
*
* Train the classifier
disp_message (WindowHandle, 'Training...', 'window', 10, 450, 'black', 'true')
train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog)
disp_message (WindowHandle, 'completed', 'window', 30, 450, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
dev_set_color ('white')
stop ()
dev_set_draw ('fill')
*
* Segment images
for I := 1 to 15 by 1
read_image (Image, 'color/citrus_fruits_' + I$'.2d')
classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
select_obj (ClassRegions, ClassOranges, 1)
select_obj (ClassRegions, ClassLemons, 2)
select_obj (ClassRegions, ClassBackground, 3)
dev_set_draw ('fill')
dev_display (Image)
dev_set_color ('slate blue')
dev_display (ClassBackground)
dev_set_color ('goldenrod')
dev_display (ClassOranges)
dev_set_color ('yellow')
dev_display (ClassLemons)
disp_message (WindowHandle, 'Classify Image ' + I, 'window', 10, 10, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* Apply a post processing
closing_circle (ClassOranges, RegionClosingOranges, 3.5)
connection (RegionClosingOranges, ConnectedRegionsOranges)
select_shape (ConnectedRegionsOranges, SelectedRegionsOranges, 'area', 'and', 20000, 99999)
fill_up (SelectedRegionsOranges, RegionFillUpOranges)
area_center (RegionFillUpOranges, AreasOranges, RowsOranges, ColumnsOranges)
shape_trans (RegionFillUpOranges, RegionFillUpOranges, 'convex')
*
closing_circle (ClassLemons, RegionClosingLemons, 3.5)
connection (RegionClosingLemons, ConnectedRegionsLemons)
select_shape (ConnectedRegionsLemons, SelectedRegionsLemons, 'area', 'and', 15000, 99999)
fill_up (SelectedRegionsLemons, RegionFillUpLemons)
area_center (RegionFillUpLemons, AreasLemons, RowsLemons, ColumnsLemons)
shape_trans (RegionFillUpLemons, RegionFillUpLemons, 'convex')
*
dev_display (Image)
dev_set_draw ('margin')
dev_set_line_width (5)
dev_set_color ('goldenrod')
dev_display (RegionFillUpOranges)
dev_set_color ('yellow')
dev_display (RegionFillUpLemons)
disp_message (WindowHandle, 'Classify Image ' + I + ' with Post Processing', 'window', 10, 10, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
disp_message (WindowHandle, 'Class: oranges', 'window', RowsOranges, ColumnsOranges - 50, 'black', 'true')
disp_message (WindowHandle, 'Class: lemons', 'window', RowsLemons, ColumnsLemons - 50, 'black', 'true')
stop ()
endfor
dev_clear_window ()
*
* Clear the classifier from memory
clear_class_mlp (MLPHandle)
disp_message (WindowHandle, 'No more lines to execute', 'window', 10, 10, 'black', 'true')