started adding pymorph library
git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@183 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
@ -23,6 +23,7 @@ from sextante.lastools.LasToolsAlgorithmProvider import LasToolsAlgorithmProvide
|
||||
from sextante.core.SextanteUtils import SextanteUtils
|
||||
from sextante.algs.SextanteAlgorithmProvider import SextanteAlgorithmProvider
|
||||
from sextante.fusion.FusionAlgorithmProvider import FusionAlgorithmProvider
|
||||
from sextante.pymorph.PymorphAlgorithmProvider import PymorphAlgorithmProvider
|
||||
|
||||
class Sextante:
|
||||
|
||||
@ -86,6 +87,7 @@ class Sextante:
|
||||
Sextante.addProvider(FToolsAlgorithmProvider())
|
||||
Sextante.addProvider(ModelerOnlyAlgorithmProvider())
|
||||
Sextante.addProvider(GdalAlgorithmProvider())
|
||||
Sextante.addProvider(PymorphAlgorithmProvider())
|
||||
Sextante.addProvider(LasToolsAlgorithmProvider())
|
||||
if SextanteUtils.isWindows():
|
||||
Sextante.addProvider(FusionAlgorithmProvider())
|
||||
|
@ -2,9 +2,9 @@ import os
|
||||
from sextante.parameters.ParameterFile import ParameterFile
|
||||
from sextante.fusion.FusionUtils import FusionUtils
|
||||
from sextante.parameters.ParameterNumber import ParameterNumber
|
||||
from sextante.outputs.OutputRaster import OutputRaster
|
||||
from sextante.parameters.ParameterSelection import ParameterSelection
|
||||
from sextante.fusion.FusionAlgorithm import FusionAlgorithm
|
||||
from sextante.outputs.OutputFile import OutputFile
|
||||
|
||||
class GridSurfaceCreate(FusionAlgorithm):
|
||||
|
||||
@ -22,7 +22,7 @@ class GridSurfaceCreate(FusionAlgorithm):
|
||||
self.addParameter(ParameterNumber(self.CELLSIZE, "Cellsize", 0, None, 10.0))
|
||||
self.addParameter(ParameterSelection(self.XYUNITS, "XY Units", self.UNITS))
|
||||
self.addParameter(ParameterSelection(self.ZUNITS, "Z Units", self.UNITS))
|
||||
self.addOutput(OutputRaster(self.OUTPUT, "PLANS DTM surface"))
|
||||
self.addOutput(OutputFile(self.OUTPUT, "PLANS DTM surface"))
|
||||
self.addAdvancedModifiers()
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
|
@ -57,10 +57,11 @@ class GdalUtils():
|
||||
|
||||
@staticmethod
|
||||
def getSupportedRasterExtensions():
|
||||
allexts = []
|
||||
allexts = ["tif"]
|
||||
for exts in GdalUtils.getSupportedRasters().values():
|
||||
for ext in exts:
|
||||
allexts.append(ext)
|
||||
if ext not in allexts:
|
||||
allexts.append(ext)
|
||||
return allexts
|
||||
|
||||
@staticmethod
|
||||
|
@ -53,6 +53,7 @@ class ModelerGraphicItem(QtGui.QGraphicsItem):
|
||||
if not self.model.activateAlgorithm(self.elementIndex, True):
|
||||
QtGui.QMessageBox.warning(None, "Could not activate Algorithm",
|
||||
"The selected algorithm depends on other currently non-active algorithms.\nActivate them them before trying to activate it.")
|
||||
|
||||
def removeElement(self):
|
||||
if isinstance(self.element, Parameter):
|
||||
if not self.model.removeParameter(self.elementIndex):
|
||||
|
15
src/sextante/pymorph/AlgNames.py
Normal file
@ -0,0 +1,15 @@
|
||||
import os
|
||||
class AlgNames():
|
||||
|
||||
names = {}
|
||||
|
||||
@staticmethod
|
||||
def getName(shortname):
|
||||
if not AlgNames.names:
|
||||
f = open(os.path.dirname(__file__) + "/algnames.txt")
|
||||
lines = f.readlines()
|
||||
for line in lines:
|
||||
tokens = line.split(":")
|
||||
AlgNames.names[tokens[0].strip()] = tokens[1].strip()
|
||||
f.close()
|
||||
return AlgNames.names[shortname]
|
47
src/sextante/pymorph/PymorphAlgorithm.py
Normal file
@ -0,0 +1,47 @@
|
||||
from sextante.script.ScriptAlgorithm import ScriptAlgorithm
|
||||
from sextante.parameters.ParameterRaster import ParameterRaster
|
||||
from sextante.outputs.OutputRaster import OutputRaster
|
||||
from sextante.core.GeoAlgorithm import GeoAlgorithm
|
||||
from sextante.pymorph.AlgNames import AlgNames
|
||||
import os
|
||||
|
||||
class PymorphAlgorithm(ScriptAlgorithm):
|
||||
|
||||
LOAD_LAYER_SCRIPT = "from sextante.gdal.GdalUtils import GdalUtils\n" \
|
||||
+"from sextante.pymorph.mmorph import datatype\n" \
|
||||
+"gdal_datatypes={'binary':'Byte','uint8':'Byte','uint16':'UInt16','int32':'Int32'}\n" \
|
||||
+ "try:\n" \
|
||||
+ "\tfrom osgeo import gdal\n" \
|
||||
+ "except ImportError:\n" \
|
||||
+ "\timport gdal\n" \
|
||||
+ "gdal.AllRegister()\n" \
|
||||
+ "img = gdal.Open(input_filename)\n"\
|
||||
+ "input_array = img.ReadAsArray()\n"
|
||||
|
||||
SAVE_LAYER_SCRIPT = "\ndrv = gdal.GetDriverByName(GdalUtils.getFormatShortNameFromFilename(output_filename))\n" \
|
||||
+ "out = drv.Create(output_filename, img.RasterXSize, img.RasterYSize, 1, gdal.GetDataTypeByName(gdal_datatypes[datatype(output_array)]))\n"\
|
||||
+ "out.SetGeoTransform( img.GetGeoTransform())\n"\
|
||||
+ "out.SetProjection( img.GetProjectionRef())\n"\
|
||||
+ "out.GetRasterBand(1).WriteArray(output_array)"
|
||||
|
||||
def getCopy(self):
|
||||
newone = PymorphAlgorithm(self.descriptionFile)
|
||||
newone.provider = self.provider
|
||||
return newone
|
||||
|
||||
def getIcon(self):
|
||||
return GeoAlgorithm.getIcon(self)
|
||||
|
||||
def defineCharacteristicsFromFile(self):
|
||||
ScriptAlgorithm.defineCharacteristicsFromFile(self)
|
||||
self.parameters.insert(0, ParameterRaster("input_filename", "Input image", False))
|
||||
self.outputs.append(OutputRaster("output_filename", "Output image"))
|
||||
self.script = self.LOAD_LAYER_SCRIPT + self.script + self.SAVE_LAYER_SCRIPT
|
||||
self.name = AlgNames.getName(self.name)
|
||||
|
||||
def helpFile(self):
|
||||
command = os.path.basename(self.descriptionFile)
|
||||
command = command[:command.rfind(".")].replace("_", "")
|
||||
filename = os.path.dirname(__file__) + "/html/morph/morph/mm" + command + ".html"
|
||||
return filename
|
||||
|
43
src/sextante/pymorph/PymorphAlgorithmProvider.py
Normal file
@ -0,0 +1,43 @@
|
||||
import os
|
||||
from PyQt4.QtCore import *
|
||||
from PyQt4.QtGui import *
|
||||
from sextante.core.AlgorithmProvider import AlgorithmProvider
|
||||
from sextante.script.WrongScriptException import WrongScriptException
|
||||
from sextante.core.SextanteLog import SextanteLog
|
||||
from sextante.gdal.GdalUtils import GdalUtils
|
||||
from sextante.pymorph.PymorphAlgorithm import PymorphAlgorithm
|
||||
|
||||
class PymorphAlgorithmProvider(AlgorithmProvider):
|
||||
|
||||
def __init__(self):
|
||||
AlgorithmProvider.__init__(self)
|
||||
#self.readAlgNames()
|
||||
self.createAlgsList()
|
||||
|
||||
def scriptsFolder(self):
|
||||
return os.path.dirname(__file__) + "/scripts"
|
||||
|
||||
def getDescription(self):
|
||||
return "Pymorph (Morphological image processing tools)"
|
||||
|
||||
def getName(self):
|
||||
return "pymorph"
|
||||
|
||||
def _loadAlgorithms(self):
|
||||
self.algs = self.preloadedAlgs
|
||||
|
||||
def createAlgsList(self):
|
||||
self.preloadedAlgs = []
|
||||
folder = self.scriptsFolder()
|
||||
for descriptionFile in os.listdir(folder):
|
||||
if descriptionFile.endswith("py"):
|
||||
try:
|
||||
fullpath = os.path.join(self.scriptsFolder(), descriptionFile)
|
||||
alg = PymorphAlgorithm(fullpath)
|
||||
alg.group = "Algorithms"
|
||||
self.preloadedAlgs.append(alg)
|
||||
except WrongScriptException,e:
|
||||
SextanteLog.addToLog(SextanteLog.LOG_ERROR,e.msg)
|
||||
|
||||
def getSupportedOutputRasterLayerExtensions(self):
|
||||
return GdalUtils.getSupportedRasterExtensions()
|
8
src/sextante/pymorph/__init__.py
Normal file
@ -0,0 +1,8 @@
|
||||
import mmorph
|
||||
import text
|
||||
from mmorph import *
|
||||
from text import *
|
||||
from pymorph_version import __version__
|
||||
|
||||
__doc__ = mmorph.__doc__
|
||||
__all__ = mmorph.__all__ + ['text']
|
66
src/sextante/pymorph/algnames.txt
Normal file
@ -0,0 +1,66 @@
|
||||
add4dilate : Addition for dilation
|
||||
addm : Addition of two images, with saturation.
|
||||
areaclose : Area closing
|
||||
areaopen : Area opening
|
||||
asf : Alternating Sequential Filtering
|
||||
asfrec : Reconstructive Alternating Sequential Filtering
|
||||
binary : Convert a gray-scale image into a binary image
|
||||
cbisector : N-Conditional bisector.
|
||||
cdilate : Dilate an image conditionally.
|
||||
center : Center filter.
|
||||
cerode : Erode an image conditionally.
|
||||
closeholes : Close holes of binary and gray-scale images.
|
||||
close : Morphological closing.
|
||||
closerec : Closing by reconstruction.
|
||||
closerecth : Close-by-Reconstruction Top-Hat.
|
||||
closeth : Closing Top Hat.
|
||||
cthick : Image transformation by conditional thickening.
|
||||
cthin : Image transformation by conditional thinning.
|
||||
cwatershed : Detection of watershed from markers.
|
||||
datatype : Return the image datatype string
|
||||
dilate : Dilate an image by a structuring element.
|
||||
dist : Distance transform.
|
||||
endpoints : Interval to detect end-points.
|
||||
erode : Erode an image by a structuring element.
|
||||
flood : Flooding filter- h,v,a-basin and dynamics (depth, area, volume)
|
||||
gdist : Geodesic Distance Transform.
|
||||
gradm : Morphological gradient.
|
||||
hmax : Remove peaks with contrast less than h.
|
||||
hmin : Remove basins with contrast less than h.
|
||||
homothick : Interval for homotopic thickening.
|
||||
homothin : Interval for homotopic thinning.
|
||||
infcanon : Intersection of inf-generating operators.
|
||||
infgen : Inf-generating.
|
||||
infrec : Inf-reconstruction.
|
||||
inpos : Minima imposition.
|
||||
interot : Rotate an interval
|
||||
intersec : Intersection of images.
|
||||
isolines : Apply an iso-line color table to a gray-scale image.
|
||||
label : Label a binary image.
|
||||
labelflat : Label the flat zones of gray-scale images.
|
||||
lastero : Last erosion.
|
||||
neg : Negate an image.
|
||||
open : Morphological opening.
|
||||
openrec : Opening by reconstruction.
|
||||
openrecth : Open-by-Reconstruction Top-Hat.
|
||||
openth : Opening Top Hat.
|
||||
opentransf : Open transform.
|
||||
patspec : Pattern spectrum (also known as granulometric size density).
|
||||
randomcolor : Apply a random color table to a gray-scale image.
|
||||
regmax : Regional Maximum.
|
||||
regmin : Regional Minimum (with generalized dynamics).
|
||||
skelm : Morphological skeleton (Medial Axis Transform).
|
||||
skelmrec : Morphological skeleton reconstruction (Inverse Medial Axis Transform).
|
||||
skiz : Skeleton of Influence Zone - also know as Generalized Voronoi Diagram
|
||||
subm : Subtraction of two images, with saturation.
|
||||
supcanon : Union of sup-generating or hit-miss operators.
|
||||
supgen : Sup-generating (hit-miss).
|
||||
suprec : Sup-reconstruction.
|
||||
symdiff : Symmetric difference between two images
|
||||
text : Create a binary image of a text.
|
||||
thick : Image transformation by thickening.
|
||||
thin : Image transformation by thinning.
|
||||
threshad : Threshold (adaptive)
|
||||
toggle : Image contrast enhancement or classification by the toggle operator.
|
||||
union : Union of images.
|
||||
watershed : Watershed detection.
|
678
src/sextante/pymorph/compat.py
Normal file
@ -0,0 +1,678 @@
|
||||
import warnings
|
||||
warnings.warn('pymorph.compat should be replaced with pymorph', DeprecationWarning)
|
||||
|
||||
from notimplemented import *
|
||||
from mmorph import *
|
||||
from text import *
|
||||
|
||||
# old abbreviations:
|
||||
|
||||
clohole=close_holes
|
||||
ero=erode
|
||||
cero=cerode
|
||||
dil=dilate
|
||||
cdil=cdilate
|
||||
sedil=sedilate
|
||||
add4dil=add4dilate
|
||||
uint8=to_uint8
|
||||
uint16=to_uint16
|
||||
int32=to_int32
|
||||
glblshow=randomcolor
|
||||
randomcolour=randomcolor
|
||||
|
||||
# mmnames:
|
||||
|
||||
def _not_implemented(msg):
|
||||
def f(*args, **kwargs):
|
||||
raise NotImplementedError, msg
|
||||
f.__doc__ = '''\
|
||||
This function is not implemented anymore.
|
||||
|
||||
%s''' % msg
|
||||
return f
|
||||
|
||||
mmadd4dil=add4dil
|
||||
mmaddm=addm
|
||||
mmareaclose=areaclose
|
||||
mmareaopen=areaopen
|
||||
mmasf=asf
|
||||
mmasfrec=asfrec
|
||||
mmbinary=binary
|
||||
mmblob=blob
|
||||
mmbshow=bshow
|
||||
mmcbisector=cbisector
|
||||
mmcdil=cdil
|
||||
mmcenter=center
|
||||
mmcero=cero
|
||||
mmclohole=clohole
|
||||
mmclose=close
|
||||
mmcloserec=closerec
|
||||
mmcloserecth=closerecth
|
||||
mmcloseth=closeth
|
||||
mmconcat=concat
|
||||
mmcthick=cthick
|
||||
mmcthin=cthin
|
||||
mmcwatershed=cwatershed
|
||||
mmdatatype=datatype
|
||||
mmdil=dil
|
||||
mmdist=dist
|
||||
mmdrawv=drawv
|
||||
mmdtshow=_not_implemented('dtshow: use matplotlib')
|
||||
mmedgeoff=edgeoff
|
||||
mmero=ero
|
||||
mmflood=flood
|
||||
mmframe=frame
|
||||
mmgdist=gdist
|
||||
mmgdtshow=_not_implemented('gdtshow: use matplotlib')
|
||||
mmgradm=gradm
|
||||
mmgrain=grain
|
||||
mmgray=gray
|
||||
mmhistogram=histogram
|
||||
mmhmax=hmax
|
||||
mmhmin=hmin
|
||||
mmhomothick=homothick
|
||||
mmhomothin=homothin
|
||||
mmimg2se=img2se
|
||||
mminfcanon=infcanon
|
||||
mminfgen=infgen
|
||||
mminfrec=infrec
|
||||
mminpos=inpos
|
||||
mminterot=interot
|
||||
mmintersec=intersec
|
||||
mmintershow=intershow
|
||||
mmisbinary=isbinary
|
||||
mmisequal=isequal
|
||||
mmlabel=label
|
||||
mmlabelflat=labelflat
|
||||
mmlastero=lastero
|
||||
mmlblshow=_not_implemented('lblshow: use matplotlib')
|
||||
mmlimits=limits
|
||||
mmmat2set=mat2set
|
||||
mmmaxleveltype=maxleveltype
|
||||
mmneg=neg
|
||||
mmopen=open
|
||||
mmopenrec=openrec
|
||||
mmopenrecth=openrecth
|
||||
mmopenth=openth
|
||||
mmopentransf=opentransf
|
||||
mmpad4n=pad4n
|
||||
mmpatspec=patspec
|
||||
mmreadgray=_not_implemented('readgray: use PIL or readmagick')
|
||||
mmregmax=regmax
|
||||
mmregmin=regmin
|
||||
mmse2hmt=se2hmt
|
||||
mmse2interval=se2interval
|
||||
mmsebox=sebox
|
||||
mmsecross=secross
|
||||
mmsedil=sedil
|
||||
mmsedisk=sedisk
|
||||
mmseline=seline
|
||||
mmsereflect=sereflect
|
||||
mmserot=serot
|
||||
mmseshow=seshow
|
||||
mmsesum=sesum
|
||||
mmset2mat=set2mat
|
||||
mmsetrans=setrans
|
||||
mmseunion=seunion
|
||||
mmskelm=skelm
|
||||
mmskelmrec=skelmrec
|
||||
mmskiz=skiz
|
||||
mmsubm=subm
|
||||
mmsupcanon=supcanon
|
||||
mmsupgen=supgen
|
||||
mmsuprec=suprec
|
||||
mmswatershed=swatershed
|
||||
mmsymdif=symdiff
|
||||
mmtext=text
|
||||
mmthick=thick
|
||||
mmthin=thin
|
||||
mmthreshad=threshad
|
||||
mmtoggle=toggle
|
||||
mmunion=union
|
||||
mmvmax=vmax
|
||||
mmwatershed=watershed
|
||||
|
||||
gshow=overlay
|
||||
gdtshow=isolines
|
||||
|
||||
# Functions which were removed:
|
||||
|
||||
def mminstall(*args):
|
||||
pass
|
||||
def mmversion(*args):
|
||||
pass
|
||||
def mmregister(*args):
|
||||
pass
|
||||
|
||||
|
||||
def mmcmp(f1, oper, f2, oper1=None, f3=None):
|
||||
"""
|
||||
- Alternative:
|
||||
Consider using array operations directly, i.e., instead of
|
||||
mmcmp(f1, '>', f2)
|
||||
simply use
|
||||
f1 > f2
|
||||
- Purpose
|
||||
Compare two images pixelwisely.
|
||||
- Synopsis
|
||||
y = mmcmp(f1, oper, f2, oper1=None, f3=None)
|
||||
- Input
|
||||
f1: Gray-scale (uint8 or uint16) or binary image.
|
||||
oper: String Default: "". relationship from: '==', '~=',
|
||||
'<','<=', '>', '>='.
|
||||
f2: Gray-scale (uint8 or uint16) or binary image.
|
||||
oper1: String Default: None. relationship from: '==', '~=',
|
||||
'<','<=', '>', '>='.
|
||||
f3: Gray-scale (uint8 or uint16) or binary image. Default:
|
||||
None.
|
||||
- Output
|
||||
y: Binary image.
|
||||
- Description
|
||||
Apply the relation oper to each pixel of images f1 and f2 , the
|
||||
result is a binary image with the same size. Optionally, it is
|
||||
possible to make the comparison among three image. It is
|
||||
possible to use a constant value in place of any image, in this
|
||||
case the constant is treated as an image of the same size as the
|
||||
others with all pixels with the value of the constant.
|
||||
- Examples
|
||||
#
|
||||
# example 1
|
||||
#
|
||||
print cmp(to_uint8([1, 2, 3]),'<', to_uint8(2))
|
||||
print cmp(to_uint8([1, 2, 3]),'<', to_uint8([0, 2, 4]))
|
||||
print cmp(to_uint8([1, 2, 3]),'==', to_uint8([1, 1, 3]))
|
||||
#
|
||||
# example 2
|
||||
#
|
||||
f=readgray('keyb.tif')
|
||||
fbin=cmp(to_uint8(10), '<', f, '<', to_uint8(50))
|
||||
show(f)
|
||||
show(fbin)
|
||||
"""
|
||||
|
||||
if oper == '==': y = (f1==f2)
|
||||
elif oper == '~=': y = (f1!=f2)
|
||||
elif oper == '<=': y = (f1<=f2)
|
||||
elif oper == '>=': y = (f1>=f2)
|
||||
elif oper == '>': y = (f1> f2)
|
||||
elif oper == '<': y = (f1< f2)
|
||||
else:
|
||||
assert 0, 'oper must be one of: ==, ~=, >, >=, <, <=, it was:'+oper
|
||||
if oper1 != None:
|
||||
if oper1 == '==': y = intersec(y, f2==f3)
|
||||
elif oper1 == '~=': y = intersec(y, f2!=f3)
|
||||
elif oper1 == '<=': y = intersec(y, f2<=f3)
|
||||
elif oper1 == '>=': y = intersec(y, f2>=f3)
|
||||
elif oper1 == '>': y = intersec(y, f2> f3)
|
||||
elif oper1 == '<': y = intersec(y, f2< f3)
|
||||
else:
|
||||
assert 0, 'oper1 must be one of: ==, ~=, >, >=, <, <=, it was:'+oper1
|
||||
|
||||
y = binary(y)
|
||||
return y
|
||||
|
||||
|
||||
def mmvdome(f, v=1, Bc=None):
|
||||
"""
|
||||
- Purpose
|
||||
Obsolete, use vmax.
|
||||
- Synopsis
|
||||
y = mmvdome(f, v=1, Bc=None)
|
||||
- Input
|
||||
f: Gray-scale (uint8 or uint16) image.
|
||||
v: Default: 1. Volume parameter.
|
||||
Bc: Structuring Element Default: None (3x3 elementary cross).
|
||||
Structuring element (connectivity).
|
||||
- Output
|
||||
y: Gray-scale (uint8 or uint16) or binary image.
|
||||
- Description
|
||||
The correct name for this operator mmvdome is vmax.
|
||||
|
||||
"""
|
||||
|
||||
if Bc is None: Bc = secross()
|
||||
y = hmax(f,v,Bc);
|
||||
return y
|
||||
|
||||
def mmis(f1, oper, f2=None, oper1=None, f3=None):
|
||||
"""
|
||||
- Alternative
|
||||
Consider using array operations or isbinary()
|
||||
- Purpose
|
||||
Verify if a relationship among images is true or false.
|
||||
- Synopsis
|
||||
y = mmis(f1, oper, f2=None, oper1=None, f3=None)
|
||||
- Input
|
||||
f1: Gray-scale (uint8 or uint16) or binary image.
|
||||
oper: String relationship from: '==', '~=', '<','<=', '>',
|
||||
'>=', 'binary', 'gray'.
|
||||
f2: Gray-scale (uint8 or uint16) or binary image. Default:
|
||||
None.
|
||||
oper1: String Default: None. relationship from: '==', '~=',
|
||||
'<','<=', '>', '>='.
|
||||
f3: Gray-scale (uint8 or uint16) or binary image. Default:
|
||||
None.
|
||||
- Output
|
||||
y: Bool value: 0 or 1
|
||||
- Description
|
||||
Verify if the property or relatioship between images is true or
|
||||
false. The result is true if the relationship is true for all
|
||||
the pixels in the image, and false otherwise. (Obs: This
|
||||
function replaces is equal, is lesseq, is binary ).
|
||||
- Examples
|
||||
#
|
||||
fbin=binary([0, 1])
|
||||
f1=to_uint8([1, 2, 3])
|
||||
f2=to_uint8([2, 2, 3])
|
||||
f3=to_uint8([2, 3, 4])
|
||||
mmis(fbin,'binary')
|
||||
mmis(f1,'gray')
|
||||
mmis(f1,'==',f2)
|
||||
mmis(f1,'<',f3)
|
||||
mmis(f1,'<=',f2)
|
||||
mmis(f1,'<=',f2,'<=',f3)
|
||||
"""
|
||||
from string import upper
|
||||
|
||||
if f2 == None:
|
||||
oper=upper(oper);
|
||||
if oper == 'BINARY': return isbinary(f1)
|
||||
elif oper == 'GRAY' : return not isbinary(f1)
|
||||
else:
|
||||
assert 0,'oper should be BINARY or GRAY, was'+oper
|
||||
elif oper == '==': y = isequal(f1, f2)
|
||||
elif oper == '~=': y = not isequal(f1,f2)
|
||||
elif oper == '<=': y = mmislesseq(f1,f2)
|
||||
elif oper == '>=': y = mmislesseq(f2,f1)
|
||||
elif oper == '>': y = isequal(neg(threshad(f2,f1)),binary(1))
|
||||
elif oper == '<': y = isequal(neg(threshad(f1,f2)),binary(1))
|
||||
else:
|
||||
assert 0,'oper must be one of: ==, ~=, >, >=, <, <=, it was:'+oper
|
||||
if oper1 != None:
|
||||
if oper1 == '==': y = y and isequal(f2,f3)
|
||||
elif oper1 == '~=': y = y and (not isequal(f2,f3))
|
||||
elif oper1 == '<=': y = y and mmislesseq(f2,f3)
|
||||
elif oper1 == '>=': y = y and mmislesseq(f3,f2)
|
||||
elif oper1 == '>': y = y and isequal(neg(threshad(f3,f2)),binary(1))
|
||||
elif oper1 == '<': y = y and isequal(neg(threshad(f2,f3)),binary(1))
|
||||
else:
|
||||
assert 0,'oper1 must be one of: ==, ~=, >, >=, <, <=, it was:'+oper1
|
||||
return y
|
||||
|
||||
|
||||
def mmislesseq(f1, f2, MSG=None):
|
||||
"""
|
||||
- Alternative
|
||||
Consider using f1 <= f2
|
||||
- Purpose
|
||||
Verify if one image is less or equal another (is beneath)
|
||||
- Synopsis
|
||||
bool = mmislesseq(f1, f2)
|
||||
- Input
|
||||
f1: Gray-scale (uint8 or uint16) or binary image.
|
||||
f2: Gray-scale (uint8 or uint16) or binary image.
|
||||
- Output
|
||||
bool: Boolean
|
||||
- Description
|
||||
mmislesseq compares the images f1 and f2 and returns true (1),
|
||||
if f1(x) <= f2(x) , for every pixel x, and false (0), otherwise.
|
||||
- Examples
|
||||
#
|
||||
f1 = to_uint8([0, 1, 2, 3])
|
||||
f2 = to_uint8([9, 5, 3, 3])
|
||||
print mmislesseq(f1,f2)
|
||||
print mmislesseq(f2,f1)
|
||||
print mmislesseq(f1,f1)
|
||||
"""
|
||||
from numpy import ravel
|
||||
|
||||
bool = min(ravel(f1<=f2))
|
||||
return bool
|
||||
|
||||
def mmstats(f, measurement):
|
||||
"""
|
||||
- Purpose
|
||||
Find global image statistics.
|
||||
- Synopsis
|
||||
y = mmstats(f, measurement)
|
||||
- Input
|
||||
f:
|
||||
measurement: String Default: "". Choose the measure to compute:
|
||||
'max', 'min', 'median', 'mean', 'sum', 'std',
|
||||
'std1'.
|
||||
- Output
|
||||
y:
|
||||
- Description
|
||||
Compute global image statistics: 'max' - maximum gray-scale
|
||||
value in image; 'min' - minimum gray-scale value in image; 'sum'
|
||||
- sum of all pixel values; 'median' - median value of all pixels
|
||||
in image; 'mean' - mean value of all pixels in image; 'std' -
|
||||
standard deviation of all pixels (normalized by N-1); 'std1' -
|
||||
idem, normalized by N.
|
||||
|
||||
"""
|
||||
from string import upper
|
||||
from numpy import ravel
|
||||
from numpy.oldnumeric.mlab import mean, median, std
|
||||
|
||||
measurement = upper(measurement)
|
||||
if measurement == 'MAX': return f.max()
|
||||
elif measurement == 'MIN': return f.min()
|
||||
elif measurement == 'MEAN': return f.mean()
|
||||
elif measurement == 'MEDIAN': return f.median()
|
||||
elif measurement == 'STD': return f.std()
|
||||
else:
|
||||
assert 0,'pymorph.compat.mmstats: Not a valid measurement'
|
||||
|
||||
def mmsurf(f,options = None):
|
||||
return f
|
||||
|
||||
_figs = [None]
|
||||
|
||||
def plot(plotitems=[], options=[], outfig=-1, filename=None):
|
||||
"""
|
||||
- Purpose
|
||||
Plot a function.
|
||||
- Synopsis
|
||||
fig = plot(plotitems=[], options=[], outfig=-1, filename=None)
|
||||
- Input
|
||||
plotitems: Default: []. List of plotitems.
|
||||
options: Default: []. List of options.
|
||||
outfig: Default: -1. Integer. Figure number. 0 creates a new
|
||||
figure.
|
||||
filename: Default: None. String. Name of the PNG output file.
|
||||
- Output
|
||||
fig: Figure number.
|
||||
|
||||
- Examples
|
||||
#
|
||||
import numpy
|
||||
#
|
||||
x = numpy.arange(0, 2*numpy.pi, 0.1)
|
||||
plot([[x]])
|
||||
y1 = numpy.sin(x)
|
||||
y2 = numpy.cos(x)
|
||||
opts = [['title', 'Example Plot'],\
|
||||
['grid'],\
|
||||
['style', 'linespoints'],\
|
||||
['xlabel', '"X values"'],\
|
||||
['ylabel', '"Y Values"']]
|
||||
y1_plt = [x, y1, None, 'sin(X)']
|
||||
y2_plt = [x, y2, 'lines', 'cos(X)']
|
||||
#
|
||||
# plotting two graphs using one step
|
||||
fig1 = plot([y1_plt, y2_plt], opts, 0)
|
||||
#
|
||||
# plotting the same graphs using two steps
|
||||
fig2 = plot([y1_plt], opts, 0)
|
||||
fig2 = plot([y2_plt], opts, fig2)
|
||||
#
|
||||
# first function has been lost, lets recover it
|
||||
opts.append(['replot'])
|
||||
fig2 = plot([y1_plt], opts, fig2)
|
||||
"""
|
||||
import Gnuplot
|
||||
import numpy
|
||||
|
||||
newfig = 0
|
||||
if (plotitems == 'reset'):
|
||||
_figs[0] = None
|
||||
_figs[1:] = []
|
||||
return 0
|
||||
if len(plotitems) == 0:
|
||||
# no plotitems specified: replot current figure
|
||||
if _figs[0]:
|
||||
outfig = _figs[0]
|
||||
g = _figs[outfig]
|
||||
g.replot()
|
||||
return outfig
|
||||
else:
|
||||
#assert 0, "plot error: There is no current figure\n"
|
||||
print "plot error: There is no current figure\n"
|
||||
return 0
|
||||
# figure to be plotted
|
||||
if ((outfig < 0) and _figs[0]):
|
||||
# current figure
|
||||
outfig = _figs[0]
|
||||
elif ( (outfig == 0) or ( (outfig == -1) and not _figs[0] ) ):
|
||||
# new figure
|
||||
newfig = 1
|
||||
outfig = len(_figs)
|
||||
elif outfig >= len(_figs):
|
||||
#assert 0, 'plot error: Figure ' + str(outfig) + 'does not exist\n'
|
||||
print 'plot error: Figure ' + str(outfig) + 'does not exist\n'
|
||||
return 0
|
||||
#current figure
|
||||
_figs[0] = outfig
|
||||
# Gnuplot pointer
|
||||
if newfig:
|
||||
if len(_figs) > 20:
|
||||
print '''plot error: could not create figure. Too many PlotItems in memory (20). Use
|
||||
plot('reset') to clear table'''
|
||||
return 0
|
||||
|
||||
g = Gnuplot.Gnuplot()
|
||||
_figs.append(g)
|
||||
else:
|
||||
g = _figs[outfig]
|
||||
|
||||
# options
|
||||
try:
|
||||
options.remove(['replot'])
|
||||
except:
|
||||
g.reset()
|
||||
try:
|
||||
#default style
|
||||
g('set data style lines')
|
||||
for option in options:
|
||||
if option[0] == 'grid':
|
||||
g('set grid')
|
||||
elif option[0] == 'title':
|
||||
g('set title "' + option[1] + '"')
|
||||
elif option[0] == 'xlabel':
|
||||
g('set xlabel ' + option[1])
|
||||
elif option[0] == 'ylabel':
|
||||
g('set ylabel ' + option[1])
|
||||
elif option[0] == 'style':
|
||||
g('set data style ' + option[1])
|
||||
else:
|
||||
print "plot warning: Unknown option: " + option[0]
|
||||
except:
|
||||
print "plot warning: Bad usage in options! Using default values. Please, use help.\n"
|
||||
# Plot items: item[0]=x, item[1]=y, item[2]=style
|
||||
for item in plotitems:
|
||||
try:
|
||||
title = None
|
||||
style = None
|
||||
x = numpy.ravel(item[0])
|
||||
if len(item) > 1:
|
||||
# y axis specified
|
||||
y = numpy.ravel(item[1])
|
||||
if len(item) > 2:
|
||||
# style specified
|
||||
style = item[2]
|
||||
if len(item) > 3:
|
||||
title = item[3]
|
||||
else:
|
||||
# no y axis specified
|
||||
y = x
|
||||
x = numpy.arange(len(y))
|
||||
g.replot(Gnuplot.Data(x, y, title=title, with_=style))
|
||||
except:
|
||||
g.reset()
|
||||
if newfig:
|
||||
_figs.pop()
|
||||
#assert 0, "plot error: Bad usage in plotitems! Impossible to plot graph. Please, use help.\n"
|
||||
print "plot error: Bad usage in plotitems! Impossible to plot graph. Please, use help.\n"
|
||||
return 0
|
||||
# PNG file
|
||||
if filename:
|
||||
g.hardcopy(filename, terminal='png', color=1)
|
||||
fig = outfig
|
||||
return fig
|
||||
mmplot=plot
|
||||
|
||||
|
||||
def mmwatershed(f,Bc=None,linereg='LINES'):
|
||||
return watershed(f,Bc,(linereg == 'LINES'))
|
||||
|
||||
def mmcwatershed(f,Bc=None,linereg='LINES'):
|
||||
return cwatershed(f,Bc,(linereg == 'LINES'))
|
||||
|
||||
def mmskiz(f,Bc=None,LINEREG='LINES',METRIC=None):
|
||||
return skiz(f,Bc,(LINEREG=='LINES'),METRIC)
|
||||
|
||||
def mmdist(f,Bc=None,METRIC=None):
|
||||
return dist(f,Bc,metric=METRIC)
|
||||
|
||||
def mmendpoints(OPTION='LOOP'):
|
||||
return endpoints(option=OPTION)
|
||||
|
||||
|
||||
|
||||
def mmgshow(X, X1=None, X2=None, X3=None, X4=None, X5=None, X6=None):
|
||||
"""
|
||||
- Purpose
|
||||
Apply binary overlays as color layers on a binary or gray-scale
|
||||
image
|
||||
- Synopsis
|
||||
Y = gshow(X, X1=None, X2=None, X3=None, X4=None, X5=None,
|
||||
X6=None)
|
||||
- Input
|
||||
X: Gray-scale (uint8 or uint16) or binary image.
|
||||
X1: Binary image. Default: None. Red overlay.
|
||||
X2: Binary image. Default: None. Green overlay.
|
||||
X3: Binary image. Default: None. Blue overlay.
|
||||
X4: Binary image. Default: None. Magenta overlay.
|
||||
X5: Binary image. Default: None. Yellow overlay.
|
||||
X6: Binary image. Default: None. Cyan overlay.
|
||||
- Output
|
||||
Y: Gray-scale (uint8 or uint16) or binary image.
|
||||
|
||||
"""
|
||||
|
||||
if isbinary(X): X = gray(X,'uint8')
|
||||
r = X
|
||||
g = X
|
||||
b = X
|
||||
if X1 is not None: # red 1 0 0
|
||||
assert isbinary(X1),'X1 must be binary overlay'
|
||||
x1 = gray(X1,'uint8')
|
||||
r = union(r,x1)
|
||||
g = intersec(g,neg(x1))
|
||||
b = intersec(b,neg(x1))
|
||||
if X2 is not None: # green 0 1 0
|
||||
assert isbinary(X2),'X2 must be binary overlay'
|
||||
x2 = gray(X2,'uint8')
|
||||
r = intersec(r,neg(x2))
|
||||
g = union(g,x2)
|
||||
b = intersec(b,neg(x2))
|
||||
if X3 is not None: # blue 0 0 1
|
||||
assert isbinary(X3),'X3 must be binary overlay'
|
||||
x3 = gray(X3,'uint8')
|
||||
r = intersec(r,neg(x3))
|
||||
g = intersec(g,neg(x3))
|
||||
b = union(b,x3)
|
||||
if X4 is not None: # magenta 1 0 1
|
||||
assert isbinary(X4),'X4 must be binary overlay'
|
||||
x4 = gray(X4,'uint8')
|
||||
r = union(r,x4)
|
||||
g = intersec(g,neg(x4))
|
||||
b = union(b,x4)
|
||||
if X5 is not None: # yellow 1 1 0
|
||||
assert isbinary(X5),'X5 must be binary overlay'
|
||||
x5 = gray(X5,'uint8')
|
||||
r = union(r,x5)
|
||||
g = union(g,x5)
|
||||
b = intersec(b,neg(x5))
|
||||
if X6 is not None: # cyan 0 1 1
|
||||
assert isbinary(X6),'X6 must be binary overlay'
|
||||
x6 = gray(X6,'uint8')
|
||||
r = intersec(r,neg(x6))
|
||||
g = union(g,x6)
|
||||
b = union(b,x6)
|
||||
return concat('d',r,g,b)
|
||||
|
||||
def mmglblshow(X, border=0.0):
|
||||
"""
|
||||
- Purpose
|
||||
Apply a random color table to a gray-scale image.
|
||||
- Synopsis
|
||||
Y = glblshow(X, border=0.0)
|
||||
- Input
|
||||
X: Gray-scale (uint8 or uint16) image. Labeled image.
|
||||
border: Boolean Default: 0.0. Labeled image.
|
||||
- Output
|
||||
Y: Gray-scale (uint8 or uint16) or binary image.
|
||||
|
||||
"""
|
||||
from numpy import take, resize, shape
|
||||
from numpy.random import rand
|
||||
|
||||
mmin = X.min()
|
||||
mmax = X.max()
|
||||
ncolors = mmax - mmin + 1
|
||||
R = to_int32(rand(ncolors)*255)
|
||||
G = to_int32(rand(ncolors)*255)
|
||||
B = to_int32(rand(ncolors)*255)
|
||||
if mmin == 0:
|
||||
R[0],G[0],B[0] = 0,0,0
|
||||
r=resize(take(R, X.ravel() - mmin),X.shape)
|
||||
g=resize(take(G, X.ravel() - mmin),X.shape)
|
||||
b=resize(take(B, X.ravel() - mmin),X.shape)
|
||||
Y=concat('d',r,g,b)
|
||||
return Y
|
||||
|
||||
|
||||
|
||||
def readgray(filename):
|
||||
"""
|
||||
- Purpose
|
||||
Read an image from a coercial file format and stores it as a
|
||||
gray-scale image.
|
||||
- Synopsis
|
||||
y = readgray(filename)
|
||||
- Input
|
||||
filename: String Name of file to read.
|
||||
- Output
|
||||
y: Gray-scale (uint8 or uint16) or binary image.
|
||||
- Description
|
||||
readgray reads the image in filename and stores it in y , an
|
||||
uint8 gray-scale image (without colormap). If the input file is
|
||||
a color RGB image, it is converted to gray-scale using the
|
||||
equation: y = 0.2989 R + 0.587 G + 0.114 B. This functions uses
|
||||
de PIL module.
|
||||
- Examples
|
||||
#
|
||||
a=readgray('cookies.tif')
|
||||
show(a)
|
||||
"""
|
||||
import pylab
|
||||
import numpy
|
||||
|
||||
y = pylab.imread(filename)
|
||||
if (len(y.shape) == 3) and (y.shape[0] == 3):
|
||||
if numpy.alltrue(numpy.alltrue(y[0,:,:] == y[1,:,:] and
|
||||
y[0,:,:] == y[2,:,:])):
|
||||
y = y[0,:,:]
|
||||
else:
|
||||
print 'Warning: converting true-color RGB image to gray'
|
||||
y = ubyte(0.2989 * y[0,:,:] +
|
||||
0.5870 * y[1,:,:] +
|
||||
0.1140 * y[2,:,:])
|
||||
elif (len(y.shape) == 2):
|
||||
pass
|
||||
else:
|
||||
raise ValueError, 'Error, it is not 2D image'
|
||||
return y
|
||||
|
||||
|
||||
|
||||
def freedom(L=5):
|
||||
"""
|
||||
DOES NOT DO ANYTHING
|
||||
"""
|
||||
return -1
|
||||
|
||||
mmfreedom=freedom
|
||||
|
107
src/sextante/pymorph/html/Install.html
Normal file
@ -0,0 +1,107 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
|
||||
<title>Install</title>
|
||||
<link href="morph/tbxdok.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<table class="topNav">
|
||||
<tr>
|
||||
<td class="index">
|
||||
[<a href="index.html">Home</a>]
|
||||
|
||||
[<a href="Readme.html">General Description</a>]
|
||||
|
||||
[<a href="Install.html">Installation Instructions</a>]
|
||||
|
||||
[<a href="License.html">License Terms</a>]
|
||||
|
||||
[<a href="morph/index.html">Documentation</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/showfiles.php?group_id=72435">Downloads</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/projects/pymorph/">Project Page</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/memberlist.php?group_id=72435">Contact Info</a>]
|
||||
</td>
|
||||
<td class="title">pymorph Morphology Toolbox V0.8 01Aug03</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>Install
|
||||
<br>
|
||||
</h1>
|
||||
<div class="H1">
|
||||
<p>
|
||||
<div class="docbook">
|
||||
<H3>Installation instructions for the pymorph Morphology Toolbox V0.8.</H3>
|
||||
<div class="H3">
|
||||
<div class="">
|
||||
<H4>Requirements</H4>
|
||||
<div class="H4">
|
||||
<p> Before installing the pymorph Morphology Toolbox for Python, make sure the following packages are correctly
|
||||
installed:
|
||||
|
||||
</p>
|
||||
<ol>
|
||||
<li>Python 2.2 or higher.</li>
|
||||
<li>Numeric 22.0 or higher. Available at Numerical Python Home Page, http://numpy.sourceforge.net/</li>
|
||||
<li>PIL, the Python Imaging Library, available at http://www.pythonware.com/products/pil/</li>
|
||||
</ol>
|
||||
<p> Future releases are supposed to include Numeric and PIL in the pymorph package.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="">
|
||||
<H4>Installation in Any platform</H4>
|
||||
<div class="H4">
|
||||
<ol>
|
||||
<li>Unzip the file morph08pybase.zip. A new directory called morph08pybase will be created.</li>
|
||||
<li>Enter the morph08pybase directory.</li>
|
||||
<li>Type "python setup.py install". You may need admin permissions to perform this action.</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="">
|
||||
<H4>Uninstallation</H4>
|
||||
<div class="H4">pymorph Morphology Toolbox for PYTHON package files are installed at the
|
||||
|
||||
<code>$PYTHON_HOME/site-packages/adtools/morph08pybase</code>. Where
|
||||
<code>$PYTHON_HOME</code> is the Python installation directory. You can uninstall the pymorph Morphology Toolbox for PYTHON by deleting everything under this directory.
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
<center>
|
||||
<table class="botNav">
|
||||
<tr>
|
||||
<td class="index">
|
||||
[<a href="index.html">Home</a>]
|
||||
|
||||
[<a href="Readme.html">General Description</a>]
|
||||
|
||||
[<a href="Install.html">Installation Instructions</a>]
|
||||
|
||||
[<a href="License.html">License Terms</a>]
|
||||
|
||||
[<a href="morph/index.html">Documentation</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/showfiles.php?group_id=72435">Downloads</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/projects/pymorph/">Project Page</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/memberlist.php?group_id=72435">Contact Info</a>]
|
||||
</td>
|
||||
<td rowspan="2" class="sponsor"><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=72435&type=2" alt="http://sourceforge.net" border="0"></a></td>
|
||||
<td rowspan="2" class="sponsor"><a href="http://www.python.org"><img src="http://www.python.org/pics/PythonPoweredSmall.gif" alt="http://www.python.org" border="0"></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="copyright">Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
77
src/sextante/pymorph/html/License.html
Normal file
@ -0,0 +1,77 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
|
||||
<title>License</title>
|
||||
<link href="morph/tbxdok.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<table class="topNav">
|
||||
<tr>
|
||||
<td class="index">
|
||||
[<a href="index.html">Home</a>]
|
||||
|
||||
[<a href="Readme.html">General Description</a>]
|
||||
|
||||
[<a href="Install.html">Installation Instructions</a>]
|
||||
|
||||
[<a href="License.html">License Terms</a>]
|
||||
|
||||
[<a href="morph/index.html">Documentation</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/showfiles.php?group_id=72435">Downloads</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/projects/pymorph/">Project Page</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/memberlist.php?group_id=72435">Contact Info</a>]
|
||||
</td>
|
||||
<td class="title">pymorph Morphology Toolbox V0.8 01Aug03</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>License
|
||||
<br>
|
||||
</h1>
|
||||
<div class="H1">
|
||||
<p>
|
||||
The pymorph Morphology Toolbox for Python is ruled by the BSD License Terms.
|
||||
|
||||
<div class="bridge">The BSD Licence</div> Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center.
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||
provided that the following conditions are met:
|
||||
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
Neither the name of UNICAMP, CenPRA nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<center>
|
||||
<table class="botNav">
|
||||
<tr>
|
||||
<td class="index">
|
||||
[<a href="index.html">Home</a>]
|
||||
|
||||
[<a href="Readme.html">General Description</a>]
|
||||
|
||||
[<a href="Install.html">Installation Instructions</a>]
|
||||
|
||||
[<a href="License.html">License Terms</a>]
|
||||
|
||||
[<a href="morph/index.html">Documentation</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/showfiles.php?group_id=72435">Downloads</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/projects/pymorph/">Project Page</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/memberlist.php?group_id=72435">Contact Info</a>]
|
||||
</td>
|
||||
<td rowspan="2" class="sponsor"><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=72435&type=2" alt="http://sourceforge.net" border="0"></a></td>
|
||||
<td rowspan="2" class="sponsor"><a href="http://www.python.org"><img src="http://www.python.org/pics/PythonPoweredSmall.gif" alt="http://www.python.org" border="0"></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="copyright">Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
98
src/sextante/pymorph/html/Readme.html
Normal file
@ -0,0 +1,98 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
|
||||
<title>Readme</title>
|
||||
<link href="morph/tbxdok.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<table class="topNav">
|
||||
<tr>
|
||||
<td class="index">
|
||||
[<a href="index.html">Home</a>]
|
||||
|
||||
[<a href="Readme.html">General Description</a>]
|
||||
|
||||
[<a href="Install.html">Installation Instructions</a>]
|
||||
|
||||
[<a href="License.html">License Terms</a>]
|
||||
|
||||
[<a href="morph/index.html">Documentation</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/showfiles.php?group_id=72435">Downloads</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/projects/pymorph/">Project Page</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/memberlist.php?group_id=72435">Contact Info</a>]
|
||||
</td>
|
||||
<td class="title">pymorph Morphology Toolbox V0.8 01Aug03</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>Readme
|
||||
<br>
|
||||
</h1>
|
||||
<div class="H1">
|
||||
<p>
|
||||
<div class="docbook">
|
||||
<H3>README</H3>
|
||||
<div class="H3">
|
||||
<p>The pymorph Morphology Toolbox for Python is a software for Image Analysis and Signal Processing. It is composed by a family of discrete non linear filters based on lattice operations. These filters, called morphological operators, are quite useful for restoration, segmentation and quantitative analysis of Images and Signals.
|
||||
|
||||
</p>
|
||||
<p>The pymorph Morphology Toolbox contains state-of-the-art morphological operators, implemented by simple algorithms. The available operators go from the classical morphological filters, used for restoration and shape description, to the modern connected filters and watersheds, so powerful for image segmentation.
|
||||
|
||||
</p>
|
||||
<p>The potential of the pymorph Morphology Toolbox is illustrated by several demos, that show the morphological solution of many real-life image processing problems. Some of the application areas covered are machine vision, medical imaging, desktop publishing, document processing, food industry and agriculture.
|
||||
|
||||
</p>
|
||||
<p>The reference manual has a page of documentation for each function of the toolbox. These pages present the respective command syntax, a detailed explanation of the necessary parameters, a short description, an application example and the formal definition.
|
||||
|
||||
</p>
|
||||
<p>The pymorph Morphology Toolbox deals with gray-scale and binary images (or signals) and is data type oriented. Thus, most operators perform both gray-scale and binary image (or signal) processing and the choice of the appropriate (binary or gray-scale) algorithm is automatic.
|
||||
|
||||
</p>
|
||||
<p>The images (or signals) may be represented by the formats: binary, 8-bit gray-scale and 16-bit gray-scale, where each pixel is represented, respectively, by a logical uint8, a uint8 and uint16 data type.
|
||||
|
||||
</p>
|
||||
<p>Morphological operators may be written hierarchically from two elementary operators, called dilation and erosion. pymorph Morphology Toolbox has simple implementations for dilation and erosion and permits the realization of any morphological operator by this constructive approach. </p>
|
||||
<p>Dilations and erosions are parameterized by particular images (or signals), called structuring elements. These structuring elements may be flat (binary images or signals) or non flat (gray-scale images or signals). The pymorph Morphology Toolbox supports both kinds of structuring elements.
|
||||
|
||||
</p>
|
||||
<p>The pymorph Morphology Toolbox is supported in any python environment.
|
||||
|
||||
</p>
|
||||
<p></p>
|
||||
<p></p>
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
<center>
|
||||
<table class="botNav">
|
||||
<tr>
|
||||
<td class="index">
|
||||
[<a href="index.html">Home</a>]
|
||||
|
||||
[<a href="Readme.html">General Description</a>]
|
||||
|
||||
[<a href="Install.html">Installation Instructions</a>]
|
||||
|
||||
[<a href="License.html">License Terms</a>]
|
||||
|
||||
[<a href="morph/index.html">Documentation</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/showfiles.php?group_id=72435">Downloads</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/projects/pymorph/">Project Page</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/memberlist.php?group_id=72435">Contact Info</a>]
|
||||
</td>
|
||||
<td rowspan="2" class="sponsor"><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=72435&type=2" alt="http://sourceforge.net" border="0"></a></td>
|
||||
<td rowspan="2" class="sponsor"><a href="http://www.python.org"><img src="http://www.python.org/pics/PythonPoweredSmall.gif" alt="http://www.python.org" border="0"></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="copyright">Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
141
src/sextante/pymorph/html/index.html
Normal file
@ -0,0 +1,141 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
|
||||
<title>pymorph Morphology Toolbox V0.8 01Aug03</title>
|
||||
<link href="morph/tbxdok.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<table class="topNav">
|
||||
<tr>
|
||||
<td class="index">
|
||||
[<a href="index.html">Home</a>]
|
||||
|
||||
[<a href="Readme.html">General Description</a>]
|
||||
|
||||
[<a href="Install.html">Installation Instructions</a>]
|
||||
|
||||
[<a href="License.html">License Terms</a>]
|
||||
|
||||
[<a href="morph/index.html">Documentation</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/showfiles.php?group_id=72435">Downloads</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/projects/pymorph/">Project Page</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/memberlist.php?group_id=72435">Contact Info</a>]
|
||||
</td>
|
||||
<td class="title">pymorph Morphology Toolbox V0.8 01Aug03</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>pymorph Morphology Toolbox
|
||||
<br>
|
||||
<span class="subtitle">Morphological image processing tools for Python.
|
||||
</span>
|
||||
</h1>
|
||||
<h2 class="index">Description</h2>
|
||||
<br>
|
||||
<div class="h2">
|
||||
<p>The pymorph Morphology Toolbox
|
||||
for Python
|
||||
is a powerful collection of latest state-of-the-art gray-scale morphological tools that can be applied to image segmentation, non-linear filtering, pattern recognition and image analysis.
|
||||
</p>
|
||||
<p>The pymorph Morphology Toolbox
|
||||
is an open source software for Morphological
|
||||
Image Analysis and Signal Processing written in Python. It is a
|
||||
companion resource for the book:
|
||||
<a href="http://www.spie.org/web/abstracts/oepress/TT59.html">Hands-on
|
||||
Morphological Image Processing</a>
|
||||
, by Edward Dougherty and Roberto
|
||||
Lotufo, published by SPIE, Aug 2003, ISBN=0-8194-4720-X.
|
||||
</p>
|
||||
<p>From its preface:
|
||||
<blockquote>"The book is hands-on in a very
|
||||
real sense. Most of the techniques used in the book are available in
|
||||
the Morphology Toolbox, and a great majority of the images shown in
|
||||
the text have been processed by the toolbox. These images, along with
|
||||
a demonstration version of the toolbox are downloadable free from the
|
||||
web (
|
||||
<a href="http://sourceforge.net/projects/pymorph">http://sourceforge.net/projects/pymorph</a>
|
||||
), so that
|
||||
the reader can actually process the images according to the examples
|
||||
and demonstrations in the text. There is a brief discussion in the
|
||||
first chapter as to how the toolbox correlates to the text, but we do
|
||||
not emphasize this relation throughout the text since we do not want
|
||||
to digress from the imaging essentials. Detailed use of the toolbox
|
||||
can be learned from the downloadable version. To assist the user, each
|
||||
chapter concludes with a list of the toolbox operations used in the
|
||||
chapter, and the detailed demonstration sections include corresponding
|
||||
toolbox implementations".
|
||||
</blockquote>
|
||||
</p>
|
||||
<p> As the fuctions are written in pure Python, some functions are
|
||||
not very efficient and may take very long to process. In this case, it
|
||||
is possible to use a professional version available at
|
||||
<a href="http://www.mmorph.com/pymorphpro">http://www.mmorph.com/pymorphpro</a>
|
||||
. This version is a superset
|
||||
of the pymorph project.
|
||||
</p>
|
||||
<p> The images used in the book
|
||||
together with the python scripts to build most of the figures that
|
||||
illustrate the book will be available in mid-August 2003.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<h2 class="index">On-line Documentation</h2>
|
||||
<div class="h2">
|
||||
<table class="dirlist">
|
||||
<tbody valign="baseline">
|
||||
<tr>
|
||||
<td><a href="Readme.html">General Description</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="Install.html">Installation Instructions</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="License.html">License Terms</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="morph/index.html">Documentation</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://sourceforge.net/project/showfiles.php?group_id=72435">Downloads</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://sourceforge.net/projects/pymorph/">Project Page</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://sourceforge.net/project/memberlist.php?group_id=72435">Contact Info</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<center>
|
||||
<table class="botNav">
|
||||
<tr>
|
||||
<td class="index">
|
||||
[<a href="index.html">Home</a>]
|
||||
|
||||
[<a href="Readme.html">General Description</a>]
|
||||
|
||||
[<a href="Install.html">Installation Instructions</a>]
|
||||
|
||||
[<a href="License.html">License Terms</a>]
|
||||
|
||||
[<a href="morph/index.html">Documentation</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/showfiles.php?group_id=72435">Downloads</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/projects/pymorph/">Project Page</a>]
|
||||
|
||||
[<a href="http://sourceforge.net/project/memberlist.php?group_id=72435">Contact Info</a>]
|
||||
</td>
|
||||
<td rowspan="2" class="sponsor"><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=72435&type=2" alt="http://sourceforge.net" border="0"></a></td>
|
||||
<td rowspan="2" class="sponsor"><a href="http://www.python.org"><img src="http://www.python.org/pics/PythonPoweredSmall.gif" alt="http://www.python.org" border="0"></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="copyright">Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
BIN
src/sextante/pymorph/html/morph/PythonPoweredSmall.gif
Normal file
After Width: | Height: | Size: 361 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmaddm001.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmareaclose001.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmareaopen001.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmasf001.png
Normal file
After Width: | Height: | Size: 920 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmasf002.png
Normal file
After Width: | Height: | Size: 911 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmasf003.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmasf004.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmasfrec001.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmasfrec002.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmbinary001.png
Normal file
After Width: | Height: | Size: 829 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcbisector001.png
Normal file
After Width: | Height: | Size: 1016 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcdil001.png
Normal file
After Width: | Height: | Size: 904 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcdil002.png
Normal file
After Width: | Height: | Size: 461 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcenter001.png
Normal file
After Width: | Height: | Size: 853 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcenter002.png
Normal file
After Width: | Height: | Size: 654 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcero001.png
Normal file
After Width: | Height: | Size: 893 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcero002.png
Normal file
After Width: | Height: | Size: 456 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmclohole001.png
Normal file
After Width: | Height: | Size: 871 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmclose001.png
Normal file
After Width: | Height: | Size: 415 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcloserec001.png
Normal file
After Width: | Height: | Size: 549 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcloserecth001.png
Normal file
After Width: | Height: | Size: 536 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcloseth001.png
Normal file
After Width: | Height: | Size: 365 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcthick001.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcthin001.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcwatershed001.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcwatershed002.png
Normal file
After Width: | Height: | Size: 830 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcwatershed003.png
Normal file
After Width: | Height: | Size: 848 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmcwatershed004.png
Normal file
After Width: | Height: | Size: 285 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmdil001.png
Normal file
After Width: | Height: | Size: 794 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmdil002.png
Normal file
After Width: | Height: | Size: 923 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmdil003.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmdist001.png
Normal file
After Width: | Height: | Size: 623 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmdist002.png
Normal file
After Width: | Height: | Size: 730 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmdist003.png
Normal file
After Width: | Height: | Size: 562 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmdist004.png
Normal file
After Width: | Height: | Size: 534 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmedgeoff001.png
Normal file
After Width: | Height: | Size: 483 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmendpoints001.png
Normal file
After Width: | Height: | Size: 692 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmero001.png
Normal file
After Width: | Height: | Size: 744 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmero002.png
Normal file
After Width: | Height: | Size: 903 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmero003.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmframe001.png
Normal file
After Width: | Height: | Size: 740 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmframe002.png
Normal file
After Width: | Height: | Size: 168 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmgdist001.png
Normal file
After Width: | Height: | Size: 674 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmgradm001.png
Normal file
After Width: | Height: | Size: 742 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmgray001.png
Normal file
After Width: | Height: | Size: 944 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmhistogram001.png
Normal file
After Width: | Height: | Size: 520 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmhmax001.png
Normal file
After Width: | Height: | Size: 627 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmhmin001.png
Normal file
After Width: | Height: | Size: 610 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmhomothick001.png
Normal file
After Width: | Height: | Size: 651 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmhomothin001.png
Normal file
After Width: | Height: | Size: 652 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmimg2se001.png
Normal file
After Width: | Height: | Size: 1016 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmimg2se002.png
Normal file
After Width: | Height: | Size: 1007 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mminfcanon001.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mminfgen001.png
Normal file
After Width: | Height: | Size: 627 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mminfrec001.png
Normal file
After Width: | Height: | Size: 457 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mminpos001.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mminterot001.png
Normal file
After Width: | Height: | Size: 221 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmintersec001.png
Normal file
After Width: | Height: | Size: 643 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmintersec002.png
Normal file
After Width: | Height: | Size: 665 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmisequal001.png
Normal file
After Width: | Height: | Size: 658 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmislesseq001.png
Normal file
After Width: | Height: | Size: 671 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmlabel001.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmlabelflat001.png
Normal file
After Width: | Height: | Size: 808 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmneg001.png
Normal file
After Width: | Height: | Size: 543 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmopen001.png
Normal file
After Width: | Height: | Size: 418 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmopenrec001.png
Normal file
After Width: | Height: | Size: 532 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmopenrecth001.png
Normal file
After Width: | Height: | Size: 524 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmopenth001.png
Normal file
After Width: | Height: | Size: 379 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmopentransf001.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmopentransf002.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmopentransf003.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmpatspec001.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmregmax001.png
Normal file
After Width: | Height: | Size: 893 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmregmin001.png
Normal file
After Width: | Height: | Size: 879 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmse2hmt001.png
Normal file
After Width: | Height: | Size: 561 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmse2interval001.png
Normal file
After Width: | Height: | Size: 557 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmse2interval002.png
Normal file
After Width: | Height: | Size: 559 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmsebox001.png
Normal file
After Width: | Height: | Size: 815 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmsecross001.png
Normal file
After Width: | Height: | Size: 689 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmsedil001.png
Normal file
After Width: | Height: | Size: 586 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmsedisk001.png
Normal file
After Width: | Height: | Size: 907 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmsedisk002.png
Normal file
After Width: | Height: | Size: 689 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmsedisk003.png
Normal file
After Width: | Height: | Size: 815 B |
BIN
src/sextante/pymorph/html/morph/images/eq_mmsedisk004.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
src/sextante/pymorph/html/morph/images/eq_mmsedisk005.png
Normal file
After Width: | Height: | Size: 1.0 KiB |