-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvtkImgFilter.cxx
110 lines (85 loc) · 3.6 KB
/
vtkImgFilter.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/**
* \file: vtkImgFilter.cxx
* \author: Sankhesh Jhaveri
* \brief: defines vtkImgFilter class
**/
#include "vtkImgFilter.h"
//Constructor
vtkImgFilter::vtkImgFilter() :
readerFactory( vtkSmartPointer<vtkImageReader2Factory>::New() ),
reader( vtkSmartPointer<vtkImageReader2>::New() ),
luminanceFilter( vtkSmartPointer<vtkImageLuminance>::New() ),
castFilter( vtkSmartPointer<vtkImageCast>::New() ),
gaussianFilter( vtkSmartPointer<vtkImageGaussianSmooth>::New() ),
gradientFilter( vtkSmartPointer<vtkImageGradient>::New() ),
magnitudeFilter( vtkSmartPointer<vtkImageMagnitude>::New() ),
nonMaxFilter( vtkSmartPointer<vtkImageNonMaximumSuppression>::New() ),
padFilter( vtkSmartPointer<vtkImageConstantPad>::New() ),
im2spFilter1( vtkSmartPointer<vtkImageToStructuredPoints>::New() ),
linkFilter( vtkSmartPointer<vtkLinkEdgels>::New() ),
threshFilter( vtkSmartPointer<vtkThreshold>::New() ),
geomFilter( vtkSmartPointer<vtkGeometryFilter>::New() ),
im2spFilter2( vtkSmartPointer<vtkImageToStructuredPoints>::New() ),
sppeFilter( vtkSmartPointer<vtkSubPixelPositionEdgels>::New() ),
stripFilter( vtkSmartPointer<vtkStripper>::New() ),
mapper( vtkSmartPointer<vtkPolyDataMapper>::New() ),
outputActor( vtkSmartPointer<vtkActor>::New() )
{
castFilter->SetOutputScalarTypeToFloat();
castFilter->SetInputConnection( luminanceFilter->GetOutputPort() );
gaussianFilter->SetDimensionality( 2 );
gaussianFilter->SetInputConnection( castFilter->GetOutputPort() );
gradientFilter->SetDimensionality( 2 );
gradientFilter->SetInputConnection( gaussianFilter->GetOutputPort() );
magnitudeFilter->SetInputConnection( gradientFilter->GetOutputPort() );
nonMaxFilter->SetDimensionality( 2 );
nonMaxFilter->SetMagnitudeInput( magnitudeFilter->GetOutput() );
nonMaxFilter->SetVectorInput( gradientFilter->GetOutput() );
padFilter->SetInputConnection( gradientFilter->GetOutputPort() );
padFilter->SetOutputNumberOfScalarComponents( 3 );
padFilter->SetConstant( 0 );
im2spFilter1->SetInputConnection( nonMaxFilter->GetOutputPort() );
im2spFilter1->SetVectorInput( padFilter->GetOutput() );
linkFilter->SetInputConnection( im2spFilter1->GetOutputPort() );
linkFilter->SetGradientThreshold( 2 );
threshFilter->SetInputConnection( linkFilter->GetOutputPort() );
threshFilter->AllScalarsOff();
geomFilter->SetInputConnection( threshFilter->GetOutputPort() );
im2spFilter2->SetInputConnection( magnitudeFilter->GetOutputPort() );
im2spFilter2->SetVectorInput( padFilter->GetOutput() );
sppeFilter->SetInputConnection( geomFilter->GetOutputPort() );
sppeFilter->SetGradMaps( im2spFilter2->GetStructuredPointsOutput() );
stripFilter->SetInputConnection( sppeFilter->GetOutputPort() );
mapper->SetInputConnection( stripFilter->GetOutputPort() );
mapper->ScalarVisibilityOff();
mapper->SetColorModeToDefault();
}
void vtkImgFilter::setFilterInput(const vcl_string &filename)
{
this->reader = this->readerFactory->CreateImageReader2( filename.c_str() );
this->reader->SetFileName( filename.c_str() );
this->luminanceFilter->SetInputConnection( this->reader->GetOutputPort() );
this->luminanceFilter->Update();
}
vtkSmartPointer<vtkActor> vtkImgFilter::getOutputActor( void )
{
this->mapper->Update();
outputActor->SetMapper( mapper );
return outputActor;
}
vtkSmartPointer<vtkImageActor> vtkImgFilter::getFilterOutput( void )
{
return NULL;
}
void vtkImgFilter::SetRadius( double x[3] )
{
this->gaussianFilter->SetRadiusFactors( x );
}
void vtkImgFilter::SetStdDev( double x[3] )
{
this->gaussianFilter->SetStandardDeviations( x );
}
void vtkImgFilter::SetThreshold( double x )
{
this->threshFilter->ThresholdByUpper( x );
}