40 import os, re, struct, sys, time
46 folder = os.path.abspath (folder)
47 if not os.path.exists (folder):
48 gimp.message(
"Folder '" + folder +
"' doesn't exist.\n")
51 total_unclassified = 0
52 total_misclassified = 0
55 images = os.path.join (folder,
"images")
56 for name
in os.listdir (images):
59 gimp.delete (image_display)
60 gimp.delete (mask_display)
61 except UnboundLocalError:
64 image_name = os.path.join (images, name)
67 name = re.sub (
r'\.jpg$',
'', name)
68 name = re.sub (
r'\.JPG$',
'', name)
69 name = re.sub (
r'\.bmp$',
'', name)
71 mask_name = os.path.join (folder,
"cm_bmp", name +
'.png')
72 truth_name = os.path.join (folder,
"truth", name +
'.bmp')
74 image = pdb.gimp_file_load (image_name, image_name)
75 image_layer = image.active_layer;
77 mask = pdb.gimp_file_load (mask_name, mask_name)
78 convert_grayscale (mask)
79 mask_layer = mask.active_layer;
81 truth = pdb.gimp_file_load (truth_name, truth_name)
82 convert_grayscale (truth)
83 truth_layer = truth.active_layer;
85 unclassified = unclassified_pixels (mask_layer, truth_layer)
87 sys.stderr.write (os.path.basename (image_name))
90 pdb.gimp_drawable_foreground_extract (image_layer,
91 FOREGROUND_EXTRACT_SIOX,
95 sys.stderr.write (
" ")
102 image_display = pdb.gimp_display_new (image)
103 mask_display = pdb.gimp_display_new (mask)
105 gimp.displays_flush ()
112 misclassified = misclassified_pixels (mask_layer, truth_layer)
114 sys.stderr.write (
"%d %d %.2f%% %.3fs\n" %
115 (unclassified, misclassified,
116 (misclassified * 100.0 / unclassified),
119 total_unclassified += unclassified
120 total_misclassified += misclassified
121 total_time += end - start
126 filename = os.path.join (folder,
"output", name +
'.png')
127 pdb.gimp_file_save (mask, mask_layer, filename, filename)
134 gimp.delete (image_display)
135 gimp.delete (mask_display)
136 except UnboundLocalError:
139 sys.stderr.write (
"Total: %d %d %.2f%% %.3fs\n" %
140 (total_unclassified, total_misclassified,
141 (total_misclassified * 100.0 / total_unclassified),
145 if image.base_type != GRAY:
146 pdb.gimp_image_convert_grayscale (image)
150 (mean, std_dev, median, pixels,
151 count, percentile) = pdb.gimp_histogram (mask, HISTOGRAM_VALUE, 1, 254)
159 copy = pdb.gimp_layer_new_from_drawable (mask, image)
160 copy.name =
"Difference"
161 copy.mode = DIFFERENCE_MODE
163 image.insert_layer (copy)
175 (mean, std_dev, median, pixels,
176 count, percentile) = pdb.gimp_histogram (image.flatten (),
177 HISTOGRAM_VALUE, 255, 255)
183 "python-fu-benchmark-foreground-extract",
184 "Benchmark and regression test for the SIOX algorithm",
189 "Foreground Extraction",
191 [ (PF_FILE,
"image-folder",
"Image folder",
192 "~/segmentation/msbench/imagedata"),
193 (PF_TOGGLE,
"save-output",
"Save output images",
False) ],
195 benchmark, menu=
"<Image>/Filters/Extensions/Benchmark")