ITK之基于符号距离函数实现二值图像边缘扩展和收缩

对二值图像扩展边缘用于图像掩膜,以下思路基于符号距离函数实现其边缘扩展,上代码:

#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkSignedMaurerDistanceMapImageFilter.h"
#include "itkImageRegionIterator.h"
 
 
int main(int argc, char ** argv[])
{
	if (argc < 3)
	{
		std::cerr << "Please Input InputImage and OutputImage" << std::endl;
		return EXIT_FAILURE;
	}

	const char * inputFileName = argv[1];
	const char * outputFileName =  argv[2];
	const int 	 extendEdgeDistance = argv[3];

	typedef unsigned char InputPixelType;
	typedef float DistancePixelType;
	const unsigned short Dimension = 3;

	typedef itk::Image<InputPixelType, Dimension>		InputImageType;
	typedef itk::Image<DistancePixelType, Dimension>	DistanceImageType;
	typedef itk::ImageFileReader<InputImageType>		ReaderType;
	ReaderType::Pointer reader = ReaderType::New();
	reader->SetFileName(inputFileName);
	reader->Update();
	InputImageType::Pointer inputImage = reader->GetOutput();

	typedef  itk::SignedMaurerDistanceMapImageFilter< InputImageType, DistanceImageType > SignedMaurerDistanceMapImageFilterType;
	SignedMaurerDistanceMapImageFilterType::Pointer distanceMapImageFilter = SignedMaurerDistanceMapImageFilterType::New();
	distanceMapImageFilter->SetInput(inputImage);
	distanceMapImageFilter->Update();
	DistanceImageType::Pointer distanceImage = distanceMapImageFilter->GetOutput();

	typedef itk::ImageRegionIterator<DistanceImageType> ImageIteratorType;
	ImageIteratorType It(distanceImage, distanceImage->GetLargestPossibleRegion());
	It.GoToBegin();
	while (!It.IsAtEnd())
	{
		if (It.Get() < extendEdgeDistance)
		{
			It.Set(1);
		}
		else
		{
			It.Set(0);
		}

		++It;
	}

	typedef itk::ImageFileWriter< DistanceImageType > WriterType;
	WriterType::Pointer writer = WriterType::New();
	writer->SetFileName(outputFileName);
	writer->SetInput(distanceImage);
	try
	{
		writer->Update();
	}
	catch (itk::ExceptionObject &exp)
	{
		std::cerr << "Save File Error!" << std::endl;
		std::cerr << exp << std::endl;
		return EXIT_FAILURE;
	}

  return EXIT_SUCCESS;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值