[vtkusers] Canny - TCL to C++ conversion
    Bahr, Brian 
    BBahr at SARK.COM
       
    Fri Oct  8 10:59:14 EDT 2004
    
    
  
More specifically, I am trying to write a Canny filter in C++.  I am
using the Canny.tcl file supplied by VTK at the following address...
http://public.kitware.com/cgi-bin/viewcvs.cgi/*checkout*/Graphics/Testin
g/Tcl/Canny.tcl?root=VTK&content-type=text/plain
It seems that most of the classes and methods used in this TCL file map
directly to C++ VTK classes and methods.  I just can't quite get it
right.  Here is the C++ that I am working with...
		vtkJPEGReader* imageInReader = vtkJPEGReader::New();
		imageInReader->SetFileName("MyJPEG.jpg");
		vtkImageLuminance* il = vtkImageLuminance::New();
		il->SetInput(imageInReader->GetOutput());
		il->Update();
		vtkImageCast* ic = vtkImageCast::New();
		ic->SetOutputScalarTypeToFloat();
		ic->SetInput(il->GetOutput());
		ic->Update();
		//smooth the image
		vtkImageGaussianSmooth* pGaussian =
vtkImageGaussianSmooth::New();
		pGaussian->SetInput(ic->GetOutput());
		pGaussian->SetRadiusFactors(RFx,RFy,RFz);
		pGaussian->SetReleaseDataFlag(1);
		pGaussian->Update();
		//gradient the image
		vtkImageGradient* pGradient = vtkImageGradient::New();
		pGradient->SetInput(pGaussian->GetOutput());
		pGradient->SetDimensionality(2);
		pGradient->SetReleaseDataFlag(1);
		pGradient->Update();
		vtkImageMagnitude* pMagnitude =
vtkImageMagnitude::New();
		pMagnitude->SetInput(pGradient->GetOutput());
		pMagnitude->Update();
		vtkImageNonMaximumSuppression* pNonMax =
vtkImageNonMaximumSuppression::New();
		pNonMax->SetMagnitudeInput(pMagnitude->GetOutput());
		pNonMax->SetVectorInput(pGradient->GetOutput());
		pNonMax->SetDimensionality(2);
		pNonMax->Update();
		vtkImageConstantPad* pPad = vtkImageConstantPad::New();
		pPad->SetInput(pGradient->GetOutput());
		pPad->SetOutputNumberOfScalarComponents(3);
		pPad->SetConstant(0);
		pPad->Update();
		
		vtkImageToStructuredPoints* i2sp1 =
vtkImageToStructuredPoints::New();
		i2sp1->SetInput(pNonMax->GetOutput());
		i2sp1->SetVectorInput(pPad->GetOutput());
		i2sp1->Update();
		//link edgles
		vtkLinkEdgels* pLink = vtkLinkEdgels::New();
		pLink->SetInput((vtkImageData*)i2sp1->GetOutput());
		pLink->SetGradientThreshold(2);
		pLink->Update();
		//threshold links
		vtkThreshold* pThreshold = vtkThreshold::New();
		pThreshold->SetInput((vtkDataSet*)pLink->GetOutput());
		pThreshold->ThresholdByUpper(10);
		pThreshold->AllScalarsOff();
		pThreshold->Update();
		vtkGeometryFilter* pGeomFilter =
vtkGeometryFilter::New();
		pGeomFilter->SetInput((vtkDataSet
*)pThreshold->GetOutput());
		pGeomFilter->Update();
		vtkImageToStructuredPoints* i2sp =
vtkImageToStructuredPoints::New();
		i2sp->SetInput(pMagnitude->GetOutput());
		i2sp->SetVectorInput(pPad->GetOutput());
		i2sp->Update();
		//subpixel them
		vtkSubPixelPositionEdgels* spe =
vtkSubPixelPositionEdgels::New();
		spe->SetInput((vtkPolyData *)pGeomFilter->GetOutput());
		spe->SetGradMaps(i2sp->GetOutput());
		spe->Update();
		vtkStripper* strip = vtkStripper::New();
		strip->SetInput(spe->GetOutput());
		strip->Update();
		vtkPolyDataMapper* dsm = vtkPolyDataMapper::New();
		dsm->SetInput(strip->GetOutput());
		//dsm->SetStartVisibilityOff();
		dsm->Update();
		vtkActor* actor = vtkActor::New();
		actor->SetMapper(dsm);
//[planeActor GetProperty] SetAmbient 1.0
//[planeActor GetProperty] SetDiffuse 0.0
		//render
		vtkRenderer *ren1 = vtkRenderer::New();
		ren1->AddActor(actor);
		vtkRenderWindow *renWin = vtkRenderWindow::New();
		renWin->OffScreenRenderingOn();
		renWin->AddRenderer(ren1);
		renWin->Render();
		//get contents from window into image
		vtkWindowToImageFilter *w2if =
vtkWindowToImageFilter::New();
		w2if->SetInput(renWin); 
		this->pImage = w2if->GetOutput();  //where pImage is
vtkImageData*
-----Original Message-----
From: Daniel Sidobre [mailto:daniel.sidobre at laas.fr] 
Sent: Friday, October 08, 2004 10:34 AM
To: Bahr, Brian
Cc: vtkusers at vtk.org
Subject: [FILTERED] - [vtkusers] Canny - TCL to C++ conversion -
Bayesian Filter detected spam
Vous avez ecrit (dans votre message du 8 10 2004)
 > I am trying to create a Canny filter in C++.  I can successfully run
the
 > Canny.tcl example, but I am having a hard time converting the Tcl
code
 > into a C++ equivalent.
 Hi,
 So, I suppose you have write some Tcl code to create some Canny
 filter that you run successfully. And you want to translate it in c++.
 As a so general question the response is : it's probably impossible
 as Tcl has many concept that doesn't exist in c++. For example you
 can redefine all functions, you can evaluate expressions in differents
 stack levels, ...
 But, if from the begening of your writing, you have had in mind that
 you want to translate to c++, the job may be pretty easy. For each
 line add some comas and brackets and suppress some dollars.
 Daniel
    
    
More information about the vtkusers
mailing list