Option Explicit

Dim Iters
Dim FilterNum
Dim StdDev

Const mxErosionKF = 9
Const mxUserKF = 10
Const mxGaussianBlur = 11

Dim mxapp	' the MaximDL application object
Dim ImageNum

''''''''''''
'Const imagename = "C:\d\sxv\05-06-26\m16HaRGB.tif"
'Dim imagename
'imagename=inputbox("Image name: ")
Iters=CInt(inputbox("How many iterations? "))
FilterNum=CInt(inputbox("Which convolution filter? "))
StdDev=CDbl(inputbox("Standard Deviation of Background: "))
''''''''''''''

Dim image
Dim numerator
Dim denominator
Dim result
Dim image_high_vals
Dim image_low_vals
Dim background


Set mxapp = CreateObject("Maxim.Application")

Set image = mxapp.CurrentDocument

Set background = image.Duplicate
background.DisplayName = "Background"
background.KernelFilter mxErosionKF, 7   ' 7x7 erosion
background.KernelFilter mxGaussianBlur, 3  ' Gaussian blur 3 pixel radius
background.AddConstant(5*StdDev)

Set image_high_vals = image.Duplicate
image_high_vals.DisplayName = "Image high_vals"
image_high_vals.Subtract(background)

Set image_low_vals = image_high_vals.Duplicate
image_low_vals.DisplayName = "Image low_vals"
image_low_vals.Add(background)
image_low_vals.Subtract(image)

Set result = image_high_vals.Duplicate
result.DisplayName = "Deconvolved " + image.DisplayName
image.DoNotClose = TRUE
result.DoNotClose = TRUE

for ImageNum=1 to Iters
	Set numerator = image_high_vals.Duplicate
	Set denominator = result.Duplicate
	numerator.DisplayName = "Numerator"
	denominator.DisplayName = "Denominator"
	denominator.KernelFilter mxUserKF,  FilterNum 
	numerator.Divide(denominator)
	numerator.KernelFilter mxUserKF,  FilterNum
	result.Multiply(numerator)
	numerator.Close
	denominator.Close
next

result.Add(background)
result.Subtract(image_low_vals)

image_low_vals.Close
image_high_vals.Close
background.Close
