From c580136bb7f42aba80cf5798691d98841b13d55a Mon Sep 17 00:00:00 2001 From: Julien Michel <julien.michel@c-s.fr> Date: Thu, 31 May 2007 15:36:25 +0000 Subject: [PATCH] =?UTF-8?q?Derni=C3=A8re=20corrections=20extraction=20de?= =?UTF-8?q?=20route.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtractRoadByStepsExample.cxx | 25 ++++++++----- .../FeatureExtraction/ExtractRoadExample.cxx | 37 +++++++++++++++---- 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx b/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx index 2b9fd5bcaa..2f0e8023ad 100755 --- a/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx +++ b/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx @@ -188,7 +188,7 @@ int main( int argc, char * argv[] ) // Software Guide : BeginCodeSnippet double sigma = alpha*(1.2/resolution+1); typedef itk::GradientRecursiveGaussianImageFilter<InternalImageType, - VectorImageType> GradientFilterType; + VectorImageType> GradientFilterType; GradientFilterType::Pointer gradientFilter = GradientFilterType::New(); gradientFilter->SetSigma(sigma); gradientFilter->SetInput(sqrtFilter->GetOutput()); @@ -207,7 +207,8 @@ int main( int argc, char * argv[] ) // Software Guide : BeginCodeSnippet typedef otb::NeighborhoodScalarProductFilter<VectorImageType, InternalImageType,InternalImageType> NeighborhoodScalarProductType; - NeighborhoodScalarProductType::Pointer scalarFilter = NeighborhoodScalarProductType::New(); + NeighborhoodScalarProductType::Pointer scalarFilter + = NeighborhoodScalarProductType::New(); scalarFilter->SetInput(gradientFilter->GetOutput()); // Software Guide : EndCodeSnippet @@ -227,7 +228,8 @@ int main( int argc, char * argv[] ) RemoveIsolatedByDirectionType::Pointer removeIsolatedByDirectionFilter = RemoveIsolatedByDirectionType::New(); removeIsolatedByDirectionFilter->SetInput(scalarFilter->GetOutput()); - removeIsolatedByDirectionFilter->SetInputDirection(scalarFilter->GetOutputDirection()); + removeIsolatedByDirectionFilter + ->SetInputDirection(scalarFilter->GetOutputDirection()); // Software Guide : EndCodeSnippet @@ -242,7 +244,8 @@ int main( int argc, char * argv[] ) // Software Guide : BeginCodeSnippet typedef otb::RemoveWrongDirectionFilter<InternalImageType, InternalImageType,InternalImageType> RemoveWrongDirectionType; - RemoveWrongDirectionType::Pointer removeWrongDirectionFilter = RemoveWrongDirectionType::New(); + RemoveWrongDirectionType::Pointer removeWrongDirectionFilter + = RemoveWrongDirectionType::New(); removeWrongDirectionFilter->SetInput(removeIsolatedByDirectionFilter->GetOutput()); removeWrongDirectionFilter->SetInputDirection(scalarFilter->GetOutputDirection()); @@ -261,7 +264,8 @@ int main( int argc, char * argv[] ) NonMaxRemovalByDirectionType::Pointer nonMaxRemovalByDirectionFilter = NonMaxRemovalByDirectionType::New(); nonMaxRemovalByDirectionFilter->SetInput(removeWrongDirectionFilter->GetOutput()); - nonMaxRemovalByDirectionFilter->SetInputDirection(scalarFilter->GetOutputDirection()); + nonMaxRemovalByDirectionFilter + ->SetInputDirection(scalarFilter->GetOutputDirection()); // Software Guide : EndCodeSnippet @@ -274,7 +278,8 @@ int main( int argc, char * argv[] ) // Software Guide : BeginCodeSnippet typedef otb::VectorizationPathListFilter<InternalImageType, InternalImageType,PathType> VectorizationFilterType; - VectorizationFilterType::Pointer vectorizationFilter = VectorizationFilterType::New(); + VectorizationFilterType::Pointer vectorizationFilter + = VectorizationFilterType::New(); vectorizationFilter->SetInput(nonMaxRemovalByDirectionFilter->GetOutput()); vectorizationFilter->SetInputDirection(scalarFilter->GetOutputDirection()); vectorizationFilter->SetAmplitudeThreshold(atof(argv[8])); @@ -299,7 +304,8 @@ int main( int argc, char * argv[] ) simplifyPathListFilter->SetInput(vectorizationFilter->GetOutput()); typedef otb::BreakAngularPathListFilter<PathType> BreakAngularPathType; - BreakAngularPathType::Pointer breakAngularPathListFilter = BreakAngularPathType::New(); + BreakAngularPathType::Pointer breakAngularPathListFilter + = BreakAngularPathType::New(); breakAngularPathListFilter->SetMaxAngle(M_PI/8.); breakAngularPathListFilter->SetInput(simplifyPathListFilter->GetOutput()); @@ -323,7 +329,7 @@ int main( int argc, char * argv[] ) // Software Guide : BeginCodeSnippet typedef otb::LinkPathListFilter<PathType> LinkPathType; LinkPathType::Pointer linkPathListFilter = LinkPathType::New(); - linkPathListFilter->SetDistanceThreshold(25.0/resolution);//research area of 25 m + linkPathListFilter->SetDistanceThreshold(25.0/resolution); linkPathListFilter->SetAngularThreshold(M_PI/8); linkPathListFilter->SetInput(removeTortuousPathListFilter->GetOutput()); @@ -366,7 +372,8 @@ int main( int argc, char * argv[] ) // Software Guide : BeginCodeSnippet InternalImageType::Pointer output = InternalImageType::New(); - output->SetRegions(multispectralReader->GetOutput()->GetLargestPossibleRegion()); + output->SetRegions(multispectralReader->GetOutput() + ->GetLargestPossibleRegion()); output->Allocate(); output->FillBuffer(0.0); diff --git a/Examples/FeatureExtraction/ExtractRoadExample.cxx b/Examples/FeatureExtraction/ExtractRoadExample.cxx index 438bf6bf3a..d6cae2f856 100755 --- a/Examples/FeatureExtraction/ExtractRoadExample.cxx +++ b/Examples/FeatureExtraction/ExtractRoadExample.cxx @@ -60,6 +60,10 @@ #include "itkRescaleIntensityImageFilter.h" #include "otbMath.h" +#include "itkInvertIntensityImageFilter.h" +#include "itkGrayscaleDilateImageFilter.h" +#include "itkBinaryBallStructuringElement.h" + int main( int argc, char * argv[] ) { @@ -370,30 +374,49 @@ int main( int argc, char * argv[] ) // // Software Guide : EndLatex - writer->SetFileName(argv[2]); - // Software Guide : BeginCodeSnippet roadExtractionFilter->SetInput(reader->GetOutput()); drawingFilter->SetInput(blackBackground); drawingFilter->SetInputPath(roadExtractionFilter->GetOutput()); rescaleFilter->SetInput(drawingFilter->GetOutput()); - writer->SetInput(rescaleFilter->GetOutput()); + // Software Guide : EndCodeSnippet // Software Guide : BeginLatex // // The update of the pipeline is triggered by the \code{Update()} method - // of the writing filter. + // of the rescale intensity filter. // // Software Guide : EndLatex // Software Guide : BeginCodeSnippet - writer->Update(); + rescaleFilter->Update(); // Software Guide : EndCodeSnippet + + // output image enhancement + typedef itk::BinaryBallStructuringElement<OutputPixelType,Dimension> StructuringElementType; + typedef itk::GrayscaleDilateImageFilter<OutputImageType,OutputImageType,StructuringElementType> DilateFilterType; + typedef itk::InvertIntensityImageFilter<OutputImageType,OutputImageType> InvertFilterType; + + StructuringElementType se; + se.SetRadius(1); + se.CreateStructuringElement(); + + DilateFilterType::Pointer dilater = DilateFilterType::New(); + + dilater->SetInput(rescaleFilter->GetOutput()); + dilater->SetKernel(se); + + InvertFilterType::Pointer invertFilter = InvertFilterType::New(); + invertFilter->SetInput(dilater->GetOutput()); + + writer->SetFileName(argv[2]); + writer->SetInput(invertFilter->GetOutput()); + writer->Update(); // Software Guide : BeginLatex // @@ -401,8 +424,8 @@ int main( int argc, char * argv[] ) // the road extraction filter to a fusionned Quickbird image. // \begin{figure} // \center - // \includegraphics[width=0.25\textwidth]{qb_ExtractRoad_pretty.eps} - // \includegraphics[width=0.25\textwidth]{ExtractRoadOutput.eps} + // \includegraphics[width=0.44\textwidth]{qb_ExtractRoad_pretty.eps} + // \includegraphics[width=0.44\textwidth]{ExtractRoadOutput.eps} // \itkcaption[Road extraction filter application]{Result of applying // the \doxygen{otb}{RoadExtractionFilter} to a fusionned Quickbird // image. From left to right : original image, extracted road with their -- GitLab