Seg2Dgel
Class Sg2fbl

java.lang.Object
  extended by Seg2Dgel.Sg2glb
      extended by Seg2Dgel.Sg2fbl

public class Sg2fbl
extends Sg2glb

Class Sg2fbl specifies methods for manipulating the Final Blob List (FBL) used by the 2D gel spot segmenter. There is only one FBL instance that is ever created and it is reused as we parse each spot in the image. The initial list will grow if needed and the data in the FBL is also saved in a hash table for rapid determination of FBL membership.

This code was derived and refactored from GELLAB-II sg2gii C language files.

This work was produced by Peter Lemkin of the National Cancer Institute, an agency of the United States Government. As a work of the United States Government there is no associated copyright. It is offered as open source software under the Mozilla Public License (version 1.1) subject to the limitations noted in the accompanying LEGAL file. This notice must be included with the code. The Open2Dprot Mozilla and Legal files are available on http://Open2Dprot.sourceforge.net/.

Version:
$Date: 2005/10/23 12:44:55 $ $Revision: 1.7 $
Author:
P. Lemkin, NCI-Frederick, Frederick, MD, 21702
See Also:
Open2Dprot Home

Field Summary
(package private)  int cc
          FBL instance: cc central core value
static int ccTopFBL
          Top (i.e.
static java.awt.Point centroid
          Centroid of FBL when computed
static Sg2fbl[] fblList
          List of FBL points [0:topfbl-1] but allocated to max size [0:sizeMaxFBL-1]
(package private)  int g
          FBL instance: g gray value
static int maxX
          minimum max X enclosing rectangle if used
static int maxY
          minimum max Y enclosing rectangle if used
static int minX
          minimum min X enclosing rectangle if used
static int minY
          minimum min Y enclosing rectangle if used
static int sizeMaxFBL
          Max # of FBLs.
static int topfbl
          Top of the current FBL stack.
(package private)  short x
          FBL instance: x coordinate
(package private)  short y
          FBL instance: y coordinate
 
Fields inherited from class Seg2Dgel.Sg2glb
acc, accDatabaseFile, accDatabaseSwitch, accFile, accFormatMode, allowTouchingEdgesSwitch, applicationName, argsV, averageODSwitch, avg, avgPixFile, banner, bannerTitle, baseImageFileName, baseStatusTime, batchDir, bfav, bfavm, bfavm1, bfavp, bfavp1, bfog, bfogm, bfogm1, bfogm2, bfogm3, bfogm4, bfogm5, bfogp, bfogp1, bfogp2, bfogp3, bfogp4, bfogp5, bkg, BKGRD_CODE, bkgrdCorrectionSwitch, bkgrdPixFile, bkgrdSizeFlag, BLACK, boundaryInSSFSwitch, bufbkg, bufcc, bufmag, bufrest, c11, c12, c13, c14, c15, c16, c17, c18, c19, c1a, c1b, c1c, c1d, c1e, c1f, c1g, c1h, c21, c22, c23, c24, c25, c26, c27, c28, c29, c2a, c2b, c2c, c2d, c2e, c2f, c2g, c2h, c31, c32, c33, c34, c35, c36, c37, c38, c39, c3a, c3b, c3c, c3d, c3e, c3f, c3g, c3h, c41, c42, c43, c44, c45, c46, c47, c48, c49, c4a, c4b, c4c, c4d, c4e, c4f, c4g, c4h, c51, c52, c53, c54, c55, c56, c57, c58, c59, c5a, c5b, c5c, c5d, c5e, c5f, c5g, c5h, c61, c62, c63, c64, c65, c66, c67, c68, c69, c6a, c6b, c6c, c6d, c6e, c6f, c6g, c6h, c71, c72, c73, c74, c75, c76, c77, c78, c79, c7a, c7b, c7c, c7d, c7e, c7f, c7g, c7h, c81, c82, c83, c84, c85, c86, c87, c88, c89, c8a, c8b, c8c, c8d, c8e, c8f, c8g, c8h, c91, c92, c93, c94, c95, c96, c97, c98, c99, c9a, c9b, c9c, c9d, c9e, c9f, c9g, c9h, ca1, ca2, ca3, ca4, ca5, ca6, ca7, ca8, ca9, caa, cab, cac, cacheDir, cad, cae, caf, cag, cah, cal, cal2gray, calFile, cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cba, cbb, cbc, cbd, cbe, cbf, cbg, cbh, cc1, cc2, cc3, cc4, cc5, cc6, cc7, cc8, cc9, cca, ccb, ccc, ccd, cce, ccf, ccg, cch, ccMinSize, ccMinSizeSwitch, ccNum, ccPixFile, cd1, cd2, cd3, cd4, cd5, cd6, cd7, cd8, cd9, cda, cdb, cdc, cdd, cde, cdf, cdg, cdh, computingWindowSwitch, coneOfSilenceMode, CONSOLE_FLAG, ctlCorePixSwitch, cwx1, cwx2, cwy1, cwy2, data, DATE, dbSample, dbSpot, dbug, DBUG_ADD_INTERIOR_CC_PIXELS, DBUG_BND_ANALYSIS, DBUG_CALC_FEATURES, DBUG_CHAIN_CODE_RLM_ANALYSIS, DBUG_CONSOLE, DBUG_CVT_BND_TO_CHAINCODE, DBUG_DRAW_NOTCH_PAIR_LINE, DBUG_DRAW_SAT_SPOT_BND, DBUG_DUMP_CC_PPX, DBUG_FILL_CORNERS, DBUG_FILL_HOLES_IN_PCC_CONCAVITIES, DBUG_FIND_BND_NOTCHES_IN_CHAIN_CODE, DBUG_FIND_SPOT_LIST, DBUG_INNER_LOOP_FIND_SPOT, DBUG_MAX_PROPAGATE, DBUG_NBR_COMPONENTS, DBUG_PIX_DBCODE, DBUG_PRINT_GRAY2CAL_MAP, DBUG_PROP_SAT_SPOTS, DBUG_PROP_SPOT_TO_2ND_MAXIMA, DBUG_PUSH_XY_INTO_FBL, DBUG_RMV_CONCAVITIES, DBUG_RMV_INTERIOR_CC_PIXELS, DBUG_ROUND_CORNERS, DBUG_SPLIT_CHECK_SPOT, DBUG_SPLIT_PIX_BY_FBL_BND_ANALSIS, DBUG_SWITCHES, dbugBits, dbugBitsHelpStr, dbugBitsPixFlag, dbx1, dbx2, dby1, dby2, debugSwitch, defaultSwitch, defaultTypeCode, deleteIsolatedPixelsSwitch, demoFileList, demoSwitch, DFT_2D_GEL, DFT_2D_LC_MS, DFT_NO_DB, didPropSaturatedSpots, didSplitSpotFlag, diffODSwitch, docFileList, dotsSwitch, dpx1, dpx2, dpy1, dpy2, draw, drawBoundaryOverlayType, drawBoundarySwitch, drawDotOverlayType, drawMEROverlayType, drawMERSwitch, drawPlusOverlayType, drawPlusSwitch, drawSxSyEllipseSwitch, drawSxSyOverlayType, drawTitleSwitch, dtdSwitch, ENABLE_DEVELOPER_DEBUGGING, ENABLE_SATURATED_SPOTS, ENABLE_SPOT_SPLITTING, fbl, fileSeparator, fio, fnd, fourSqrtPi, gHist, glbPercentThr, gray2cal, gridSize, hashFBL, HASHFBLPRIME, hashWS, histThreshold, i0R, i10, i11, i12, i13, i14, i15, i16, i17, i18, i2U, i4L, i6D, ini, inPixFile, ISOLATED_PIXEL_CODE, j11, j12, j13, j14, j15, j16, j17, j18, j19, j1a, j1b, j1c, j1d, j1e, j1f, j1g, j1h, j21, j22, j23, j24, j25, j26, j27, j28, j29, j2a, j2b, j2c, j2d, j2e, j2f, j2g, j2h, j31, j32, j33, j34, j35, j36, j37, j38, j39, j3a, j3b, j3c, j3d, j3e, j3f, j3g, j3h, j41, j42, j43, j44, j45, j46, j47, j48, j49, j4a, j4b, j4c, j4d, j4e, j4f, j4g, j4h, j51, j52, j53, j54, j55, j56, j57, j58, j59, j5a, j5b, j5c, j5d, j5e, j5f, j5g, j5h, j61, j62, j63, j64, j65, j66, j67, j68, j69, j6a, j6b, j6c, j6d, j6e, j6f, j6g, j6h, j71, j72, j73, j74, j75, j76, j77, j78, j79, j7a, j7b, j7c, j7d, j7e, j7f, j7g, j7h, j81, j82, j83, j84, j85, j86, j87, j88, j89, j8a, j8b, j8c, j8d, j8e, j8f, j8g, j8h, j91, j92, j93, j94, j95, j96, j97, j98, j99, j9a, j9b, j9c, j9d, j9e, j9f, j9g, j9h, ja1, ja2, ja3, ja4, ja5, ja6, ja7, ja8, ja9, jaa, jab, jac, jad, jae, jaf, jag, jah, jarFileList, jarLibrFileList, jb1, jb2, jb3, jb4, jb5, jb6, jb7, jb8, jb9, jba, jbb, jbc, jbd, jbe, jbf, jbg, jbh, jc1, jc2, jc3, jc4, jc5, jc6, jc7, jc8, jc9, jca, jcb, jcc, jcd, jce, jcf, jcg, jch, jd1, jd2, jd3, jd4, jd5, jd6, jd7, jd8, jd9, jda, jdb, jdc, jdd, jde, jdf, jdg, jdh, keepInputImageSwitch, KILL_SPOT_CODE, killSpotColor, laplacianSwitch, legalImageFileExtens, lineLaplacianHeight, lineLaplacianWidth, lowPassSize, lowpassSwitch, lp13xZZSwitch, lp3x3Switch, lp5x5Switch, lp7x7Switch, mag2ndPixFile, MAX_BUFFERED_SPOTS, MAX_CC_CODE, MAX_INTERIOR_FBL_SIZE, MAX_PCC_CODE, maxColsToPrint, maxGhist, maxGrayPixel, MAXSUBSPOTS, meanGhist, merx1, merx2, merxp1, merxp2, mery1, mery2, meryp1, meryp2, MHISTSIZE, MIN_CC_CODE, MIN_PCC_CODE, MINBLOBAREA, minGhist, MINSPLITSPOTSIZE, nBitsPerPixel, nBkgrdSize, nBytesPerPixel, NEVER, ngh, notch, nPixels, nStatusName, nSwitches, optimizeInteriorFBLSwitch, osName, paramH, PCC_BASE_CODE, pix, pix1, pix2, pix3, pix4, pix5, pix6, pix7, pixDir, pixDumpSwitch, pixelSizeMicrons, pixFileExtn, pixHeight, pixWidth, ppxDir, pra, projDir, projDirSwitch, propertiesFile, propertiesFileSwitch, pTileGhist, PUBLISH, quickEstimateSwitch, rdbmsDir, rest, restOfPixFile, restOfPixSwitch, REVISION, rlmCWfile, rmvDprimeSizingSwitch, sampleSwitch, sat, saturatedSpotSwitch, scaledMaxOD, seg2dgelURL, segPixFile, segPixSwitch, sg2, simpleFileName, sizeFractionGaussianWidth, sort, split, splitLargeCCfblByBndAnalSwitch, splitLargeCCfblByRLManalSwitch, splitLargeCCfblByThreshAnalSwitch, splitMinCCsize, splitSpotSwitch, spotNumber, ssfFormatMode, ssfFormatSwitch, ssfOutputEpilogueFile, ssfOutputFile, ssfOutputPrefaceFile, startTime, statusMemoryFree, statusMemoryTot, statusName, statusStartTime, sw, switchOptCBvalue, switchOptData, switchOptValue, t1Area, t1Density, t1Range, t1SxSyRatio, t2Area, t2Density, t2Range, t2SxSyRatio, TEST_LARGE_IMAGE, thrAreaSwitch, thrDensitySwitch, thrRangeSwitch, thrSxSyRatioSwitch, timerSwitch, tmpDir, UNLABELED_CC_CODE, updateSwitch, usageSwitch, USE_13X13, USE_BKGD_AND_ISOLATED_PIXEL_BACKGROUND, USE_DEMO_DATA, USE_DOM_XML_SSF, use3x3laplacianSwitch, use5x5laplacianSwitch, useBkgdAndIsolatedPixelFlag, useBusseLaplacianSwitch, useCopyOfPix1ForPix5Switch, useHistGUISwitch, useHorizLineLaplacianSwitch, usePopupGUISwitch, userDir, useVertLineLaplacianSwitch, util, VERSION, WHITE, widthWindmp, windmpStepSize, wrk, wXsize, wYsize, xDbug, xmlDir, xPentrance, xPexit, yDbug, yPentrance, yPexit, yTitle
 
Constructor Summary
Sg2fbl()
          Sg2wrk() - Create WorkingStack instance
Sg2fbl(int initialStackSize)
          Sg2fbl() - Create Final Blob List (FBL) database Note: we will put data into this instance as required.
 
Method Summary
static boolean calcFBLrectangle()
          calcFBLrectangle() - compute rectangle from the FBL (x,y) stack The data is saved in the static [minX:maxX, minY:maxY].
 boolean calcMinEnclosingRectangle()
          calcMinEnclosingRectangle() - compute the minimum enclosing rectangle for the FBL and save it in [minX, maxX, minY, maxY].
static void clearFBL()
          clearFBL() - clear the FBL data counters and hash table but not the data in the arrays (to save time).
 DbBoundary cvtFBLdataToBoundary(DbBoundary bnd)
          cvtFBLdataToBoundary() - convert a FBL to a dynamic boundary object with the size of FBL being topfbl.
 java.awt.Point[] cvtFBLdataToXYlist()
          cvtFBLdataToXYlist() - convert a FBL to a xyList[] pf Points.
static java.lang.String cvtFBLtoStr(java.lang.String msg)
          cvtFBLtoStr() - convert the current FBL and INTERIOR_FBL into a string
static java.lang.String cvtFblXYListToStr(int[] xyList, java.lang.String msg)
          cvtFblXYListToStr() - convert the compressed FBL XY list into a string
 java.awt.Point getCentroidFBL()
          getCentroidFBL() - compute the centroid of the FBL if not null
static Sg2fbl getFBL(int n)
          getFBL() - get n'th FBL value instance
 int[] getFblXYlist()
          getFblXYlist() - get a compressed array of FBL (x,y) coordinates.
 int growFBL(int newSize)
          growFBL() - grow the fblList[] Final Blob List (FBL) tables currently set to sizeMaxFBL if the new size is less than sizeMaxFBL.
 void initFBL(int maxFBLsize, boolean resetFlag)
          initFBL() - initialize the FBL data structures
 DbBoundary mapFBLtoBnd(DbBoundary bnd, boolean useMER_RLM2BNDflag)
          mapFBLtoBnd() - compute the spot boundary given the FBL.
static Sg2fbl popFBL()
          popFBL() - pop top FBL value if not empty
 void pushFBL(int x, int y, int g, int cc)
          pushFBL() - if (x,y) is not in the FBL, then push (x,y,g,cc) into the working FBL.
 int pushXYintoFBL(int x, int y)
          pushXYintoFBL() - push (x,y) into FBL if (x,y) NEQ top pixel.
static void reset()
          reset() - reset any resources that must be reset for the next run of the segmenter.
static void setFBL(int n, int x, int y, int g, int cc)
          setFBL() - save (x,y,g,cc) in the current FBL instance n'th entry Also build the MER [merxp1:merxp2, meryp1:meryp2]
static void setFBLC(int n, int cc)
          setFBLC() - set (cc) in the current FBL instance n'th entry
static void setFBLG(int n, int g)
          setFBLG() - set (g) in the current FBL instance n'th entry
static void setFBLGC(int n, int g, int cc)
          setFBLGC() - set (g,cc) in the current FBL instance n'th entry
static void setFBLXY(int n, int x, int y)
          setFBLXY() - save (x,y) in the current FBL instance n'th entry Also build the MER [merxp1:merxp2, meryp1:meryp2]
 int setFblXYlist(int[] xyList, boolean addGCCfromPixFlag)
          setFblXYlist() - set the FBL from a compressed array of FBL (x,y) coordinates generated with getFblXYlist.
 
Methods inherited from class Seg2Dgel.Sg2glb
get2D, get2D, getPixLineBuf, getPixLineBuf, initGlb, isDBwindow, isDBwindow, put2Dbuf, resetGlb, set2D, set2D, setPixLineBuf, setPixLineBuf, showReportStatus
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

fblList

public static Sg2fbl[] fblList
List of FBL points [0:topfbl-1] but allocated to max size [0:sizeMaxFBL-1]


sizeMaxFBL

public static int sizeMaxFBL
Max # of FBLs. Defaults to MAX_INTERIOR_FBL_SIZE


topfbl

public static int topfbl
Top of the current FBL stack. This may include CC pixels as well as PCC pixels.


ccTopFBL

public static int ccTopFBL
Top (i.e. size) of central core pixels within the current FBL stack. This lets us keep growing the FBL by adding PCC (Propagated Cental Core) pixels after the Central Core pixels have been well defined.


minX

public static int minX
minimum min X enclosing rectangle if used


maxX

public static int maxX
minimum max X enclosing rectangle if used


minY

public static int minY
minimum min Y enclosing rectangle if used


maxY

public static int maxY
minimum max Y enclosing rectangle if used


centroid

public static java.awt.Point centroid
Centroid of FBL when computed


x

short x
FBL instance: x coordinate


y

short y
FBL instance: y coordinate


g

int g
FBL instance: g gray value


cc

int cc
FBL instance: cc central core value

Constructor Detail

Sg2fbl

public Sg2fbl(int initialStackSize)
Sg2fbl() - Create Final Blob List (FBL) database Note: we will put data into this instance as required.


Sg2fbl

public Sg2fbl()
Sg2wrk() - Create WorkingStack instance

Method Detail

reset

public static void reset()
reset() - reset any resources that must be reset for the next run of the segmenter.


initFBL

public void initFBL(int maxFBLsize,
                    boolean resetFlag)
initFBL() - initialize the FBL data structures


clearFBL

public static void clearFBL()
clearFBL() - clear the FBL data counters and hash table but not the data in the arrays (to save time). This should not be a problem since we only access the FBL[] and hashFBL data by index or key.


growFBL

public final int growFBL(int newSize)
growFBL() - grow the fblList[] Final Blob List (FBL) tables currently set to sizeMaxFBL if the new size is less than sizeMaxFBL. If it exists already, then copy the previous data if the new array is larger. Also call growWS(newSize) to regrow the Working Stack (WS) as well. If the size is < 0, then do not copy the data.

Parameters:
newSize - of the FBL
Returns:
size which may be larger if regrown.

setFBLGC

public static final void setFBLGC(int n,
                                  int g,
                                  int cc)
setFBLGC() - set (g,cc) in the current FBL instance n'th entry

Parameters:
n - is the n'th FBL instance
g - is the gray value to set
cc - is the central core value to set

setFBLG

public static final void setFBLG(int n,
                                 int g)
setFBLG() - set (g) in the current FBL instance n'th entry

Parameters:
n - is the n'th FBL instance
g - is the gray value to set

setFBLC

public static final void setFBLC(int n,
                                 int cc)
setFBLC() - set (cc) in the current FBL instance n'th entry

Parameters:
n - is the n'th FBL instance
cc - is the central core value to set

setFBL

public static final void setFBL(int n,
                                int x,
                                int y,
                                int g,
                                int cc)
setFBL() - save (x,y,g,cc) in the current FBL instance n'th entry Also build the MER [merxp1:merxp2, meryp1:meryp2]

Parameters:
n - is the nth value in the FBL list to save the values
x - is the x value to save
y - is the y value to save
g - is the gray value to save
cc - is the central core value to save

setFBLXY

public static final void setFBLXY(int n,
                                  int x,
                                  int y)
setFBLXY() - save (x,y) in the current FBL instance n'th entry Also build the MER [merxp1:merxp2, meryp1:meryp2]

Parameters:
n - is the nth value in the FBL list to save the values
x - is the x value to save
y - is the y value to save

pushFBL

public final void pushFBL(int x,
                          int y,
                          int g,
                          int cc)
pushFBL() - if (x,y) is not in the FBL, then push (x,y,g,cc) into the working FBL. Grow the FBL, WS and hash table if needed. Also build the MER [merxp1:merxp2, meryp1:meryp2]

Parameters:
x - is the x value to save
y - is the y value to save
g - is the gray value to save
cc - is the central core value to save

popFBL

public static final Sg2fbl popFBL()
popFBL() - pop top FBL value if not empty

Returns:
top Sg2fbl entry of the FBL stack, null if empty

getFBL

public static final Sg2fbl getFBL(int n)
getFBL() - get n'th FBL value instance

Parameters:
n - is the n'th FBL instance
Returns:
nth entry in the the FBL stack

pushXYintoFBL

public int pushXYintoFBL(int x,
                         int y)
pushXYintoFBL() - push (x,y) into FBL if (x,y) NEQ top pixel. This prevents pushing repeated x,y values. Grow the structure lists if need be.

Parameters:
x - is the X coordinate to push
y - is the Y coordinate to push
Returns:
the new length of the FBL

calcFBLrectangle

public static boolean calcFBLrectangle()
calcFBLrectangle() - compute rectangle from the FBL (x,y) stack The data is saved in the static [minX:maxX, minY:maxY].

Returns:
true if the rectangle exists

cvtFBLtoStr

public static java.lang.String cvtFBLtoStr(java.lang.String msg)
cvtFBLtoStr() - convert the current FBL and INTERIOR_FBL into a string

Returns:
the FBL as a string

getCentroidFBL

public java.awt.Point getCentroidFBL()
getCentroidFBL() - compute the centroid of the FBL if not null

Returns:
centroid if it exists, else (0,0)

getFblXYlist

public int[] getFblXYlist()
getFblXYlist() - get a compressed array of FBL (x,y) coordinates. The array xyList[0:topfbl-1] contains entries of the form ( (fblList[i].x << 16) | fblList[i].y )

Returns:
list of FBL (x,y) coordinates, null if list is empty.

setFblXYlist

public int setFblXYlist(int[] xyList,
                        boolean addGCCfromPixFlag)
setFblXYlist() - set the FBL from a compressed array of FBL (x,y) coordinates generated with getFblXYlist. It clears the ccTopFBL.

Parameters:
xyList - data [0:topfbl-1] contains entries of the form ( (x << 16) | y) )
addGCCfromPixFlag - to get the g and cc data from pix1 and pix3.
Returns:
size of the topfbl, if 0 - no change

