|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectde.unihalle.informatik.Alida.operator.ALDOperator
de.unihalle.informatik.MiToBo.core.operator.MTBOperator
de.unihalle.informatik.MiToBo.segmentation.levelset.nonPDE.LevelsetSolveNonPDE
@ALDAOperator(genericExecutionMode=ALL) public class LevelsetSolveNonPDE
Implements a level set solver which may optionally perserve the topology using non PDE optimization. See: Song, B. and Chan, T.: A fast algorithm for level set based optimization, UCLA Cam Report, 2002
Optionally a invalid image may be supplied which defines pixels with nonzero value as invalid and not considered for segmentation.
The resulting image is a byte image, where background and invalid pixels have zeros and the obejct compontens/phases values starting from one.
NOTE: if verbose is turned on runtime will typically be increase considerably due to outputting (and consequently computing) the complete energy.
Currently only 2D images are supported.
Nested Class Summary | |
---|---|
private class |
LevelsetSolveNonPDE.CoordInt3D
Just to hold 3D coordinate and nothing else |
private class |
LevelsetSolveNonPDE.LevelsetIterator
Abstract class for iterators of pixels/voxels of the level set function. |
private class |
LevelsetSolveNonPDE.LevelsetIteratorContourPoints
Iterator for all contour pixels/voxels of the level set function excluding invalid pixels/voxels. |
private class |
LevelsetSolveNonPDE.LevelsetIteratorScan
Iterator for all pixels/voxels of the level set function in scanline fashion excluding invalid pixels/voxels. |
Nested classes/interfaces inherited from class de.unihalle.informatik.Alida.operator.ALDOperator |
---|
de.unihalle.informatik.Alida.operator.ALDOperator.HidingMode |
Field Summary | |
---|---|
private java.lang.Integer |
debug
|
private MTBGenericEnergyNonPDE |
energy
|
private static int |
FLAG_SOLVER
|
private static int |
FLAG_SOLVER2
|
private java.util.Vector<MTBImageByte> |
intermediateLS
|
private MTBImage |
invalidImage
|
private java.lang.Integer |
maxIterations
|
private byte[] |
nbPhases
Phases of the 8-neighbors of the current pixel. |
private java.util.Vector<java.lang.Byte> |
nbPhasesNonredundant
Non redudant phases in the neighborhood of the current pixel. |
private java.lang.Integer |
numIterations
|
private MTBLevelsetMembership |
phi
|
private java.util.Vector<java.lang.Byte> |
potentialNewPhases
Phases the current pixel is (topologically) allowed to change to. |
private java.lang.Boolean |
preserveTopology
|
private MTBImageByte |
resultImage
|
private java.lang.Integer |
spacingIntermediate
|
private boolean |
verbose
|
Fields inherited from class de.unihalle.informatik.Alida.operator.ALDOperator |
---|
completeDAG, name, portHashAccess, versionProvider |
Constructor Summary | |
---|---|
LevelsetSolveNonPDE()
Constructor |
|
LevelsetSolveNonPDE(MTBGenericEnergyNonPDE energy,
MTBLevelsetMembership phi,
int maxIter,
int spacingIntermediate,
MTBImage invalidImg,
boolean preserveTopology)
Constructor. |
Method Summary | |
---|---|
private void |
get8NeighborsPhase(int x,
int y,
byte[] nb)
Compute phases of 8 neighbors of (x,y) and store these in the array nb . |
java.lang.Integer |
getDebug()
Get value of debug. |
MTBGenericEnergyNonPDE |
getEnergy()
Get value of energy. |
java.util.Vector<MTBImageByte> |
getIntermediateLS()
Get value of intermediateLS. |
MTBImage |
getInvalidImage()
Get value of invalidImage. |
java.lang.Integer |
getMaxIterations()
Get value of maxIterations. |
java.lang.Integer |
getNumIterations()
Get value of numIterations Explanation: Number of iterations performed |
MTBLevelsetMembership |
getPhi()
Get value of phi. |
private java.util.Vector<java.lang.Byte> |
getPotentialNewPhases2D(boolean preserveTopology,
int x,
int y)
|
java.lang.Boolean |
getPreserveTopology()
Get value of preserveTopology. |
MTBImageByte |
getResultImage()
Get value of resultImage. |
java.lang.Integer |
getSpacingIntermediate()
Get value of spacingIntermediate. |
private boolean |
hasForeign4Neighbor(byte phase,
byte[] nbPhases)
Check whether there is a different/foreign phase (then phase ) in the 4-neighborhood
as represented in the 8 neighborhood nbPhases . |
private int |
numBlockChange(byte[] nbPhases,
int r)
Return number of connected components of different/foreign phase then r
in the 8 neighborhood nbPhases ,
which are 4 connected to the current pixel. |
protected void |
operate()
This function does the actual work, i.e. optimization of the energy. |
private void |
printNbPhases(byte[] nbPhases)
|
void |
setDebug(java.lang.Integer value)
Set value of debug. |
void |
setMaxIterations(java.lang.Integer value)
Set value of maxIterations. |
void |
setPreserveTopology(java.lang.Boolean value)
Set value of preserveTopology. |
void |
setSpacingIntermediate(java.lang.Integer value)
Set value of spacingIntermediate. |
private boolean |
solve()
|
Methods inherited from class de.unihalle.informatik.MiToBo.core.operator.MTBOperator |
---|
readResolve |
Methods inherited from class de.unihalle.informatik.Alida.operator.ALDOperator |
---|
deserializeFromXmlFile, fieldContained, getALDPortHashAccessKey, getConstructionMode, getInInoutNames, getInInoutNames, getInNames, getInOutNames, getMissingRequiredInputs, getName, getNumParameters, getOutInoutNames, getOutNames, getParameter, getParameterDescriptor, getParameterNames, getSupplementalNames, getVerbose, getVersion, isConfigured, parametersToXmlObject, print, print, print, printInterface, printInterface, readHistory, reinitializeParameterDescriptors, runOp, runOp, runOp, serializeToXmlFile, setConstructionMode, setName, setParameter, setParametersFromXml, setParametersFromXml, setVerbose, toStringVerbose, unconfiguredItems, validate, validateCustom, validateGeneric, writeHistory, writeHistory, writeHistory, writeParametersToXml |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
@Parameter(label="debug", direction=IN, supplemental=true, description="Additional dubugging informaton") private java.lang.Integer debug
@Parameter(label="energy", required=true, direction=IN, description="Energy to use for optimization") private MTBGenericEnergyNonPDE energy
private static final int FLAG_SOLVER
private static final int FLAG_SOLVER2
@Parameter(label="intermediateLS", direction=IN, supplemental=true, description="intermediate of levelset functions") private java.util.Vector<MTBImageByte> intermediateLS
@Parameter(label="invalidImage", required=false, direction=IN, description="optional image of invalid pixels (pixels <> 0 are invalid)") private MTBImage invalidImage
@Parameter(label="maxIterations", required=false, direction=IN, description="Maximal number of iterations") private java.lang.Integer maxIterations
private byte[] nbPhases
private java.util.Vector<java.lang.Byte> nbPhasesNonredundant
@Parameter(label="numIterations", direction=IN, supplemental=true, description="Number of iterations performed") private java.lang.Integer numIterations
@Parameter(label="phi", required=true, direction=IN, description="Initial levelset function") private MTBLevelsetMembership phi
private java.util.Vector<java.lang.Byte> potentialNewPhases
@Parameter(label="preserveTopology", required=true, direction=IN, description="Topology preserving mode?") private java.lang.Boolean preserveTopology
@Parameter(label="resultImage", direction=OUT, description="Result image") private MTBImageByte resultImage
@Parameter(label="spacingIntermediate", direction=IN, supplemental=true, description="spacing of intermediate of levelset function returned; 0 = none?") private java.lang.Integer spacingIntermediate
private boolean verbose
Constructor Detail |
---|
public LevelsetSolveNonPDE() throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
public LevelsetSolveNonPDE(MTBGenericEnergyNonPDE energy, MTBLevelsetMembership phi, int maxIter, int spacingIntermediate, MTBImage invalidImg, boolean preserveTopology) throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
enery
- Energyls
- initialed level set function of type membership, i.e. LevelsetMembershipmaxIter
- maximal number of iterationsspacingIntermediate
- spacing of intermediate of level set function returned; 0 = noneinvalidImg
- optional image of invalid pixels (pixels <> 0 are invalid)preserveTopology
- verbose
- output if requesteddebug
- bit mask for debugging output
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Method Detail |
---|
private void get8NeighborsPhase(int x, int y, byte[] nb)
nb
.
This array is reused for efficiency.
x
- x coordinatey
- y coordinatenb
- array in which to store the phases.public java.lang.Integer getDebug()
public MTBGenericEnergyNonPDE getEnergy()
public java.util.Vector<MTBImageByte> getIntermediateLS()
public MTBImage getInvalidImage()
public java.lang.Integer getMaxIterations()
public java.lang.Integer getNumIterations()
public MTBLevelsetMembership getPhi()
private java.util.Vector<java.lang.Byte> getPotentialNewPhases2D(boolean preserveTopology, int x, int y)
public java.lang.Boolean getPreserveTopology()
public MTBImageByte getResultImage()
public java.lang.Integer getSpacingIntermediate()
private boolean hasForeign4Neighbor(byte phase, byte[] nbPhases)
phase
) in the 4-neighborhood
as represented in the 8 neighborhood nbPhases
.
nbPhases
-
private int numBlockChange(byte[] nbPhases, int r)
r
in the 8 neighborhood nbPhases
,
which are 4 connected to the current pixel.
Invalid pixels are not considered as another phase
This is identical to the topological number T_4(\vec x,fg) n in
Han, X. and Xu, C. and Prince, J.L., A topology preserving level set method for geometric deformable models}, PAMI, pages 755-768, 2003
nbPhases
- Phases in the 8 neighborhood of current pixel with pahse r
r
- Phase of current pixel
protected void operate() throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
operate
in class de.unihalle.informatik.Alida.operator.ALDOperator
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
private void printNbPhases(byte[] nbPhases)
public void setDebug(java.lang.Integer value)
value
- New value of debugpublic void setMaxIterations(java.lang.Integer value)
value
- New value of maxIterationspublic void setPreserveTopology(java.lang.Boolean value)
value
- New value of preserveTopologypublic void setSpacingIntermediate(java.lang.Integer value)
value
- New value of spacingIntermediateprivate boolean solve() throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |