ITK学习笔记:图像FFT

就不磨叽了,直接上代码。

#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkWrapPadImageFilter.h"
#include "itkForwardFFTImageFilter.h"
#include "itkComplexToModulusImageFilter.h"
#include "itkIntensityWindowingImageFilter.h"
#include "itkFFTShiftImageFilter.h"

int main( int argc, char* argv[] )
{
	
	const char * inputFileName = "F:\\DIPcode\\SIMC\\imagesrc\\2.jpg";//argv[1];
	const char * outputFileName = "F:\\DIPcode\\SIMC\\my.tif";//argv[2];

	const unsigned int Dimension = 2;

	//typedef unsigned char                              PixelType;
	typedef float                              PixelType;//定义像素类型。
	typedef itk::Image< PixelType, Dimension > RealImageType;

	typedef itk::ImageFileReader< RealImageType >  ReaderType;
	ReaderType::Pointer reader = ReaderType::New();
	reader->SetFileName( inputFileName );

	
	typedef itk::ForwardFFTImageFilter< RealImageType > ForwardFFTFilterType;
	typedef ForwardFFTFilterType::OutputImageType ComplexImageType;
	ForwardFFTFilterType::Pointer forwardFFTFilter = ForwardFFTFilterType::New();
	forwardFFTFilter->SetInput( reader->GetOutput() );
	//计算复图像的系数。
	typedef itk::ComplexToModulusImageFilter< ComplexImageType, RealImageType >
		ComplexToModulusFilterType;
	ComplexToModulusFilterType::Pointer complexToModulusFilter
		= ComplexToModulusFilterType::New();
	complexToModulusFilter->SetInput( forwardFFTFilter->GetOutput() );

	// Window and shift the output for visualization.
	typedef unsigned char                           OutputPixelType;//8位
	//typedef unsigned short                           OutputPixelType;//16位
	//在指定的范围内进行线性变换,低于该区域的映射为某一常数,高于高区域的映射为某一常数
	typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
	typedef itk::IntensityWindowingImageFilter< RealImageType, OutputImageType >
		WindowingFilterType;
	WindowingFilterType::Pointer windowingFilter
		= WindowingFilterType::New();
	windowingFilter->SetInput( complexToModulusFilter->GetOutput() );
	windowingFilter->SetWindowMinimum( 0 );
	windowingFilter->SetWindowMaximum( 20000 );

	//将四角的频率成分移动中心位置
	typedef itk::FFTShiftImageFilter< OutputImageType, OutputImageType > FFTShiftFilterType;
	FFTShiftFilterType::Pointer fftShiftFilter = FFTShiftFilterType::New();
	fftShiftFilter->SetInput( windowingFilter->GetOutput() );

	typedef itk::ImageFileWriter< OutputImageType > WriterType;
	WriterType::Pointer writer = WriterType::New();
	writer->SetFileName( outputFileName );
	writer->SetInput( fftShiftFilter->GetOutput() );
	try
	{
		writer->Update();
	}
	catch( itk::ExceptionObject & error )
	{
		std::cerr << "Error: " << error << std::endl;
		return EXIT_FAILURE;
	}

	return EXIT_SUCCESS;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值