Option Explicit
Dim Iters
Dim FWHM
Dim StdDev
Dim nKern
Dim i
Dim ie
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? "))
FWHM=CDbl(inputbox("FWHM? "))
StdDev=CDbl(inputbox("Standard Deviation of Background: "))
''''''''''''''
'nKern = int((fwhm-2.184)/0.21)
nKern = int(fwhm*fwhm/1.8548)
Dim image
Dim numerator
Dim denominator
Dim result
Dim image_high_vals
Dim image_low_vals
Dim background
Set mxapp = CreateObject("Maxim.Application")
Call CreateIE()
ie.Document.WriteLn "
" + WScript.Scriptname + ""
Set image = mxapp.CurrentDocument
ie.Document.WriteLn "Processing " & image.DisplayName &"...
"
ie.Document.Write "Create image duplicate 'Background'..."
Set background = image.Duplicate
background.DisplayName = "Background"
ie.Document.WriteLn " Blur background..."
background.KernelFilter mxErosionKF, 7 ' 7x7 erosion
background.KernelFilter mxGaussianBlur, 3 ' Gaussian blur 3 pixel radius
background.AddConstant(5*StdDev)
ie.Document.WriteLn "done.
"
ie.Document.Write "Create image duplicate 'Image high_vals'..."
Set image_high_vals = image.Duplicate
image_high_vals.DisplayName = "Image high_vals"
image_high_vals.Subtract(background)
ie.Document.WriteLn "done.
"
ie.Document.Write "Create image duplicate 'Image low_vals'..."
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)
ie.Document.WriteLn "done.
"
ie.Document.Write "Create result image 'Deconvolved " + image.DisplayName + "'..."
Set result = image_high_vals.Duplicate
result.DisplayName = "Deconvolved " + image.DisplayName
image.DoNotClose = TRUE
result.DoNotClose = TRUE
ie.Document.WriteLn "done.
"
for ImageNum=1 to Iters
ie.Document.Write "Iteration " + CStr(ImageNum) + " of " + CStr(Iters) + "..."
Set numerator = image_high_vals.Duplicate
Set denominator = result.Duplicate
numerator.DisplayName = "Numerator"
denominator.DisplayName = "Denominator"
for i=1 to nKern
denominator.KernelFilter mxUserKF, 12
next
numerator.Divide(denominator)
for i=1 to nKern
numerator.KernelFilter mxUserKF, 12
next
result.Multiply(numerator)
numerator.Close
denominator.Close
ie.Document.WriteLn "done.
"
next
ie.Document.Write "Finalise the result..."
result.Add(background)
result.Subtract(image_low_vals)
image_low_vals.Close
image_high_vals.Close
background.Close
ie.Document.WriteLn "done.
"
Dim flag
flag = result.SetFITSKey("HISTORY", "Richardson-Lucy/Vanderbei. Iters="+CStr(Iters)+", FWHM="+CStr(fwhm)+", nKern="+CStr(nKern)+", StdDev="+CStr(StdDev))
ie.Document.WriteLn "
Script finished - you can close this window now!"
Sub CreateIE()
Set ie = WScript.CreateObject("InternetExplorer.Application")
Do while ie.Busy
' wait for page to load
Loop
ie.navigate "About:Blank"
ie.height=370
ie.width=500
ie.menubar=0
ie.toolbar=0
ie.statusbar=0
ie.addressbar=0
ie.silent=1
ie.visible=1
End Sub