canny算子
void Segment()
{
ImageType::Pointer sliceimage = image_data;
itk::TimeProbe clock;
clock.Start();
//-------------------------------------------
//---------canny
float variance = ;
float maximumError = ;
float upperThreshold = ;
typedef itk::MedianImageFilter<ImageType, ImageType > FilterType;
FilterType::Pointer medianFilter = FilterType::New();
FilterType::InputSizeType radius;
radius.Fill();
medianFilter->SetRadius(radius);
medianFilter->SetInput( sliceimage);
//-------------------------------------------
typedef itk::BinaryBallStructuringElement<PixelType, ImageDimension > SRType;
SRType kernel;
kernel.SetRadius( );
kernel.CreateStructuringElement();
//typedef itk::WhiteTopHatImageFilter<ImageType,ImageType,SRType > TopHatFilterType;
typedef itk::BlackTopHatImageFilter<ImageType,ImageType,SRType > TopHatFilterType;
TopHatFilterType::Pointer topHatFilter = TopHatFilterType::New();
topHatFilter->SetInput( medianFilter->GetOutput() );
topHatFilter->SetSafeBorder( false);
topHatFilter->SetKernel( kernel );
//------------------------------------------------------------
typedef double RealPixelType; // Operations
typedef itk::Image< RealPixelType, ImageDimension> RealImageType;
typedef itk::CastImageFilter< ImageType, RealImageType > CastToRealFilterType;
typedef itk::CannyEdgeDetectionImageFilter< RealImageType, RealImageType > CannyFilterType;
typedef itk::RescaleIntensityImageFilter< RealImageType, ImageType > RescaleFilterType;
CastToRealFilterType::Pointer toReal = CastToRealFilterType::New();
CannyFilterType::Pointer cannyFilter = CannyFilterType::New();
RescaleFilterType::Pointer rescale = RescaleFilterType::New();
toReal->SetInput( topHatFilter->GetOutput() );
cannyFilter->SetInput( toReal->GetOutput() );
rescale->SetInput( cannyFilter->GetOutput() );
cannyFilter->SetVariance( variance );
cannyFilter->SetUpperThreshold( upperThreshold );
cannyFilter->SetMaximumError( maximumError );
//------------------------------------------------------------
rescale->Update();
image_canny = rescale->GetOutput();
coronary_data = image_canny;
clock.Stop();
std::cout << "Algorithm Total time: " << clock.GetTotal() << std::endl;
}