[Insight-users] Submission: FullyConnectedImageFilter to comp lement ConnectedComponentImageFilter

Miller, James V (Research) millerjv at crd.ge.com
Mon, 16 Feb 2004 08:48:04 -0500


Zach, 

If the only real difference is checking vertex connected neighbors as well 
as face connected neighbors, couldn't the same code as
ConnectedComponentImageFilter
be used by "activating" a few more neighbors in the iterator?

In 2D, the ConnectedComponentImageFilter uses a neighborhood structure like

    .  x  .
    x  x  .
    .  .  .

with only the elements marked with "x" being activated.  If we put a mode
into the 
ConnectedConfidenceImageFilter to switch between face and face+vertex
connected 
neighbors, then we would toggle between an interator set up like above and
one
like

    x  x  .
    x  x  .
    .  .  .

Then the same algorithm code can be used, and the mode would just change the
setup code.

It looks like your version of the code actually checks the neighborhood

    x  x  x
    x  x  x
    x  x  x

which checks pixels in front of and behind the current pixel.  Isn't this
doing more work
than necessary?

Jim



-----Original Message-----
From: Zachary Pincus [mailto:zpincus at stanford.edu]
Sent: Sunday, February 15, 2004 11:10 PM
To: insight-users at itk.org
Subject: [Insight-users] Submission: FullyConnectedImageFilter to
complement ConnectedComponentImageFilter


Hello,

Here is an image filter that labels thin contours in binary images.

While ITK includes a ConnectedComponentImageFilter, this filter only 
works for face-connected objects (in 2-d, that's 4-connected), such as 
blobs. For single-pixel-thick contours, one needs to trace all the 
diagonal connections too (in 2-d, that's 8-connected), so this filter 
is not sufficient.

I have modified itkConnectedComponentImageFilter to trace contours 
across diagonals and faces in n dimensions. (It was a simple, but not 
totally trivial modification.) Here is my code, in case anyone needs 
it, or the ITK maintainers feel that it would be worth including in the 
repository.

(Note that I tried to integrate this into the original 
itkConnectedComponentImageFilter code to avoid excess code duplication, 
but that became really kludgy and unworkable due to the interface 
differences between ShapedNeighborhoodIterator::Iterator and 
Neighborhood::Iterator -- this is a bit of a pain, really.)

Also, in the future, what is the preferred method of code submission?

Zach Pincus

Department of Biochemistry and Program in Biomedical Informatics
Stanford University School of Medicine