diff options
Diffstat (limited to 'test/lua/multimorpho.lua')
-rw-r--r-- | test/lua/multimorpho.lua | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/test/lua/multimorpho.lua b/test/lua/multimorpho.lua new file mode 100644 index 0000000..be612c6 --- /dev/null +++ b/test/lua/multimorpho.lua @@ -0,0 +1,103 @@ +-- multi-step morphological opening on a binarized image, with increasing structuring element (Se) size: +-- step 1 - 3x3 Se +-- step 2 - 5x5 Se +-- step 3 - 7x7 Se +-- Step n - (2n+1)x (2n+1) Se +-- after each step, a count of the objects (white items) in the opened image has to be performed, +-- and the number of counted items to be saved in a .txt file for easy and fast exporting to excel + +require"imlua" +require"imlua_process" + +err_msg = { + "No error.", + "Error while opening the file.", + "Error while accessing the file.", + "Invalid or unrecognized file format.", + "Invalid or unsupported data.", + "Invalid or unsupported compression.", + "Insuficient memory", + "Interrupted by the counter", +} + +colorspace_str = { + "RGB", + "MAP", + "GRAY", + "BINARY", + "CMYK", + "YCBCR", + "LAB", + "LUV", + "XYZ" +} + +num_step = arg[1] +file_name1 = arg[2] +if (not num_step or not file_name1) then + print("Must have the number of steps and a file name as parameters.") + print(" Can have more than one file name as parameters and can use wildcards.") + print(" Usage:") + print(" lua multimorpho.lua num_step filename1 filename2 ...") + return +end + +print(">>> Multi-step Morphological Opening <<<") +print("Number of Steps: "..num_step) +print("") + +function ProcessImageFile(file_name, num_step) + print("Loading File: "..file_name) + image, err = im.FileImageLoad(file_name); + + if (err and err ~= im.ERR_NONE) then + error(err_msg[err+1]) + end + + if (image:ColorSpace() ~= im.BINARY) then + error("Invalid Image Color Space. Must be a Binary image [Color Space="..colorspace_str[image:ColorSpace()+1].."].") + end + + file_name = file_name..".csv" + print("Saving Log File: "..file_name) + log = io.open(file_name, "w") + + morph_image = image:Clone() + obj_image = im.ImageCreateBased(image, nil, nil, im.GRAY, im.USHORT) + + for step = 1, num_step do + kernel_size = 2*step+1 + print(" Binary Morphology Open [Kernel Size="..kernel_size.."x"..kernel_size.."].") + im.ProcessBinMorphOpen(image, morph_image, kernel_size, 1) -- 1 interaction + + num_obj = im.AnalyzeFindRegions(morph_image, obj_image, 4, false) -- 4 connected, ignore objects that touch the border + print(" Objects Found: "..num_obj) + log:write(kernel_size..";"..num_obj.."\n") + + if (num_obj == 0) then + step = num_step + end + + obj_image:Clear() + morph_image:Clear() + end + + log:close() + obj_image:Destroy() + morph_image:Destroy() + image:Destroy() + print("Done File.") + print("") +end + +file_count = 0 +for index,value in ipairs(arg) do + if (index > 1) then + ProcessImageFile(arg[index], num_step) + file_count = file_count + 1 + end +end + +if (file_count > 1) then + print("Processed "..file_count.." Files.") +end |