cvtFblXYListToStr

public static java.lang.String cvtFblXYListToStr(int[] xyList,
                                                 java.lang.String msg)
cvtFblXYListToStr() - convert the compressed FBL XY list into a string

Parameters:
xyList - data [0:topfbl-1] contains entries of the form ( (x << 16) | y) )
msg - to add to printout
Returns:
the FBL as a string

calcMinEnclosingRectangle

public boolean calcMinEnclosingRectangle()
calcMinEnclosingRectangle() - compute the minimum enclosing rectangle for the FBL and save it in [minX, maxX, minY, maxY].

Returns:
DbBoundary boundary instance allocated here

cvtFBLdataToBoundary

public DbBoundary cvtFBLdataToBoundary(DbBoundary bnd)
cvtFBLdataToBoundary() - convert a FBL to a dynamic boundary object with the size of FBL being topfbl. Create the DbBoundary instance. (if it does not exist?) If it does, grow it if need be. Also compute the M.E.R. (Minimum Enclosing Rectangle) for the fbl.

Parameters:
bnd - is the boundary generated from the FBL.
Returns:
DbBoundary boundary instance allocated here, null if no FBL

cvtFBLdataToXYlist

public java.awt.Point[] cvtFBLdataToXYlist()
cvtFBLdataToXYlist() - convert a FBL to a xyList[] pf Points.

Returns:
Point list of xy coordinates in the FBL

mapFBLtoBnd

public DbBoundary mapFBLtoBnd(DbBoundary bnd,
                              boolean useMER_RLM2BNDflag)
mapFBLtoBnd() - compute the spot boundary given the FBL.

Parameters:
bnd - to generate
useMER_RLM2BNDflag - if true cvt from existing M.E.R.
Returns:
the boundary