[vtkusers] 2D/3D Threshold and link filters

Asad A. Abu-Tarif tarifa at rpi.edu
Thu Mar 1 18:59:36 EST 2001


Oops, I'm sorry.
The web-site is:
http://asad.dnsq.org/Downloads/

The file names are as mentioned in the email.

Asad
  ----- Original Message ----- 
  From: David E. Jones 
  To: Asad A. Abu-Tarif 
  Sent: Thursday, March 01, 2001 6:49 PM
  Subject: Re: [vtkusers] 2D/3D Threshold and link filters


  Asad A. Abu-Tarif wrote: 
    Hello, 
    I sent the appended message to the list about a week ago but got rejected 
    because I attached 
    the source code with the message and the email got big. 
    Anyways, I put the classes in the following web-site for download. If anyone 
    is interested, you can 
    download them from the web. 
    Asad 

    Hi vtkers, 
    I developed two classes that threshold a gradient image and link it using 
    two thresholds, strong and weak thresholds. They are attached to this email. 
    Now, I'll start by describing the intuition behind those two classes and the 
    basic idea. Then, I'll show the old pipeline (the one that's usually used) 
    and the new one (using one of the two classes attached). 

    I hope that those clases will be helpful to someone. I'll be happy to answer 
    any questions!! 

    Regards, 
    Asad 

           ___________________________________________________ 
         /                        Asad A. Abu-Tarif 
    \ 
         |   Computer Engineering. 
    | 
         |   PhD Candidate, Rensselaer Polytechnic Institute (RPI). 
    | 
         |   Research Assistant, NYS Center for Automated Technologies         | 
         |   tarifa at rpi.edu 
    | 
         |    Tel (O): 518-276-2991 
    | 
         |    Fax:  313-557-6100 
    | 
         \____________________________________________________/ 

    ================================================================ 
    * Intuition and Basic Idea: 
    After finding the gradient of an image, thresholding is usually the next 
    step. However, in a lot of practical applications you can't find a single 
    threshold that can give satisfactory results. On the other hand, it is 
    usually easier to find a threshold value at which the resulting thresholded 
    image will have all correct edgels and no false ones but it won't find all 
    of the correct edgels (false negative, if you well). It is also possible to 
    find another smaller threshold value where all the good edgels are included 
    but you've added few false edgels in the mix (false positive). 
    Having said that, a more clever thresholding approach would be to threshold 
    using the strong threshold (that results in the false negative case). Then, 
    try to extend (link) the edgels using the weak threshold. Finally, for each 
    set of connected edgels, if the total number of edgels in that link 
    (connected set of edgels) is less than a certain length value, then discard 
    that link and all of its edgels. 

    The two attached classes perform exactly this operation. The difference 
    between the two is that vtkLinkIn2DandThreshold tries to extend (link) 
    edgels in the same slice. In other words, it links edgels in 2D. On the 
    other hand, vtkLinkIn3DandThreshold tries to extend (link) edgels in the 
    same volume. In other words, it links edgels in 3D. 

    It remains to say that in vtkLinkIn2DandThreshold I used 8 neighbors to 
    connectivity. In vtkLinkIn3DandThreshold I used 26 neighbors for 
    connectivity. 

    ================================================================ 
    * Old pipeline: 
    vtkImageGradient *gradient=vtkImageGradient::New(); 
    gradient->SetInput(InputData); 

    vtkImageGradientMagnitude 
    *gradientmagnitude=vtkImageGradientMagnitude::New(); 
    gradientmagnitude->SetInput(InputData); 

    vtkImageNonMaximumSuppression 
    *suppress=vtkImageNonMaximumSuppression::New(); 
    suppress->SetVectorInput(gradient); 
    suppress->SetMagnitudeInput(gradientmagnitude); 

    vtkImageThreshold *theshold=vtkImageThreshold::New(); 
    threshold->SetInput(suppress->GetOutput()); 
    threshold->ThresholdByLower(thresholdvalue); 
    // then you can display the result or pass it through other filters. 

    ================================================================ 
    * New pipeline (using either vtkLinkIn2DandThreshold or 
    vtkLinkIn3DandThreshold): 
    vtkImageGradient *gradient=vtkImageGradient::New(); 
    gradient->SetInput(InputData); 

    vtkImageGradientMagnitude 
    *gradientmagnitude=vtkImageGradientMagnitude::New(); 
    gradientmagnitude->SetInput(InputData); 

    vtkImageNonMaximumSuppression 
    *suppress=vtkImageNonMaximumSuppression::New(); 
    suppress->SetVectorInput(gradient); 
    suppress->SetMagnitudeInput(gradientmagnitude); 

    vtkLinkIn3DandThreshold *theshold=vtkLinkIn3DandThreshold::New();   // or 
    you can use vtkLinkIn2DandThreshold 
    threshold->SetInput(suppress->GetOutput()); 
    threshold->SetStrongThreshold(strong_threshold_value); 
    threshold->SetWeakThreshold(weak_threshold_value); 
    threshold->SetShortestLink(shortest_link_value); 
    // then you can display the result or pass it through other filters. 
     

   I'd like to try your classes for work in 3D segmentation for microtomgraphy. 
   >Anyways, I put the classes in the following web-site for download. 

 Did I overlook the web-site name ?  I can't find it in
the message I received.
 Thanks in advance.
 Dave
-- 
David E Jones
Du Pont Central Research
Experimental Station, Bldg 320
Wilmington, DE 19880-0320
    
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20010301/18feec93/attachment.htm>


More information about the vtkusers mailing list