小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ITK-基于itkUnaryFunctorImageFilter實(shí)現(xiàn)圖像反轉(zhuǎn)

 翟天保的圖書館 2024-12-24 發(fā)布于上海

作者:翟天保Steven
版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處

原理

? ? ? ???itkUnaryFunctorImageFilter是 ITK(Insight Segmentation and Registration Toolkit)中的一個(gè)模板類,它并不是一個(gè)函數(shù)。這個(gè)類用于對(duì)圖像中的每個(gè)像素應(yīng)用一個(gè)一元函數(shù)(即只接受一個(gè)輸入?yún)?shù)并返回一個(gè)輸出值的函數(shù)),從而生成一個(gè)新的圖像。它在圖像的逐像素處理中非常有用,例如圖像灰度變換、閾值化、對(duì)比度調(diào)整等操作。

? ? ? ???通過(guò)遍歷輸入圖像的每個(gè)像素,將每個(gè)像素值作為輸入傳遞給用戶定義的一元函數(shù)對(duì)象(functor)。這個(gè)函數(shù)對(duì)象根據(jù)特定的算法對(duì)輸入像素值進(jìn)行處理,并返回一個(gè)新的像素值。這些新的像素值被組合成一個(gè)新的輸出圖像,輸出圖像的大小、維度和空間信息與輸入圖像相同。

? ? ? ?而圖像反轉(zhuǎn)就是將像素黑變白,白變黑,假設(shè)像素?cái)?shù)值范圍0-255,就用函數(shù)y=255-x即可實(shí)現(xiàn)反轉(zhuǎn)。

? ? ? ?本文介紹如何用itkUnaryFunctorImageFilter實(shí)現(xiàn)圖像反轉(zhuǎn)。

環(huán)境準(zhǔn)備

參見:Windows下用CMake編譯ITK及配置測(cè)試_itk配置-CSDN博客

功能解析

1.引入必要的頭文件:

#include <itkImage.h>
#include <itkImageFileReader.h>
#include <itkImageFileWriter.h>
#include <itkUnaryFunctorImageFilter.h>
#include <itkPNGImageIOFactory.h>

2.定義一元模板函數(shù):

// 定義像素值反轉(zhuǎn)的函數(shù)對(duì)象
template <typename TInputPixel>
struct InvertPixelFunctor
{
	using InputPixelType = TInputPixel;
	using OutputPixelType = TInputPixel;

	OutputPixelType operator()(const InputPixelType &input) const
	{
		return static_cast<OutputPixelType>(255 - input);
	}
};

3.初始化:

// 定義圖像類型
typedef itk::Image<unsigned char, 2> CharImageType;
typedef itk::ImageFileReader<CharImageType> ReaderType;
typedef itk::ImageFileWriter<CharImageType> WriterType;
// 注冊(cè) PNG 格式支持
itk::PNGImageIOFactory::RegisterOneFactory();
// 創(chuàng)建讀取器和寫入器
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
// 設(shè)置要讀取和寫入的文件
reader->SetFileName("BrainProtonDensitySlice.png");
writer->SetFileName("inverted_image.png");

4.創(chuàng)建像素值反轉(zhuǎn)濾波器:

// 創(chuàng)建像素值反轉(zhuǎn)濾波器
typedef itk::UnaryFunctorImageFilter<CharImageType, CharImageType, InvertPixelFunctor<unsigned char>> InvertFilterType;
InvertFilterType::Pointer invertFilter = InvertFilterType::New();
invertFilter->SetInput(reader->GetOutput());

5.連接過(guò)濾器輸出到寫入器并執(zhí)行寫入操作:

// 將反轉(zhuǎn)后的圖像作為輸出圖像
writer->SetInput(invertFilter->GetOutput());
// 執(zhí)行更新
try
{
	writer->Update();
}
catch (itk::ExceptionObject& error)
{
	std::cerr << "Error: " << error << std::endl;
	return EXIT_FAILURE;
}

完整代碼

#include <itkImage.h>
#include <itkImageFileReader.h>
#include <itkImageFileWriter.h>
#include <itkUnaryFunctorImageFilter.h>
#include <itkPNGImageIOFactory.h>

// 定義像素值反轉(zhuǎn)的函數(shù)對(duì)象
template <typename TInputPixel>
struct InvertPixelFunctor
{
	using InputPixelType = TInputPixel;
	using OutputPixelType = TInputPixel;

	OutputPixelType operator()(const InputPixelType &input) const
	{
		return static_cast<OutputPixelType>(255 - input);
	}
};

int main()
{
	// 定義圖像類型
	typedef itk::Image<unsigned char, 2> CharImageType;
	typedef itk::ImageFileReader<CharImageType> ReaderType;
	typedef itk::ImageFileWriter<CharImageType> WriterType;

	// 注冊(cè) PNG 格式支持
	itk::PNGImageIOFactory::RegisterOneFactory();

	// 創(chuàng)建讀取器和寫入器
	ReaderType::Pointer reader = ReaderType::New();
	WriterType::Pointer writer = WriterType::New();

	// 設(shè)置要讀取和寫入的文件
	reader->SetFileName("BrainProtonDensitySlice.png");
	writer->SetFileName("inverted_image.png");

	// 創(chuàng)建像素值反轉(zhuǎn)濾波器
	typedef itk::UnaryFunctorImageFilter<CharImageType, CharImageType, InvertPixelFunctor<unsigned char>> InvertFilterType;
	InvertFilterType::Pointer invertFilter = InvertFilterType::New();
	invertFilter->SetInput(reader->GetOutput());

	// 將反轉(zhuǎn)后的圖像作為輸出圖像
	writer->SetInput(invertFilter->GetOutput());

	// 執(zhí)行更新
	try
	{
		writer->Update();
	}
	catch (itk::ExceptionObject& error)
	{
		std::cerr << "Error: " << error << std::endl;
		return EXIT_FAILURE;
	}

	std::cout << "Image inversion completed successfully." << std::endl;
	return EXIT_SUCCESS;
}

測(cè)試效果?

?原圖:

反轉(zhuǎn)效果:

? ? ? ?如果文章幫助到你了,可以點(diǎn)個(gè)贊讓我知道,我會(huì)很快樂~加油!

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多