在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例图形和图像处理 → 基于itk的医学图像处理程序

基于itk的医学图像处理程序

图形和图像处理

下载此实例
  • 开发语言:C/C++
  • 实例大小:3.60KB
  • 下载次数:15
  • 浏览次数:234
  • 发布时间:2019-06-16
  • 实例类别:图形和图像处理
  • 发 布 人:crazycode
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 图像 图像处理

实例介绍

【实例简介】本处理程序功能不多,只是为了完成本人实验所需的部分,去噪,减背景值,中值滤波,伪彩色,融合; 欢迎和大家交流

【实例截图】

from clipboard

【核心代码】

#include "imageprocess.h"

#include "qmessagebox.h"
#include <qfiledialog.h>
#include <QMouseEvent>
#include <QPainter>
#include <stdio.h>
#include <fstream>  
#include <iostream>
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkMedianImageFilter.h"
#include "itkImageRegionIterator.h"
#include "itkTIFFImageIO.h"
#include "itkIntensityWindowingImageFilter.h"
#include "itkRGBPixel.h"
#include "itkCustomColormapFunction.h"
#include "itkScalarToRGBColormapImageFilter.h"
#include "itkMersenneTwisterRandomVariateGenerator.h"
using namespace std;


ImageProcess::ImageProcess(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	//original = false;
	//Medfilter = false;
	//Substract = false;
	//Process = false;
	//Fusion = false;

}



void ImageProcess::on_pushButton_Luminescence_clicked()
{
	filename = QFileDialog::getOpenFileName(this, tr("选择图像"), "", tr("Images(*.tif)"));
	if (filename.isEmpty())
	{
		return;
	}
	else
	{
		imgMouse = new QImage;
		if (!(imgMouse->load(filename))) //加载图像
		{
			QMessageBox::information(this,
				tr("打开图像失败"),
				tr("打开图像失败!"));
			delete imgMouse;
			return;
		}
		newImgMouse = imgMouse->scaled(ui.label_Luminescence->width(), ui.label_Luminescence->height());
		ui.label_Luminescence->setPixmap(QPixmap::fromImage(newImgMouse));
	}
	//original = true;
	//Medfilter = false;
	//Substract = false;
	//Process = false;
	//Fusion = false;


}

void ImageProcess::on_pushButton_Photography_clicked()
{
	QString filenamePhotography;
	filenamePhotography = QFileDialog::getOpenFileName(this, tr("选择图像"), "", tr("Images(*.tif)"));
	if (filenamePhotography.isEmpty())
	{
		return;
	}
	else
	{
		QImage* img = new QImage;
		if (!(img->load(filenamePhotography))) //加载图像
		{
			QMessageBox::information(this,
				tr("打开图像失败"),
				tr("打开图像失败!"));
			delete img;
			return;
		}
		QImage newImg = img->scaled(ui.label_Photography->width(), ui.label_Photography->height());
		ui.label_Photography->setPixmap(QPixmap::fromImage(newImg));
	}


}

void ImageProcess::on_pushButton_Medfilter_clicked()
{
	QByteArray ba = filename.toLatin1();
	const char *c_str2 = ba.data();
	typedef unsigned short      PixelType;
	const   unsigned int        Dimension = 2;
	typedef itk::Image< PixelType, Dimension >    ImageType;
	typedef itk::ImageFileReader< ImageType >  ReaderType;
	typedef itk::ImageFileWriter< ImageType >  WriterType;
	ReaderType::Pointer reader = ReaderType::New();
	WriterType::Pointer writer = WriterType::New();
	reader->SetFileName(c_str2);
	filename = "..\\Image\\Medfilter_image.tif";
	writer->SetFileName("..\\Image\\Medfilter_image.tif");
	reader->SetImageIO(itk::TIFFImageIO::New());
	reader->Update();
	ImageType::Pointer inputImage = ImageType::New();
	inputImage = reader->GetOutput();
	typedef itk::MedianImageFilter<
		ImageType, ImageType > FilterType;
	FilterType::Pointer filter = FilterType::New();
	ReaderType::SizeType indexRadius;
	QString txt = ui.lineEdit_Medfilter->text();
	int size = txt.toInt();
	int Radius_size = (size - 1) / 2;
	indexRadius[0] = Radius_size;
	indexRadius[1] = Radius_size;
	filter->SetRadius(indexRadius);
	filter->SetInput(inputImage);
	writer->SetInput(filter->GetOutput());
	writer->SetImageIO(itk::TIFFImageIO::New());
	try
	{
		writer->Update();
	}
	catch (itk::ExceptionObject & err)
	{
		QMessageBox::warning(NULL, QString("warning"), QString("Eerr!!! ExceptionObject caught !"));

	}
	QImage *img = new QImage;
	img->load("..\\Image\\Medfilter_image.tif");
	QImage newImg = img->scaled(ui.label_Luminescence->width(), ui.label_Luminescence->height());
	ui.label_Luminescence->setPixmap(QPixmap::fromImage(newImg));
	//original = false;
	//Medfilter = true;
	//Substract = false;
	//Process = false;
	//Fusion = false;


}

void ImageProcess::on_pushButton_Substract_clicked()
{
	QByteArray ba = filename.toLatin1();
	const char *c_str2 = ba.data();
	typedef unsigned short      PixelType;
	const   unsigned int        Dimension = 2;
	typedef itk::Image< PixelType, Dimension >    ImageType;
	typedef itk::ImageFileReader< ImageType >  ReaderType;
	typedef itk::ImageFileWriter< ImageType >  WriterType;
	ReaderType::Pointer reader = ReaderType::New();
	WriterType::Pointer writer = WriterType::New();
	reader->SetFileName(c_str2);
	filename = "..\\Image\\Substract_image.tif";
	writer->SetFileName("..\\Image\\Substract_image.tif");
	reader->SetImageIO(itk::TIFFImageIO::New());
	reader->Update();
	ImageType::Pointer input_Medfilter_image = ImageType::New();
	input_Medfilter_image = reader->GetOutput();
	typedef  itk::ImageRegionIterator<ImageType> ItType;
	ItType  it(input_Medfilter_image, input_Medfilter_image->GetRequestedRegion());
	it.GoToBegin();
	while (!it.IsAtEnd())
	{
		ImageType::PixelType  value = it.Get();
		QString txt = ui.lineEdit_Substract->text();
		int number = txt.toInt();
		int set_value = 0;
		if (value > number)
			set_value = value - number;
		else
			set_value = 0;
		it.Set(set_value);
		  it;
	}
	writer->SetInput(input_Medfilter_image);
	writer->SetImageIO(itk::TIFFImageIO::New());
	try
	{
		writer->Update();
	}
	catch (itk::ExceptionObject & err)
	{
		//std::cerr << "ExceptionObject caught !" << std::endl;
		//std::cerr << err << std::endl;
		QMessageBox::warning(NULL, QString("warning"), QString("err!!! ExceptionObject caught !"));

	}
	QImage *img = new QImage;
	img->load("..\\Image\\Substract_image.tif");
	QImage newImg = img->scaled(ui.label_Luminescence->width(), ui.label_Luminescence->height());
	ui.label_Luminescence->setPixmap(QPixmap::fromImage(newImg));
	//original = false;
	//Medfilter = false;
	//Substract = true;
	//Process = false;
	//Fusion = false;


}

void ImageProcess::on_pushButton_Process_clicked()
{
	QByteArray ba = filename.toLatin1();
	const char *c_str2 = ba.data();
	typedef unsigned short      PixelType;
	const   unsigned int        Dimension = 2;
	typedef itk::Image< PixelType, Dimension >    ImageType;
	typedef itk::ImageFileReader< ImageType >  ReaderType;
	typedef itk::ImageFileWriter< ImageType >  WriterType;

	ReaderType::Pointer reader = ReaderType::New();
	reader->SetFileName(c_str2);
	reader->SetImageIO(itk::TIFFImageIO::New());
	reader->Update();;
	ImageType::Pointer inputImage = ImageType::New();
	inputImage = reader->GetOutput();

	typedef itk::IntensityWindowingImageFilter <ImageType, ImageType> IntensityWindowingImageFilterType;
	IntensityWindowingImageFilterType::Pointer filter = IntensityWindowingImageFilterType::New();
	filter->SetInput(inputImage);
	int Value_Min = ui.lineEdit_Low->text().toInt();
	int Value_Max = ui.lineEdit_High->text().toInt();
	filter->SetWindowMinimum(Value_Min);
	filter->SetWindowMaximum(Value_Max);
	filter->SetOutputMinimum(0);
	filter->SetOutputMaximum(256);
	filter->Update();
	typedef itk::RGBPixel<unsigned char>    RGBPixelType;
	typedef itk::Image<RGBPixelType, 2>  RGBImageType;
	typedef itk::ScalarToRGBColormapImageFilter<ImageType, RGBImageType> RGBFilterType;
	RGBFilterType::Pointer rgbfilter = RGBFilterType::New();
	rgbfilter->SetInput(filter->GetOutput());
	rgbfilter->SetColormap(RGBFilterType::Jet);
	{
		typedef  itk::ImageFileWriter< RGBImageType > WriterType;
		WriterType::Pointer writer = WriterType::New();
		writer->SetFileName("..\\Image\\Process.tif");
		writer->SetImageIO(itk::TIFFImageIO::New());
		writer->SetInput(rgbfilter->GetOutput());
		writer->Update();
	}
	filenameProcess = "..\\Image\\Process.tif";
	QImage *ProccessImage = new QImage;
	ProccessImage->load("..\\Image\\Process.tif");
	QImage newImg = ProccessImage->scaled(ui.label_Luminescence->width(), ui.label_Luminescence->height());
	ui.label_Luminescence->setPixmap(QPixmap::fromImage(newImg));
	//original = false;
	//Medfilter = false;
	//Substract = false;
	//Process = true;
	//Fusion = false;


}

void ImageProcess::on_pushButton_Fusion_clicked()
{
	QByteArray ba = filename.toLatin1();
	const char *c_str2 = ba.data();
	typedef itk::RGBPixel<unsigned char>    RGBPixelType;
	typedef itk::Image<RGBPixelType, 2>  RGBImageType;
	typedef itk::ImageFileReader< RGBImageType >  ReaderType;
	typedef itk::ImageFileWriter< RGBImageType >  WriterType;

	ReaderType::Pointer reader = ReaderType::New();
	WriterType::Pointer writer = WriterType::New();

	reader->SetFileName(c_str2);
	reader->SetImageIO(itk::TIFFImageIO::New());
	reader->Update();
	RGBImageType::Pointer inputImage = RGBImageType::New();
	inputImage = reader->GetOutput();
	RGBImageType::SizeType  RGBsize = inputImage->GetLargestPossibleRegion().GetSize();
	typedef  itk::ImageRegionIterator<RGBImageType> ItType;
	ItType  RGBimageIterator(inputImage, inputImage->GetRequestedRegion());
	typedef unsigned short      PixelType;
	const   unsigned int        Dimension = 2;
	typedef itk::Image< PixelType, Dimension >    ImageType;
	typedef itk::ImageFileReader< ImageType >  SourceWhiteReaderType;
	SourceWhiteReaderType::Pointer readerSourceWhite = SourceWhiteReaderType::New();
	readerSourceWhite->SetFileName("..\\Image\\originalWhite.tif");
	readerSourceWhite->SetImageIO(itk::TIFFImageIO::New());
	readerSourceWhite->Update();
	ImageType::Pointer SourceWhiteinputImage = ImageType::New();
	SourceWhiteinputImage = readerSourceWhite->GetOutput();

	ImageType::SizeType  SourceWhitesize = SourceWhiteinputImage->GetLargestPossibleRegion().GetSize();
	RGBImageType::RegionType SourceWhiteRGBregion;
	RGBImageType::IndexType SourceWhiteRGBstart;
	SourceWhiteRGBstart[0] = 0;
	SourceWhiteRGBstart[1] = 0;

	RGBImageType::SizeType SourceWhiteRGBsize = SourceWhitesize;

	SourceWhiteRGBregion.SetSize(SourceWhiteRGBsize);
	SourceWhiteRGBregion.SetIndex(SourceWhiteRGBstart);
	RGBImageType::Pointer SourceWhiteRGBimage = RGBImageType::New();
	SourceWhiteRGBimage->SetRegions(SourceWhiteRGBregion);
	SourceWhiteRGBimage->Allocate();
	typedef  itk::ImageRegionIterator<ImageType> SourceWhiteItType;
	SourceWhiteItType  SourceWhiteimageIterator(SourceWhiteinputImage, SourceWhiteinputImage->GetRequestedRegion());
	itk::ImageRegionIterator<RGBImageType> SourceWhiteRGBimageIterator(SourceWhiteRGBimage, SourceWhiteRGBregion);

	while (!SourceWhiteRGBimageIterator.IsAtEnd())
	{
		RGBImageType::PixelType SourceWhiteRGBimagepixel = SourceWhiteRGBimageIterator.Get();
		ImageType::PixelType SourcepixelValue = SourceWhiteimageIterator.Get();
		if (!SourceWhiteimageIterator.IsAtEnd())
		{
			int realValue = int((SourcepixelValue / 65536.0) * 256);
			SourceWhiteRGBimagepixel.SetRed(realValue);
			SourceWhiteRGBimagepixel.SetGreen(realValue);
			SourceWhiteRGBimagepixel.SetBlue(realValue);
			SourceWhiteRGBimageIterator.Set(SourceWhiteRGBimagepixel);
			  SourceWhiteimageIterator;
		}
		  SourceWhiteRGBimageIterator;
	}
	SourceWhiteRGBimageIterator.GoToBegin();
	while (!SourceWhiteRGBimageIterator.IsAtEnd())
	{
		RGBImageType::PixelType SourceWhiteRGBimagepixel = SourceWhiteRGBimageIterator.Get();
		RGBImageType::PixelType RGBpixel = RGBimageIterator.Get();
		if (!RGBimageIterator.IsAtEnd())
		{
			if (RGBpixel.GetRed() == 0 && RGBpixel.GetGreen() == 0)
			{
				;
			}
			else
			{
				SourceWhiteRGBimagepixel.SetRed(RGBpixel.GetRed());
				SourceWhiteRGBimagepixel.SetGreen(RGBpixel.GetGreen());    				
				SourceWhiteRGBimagepixel.SetBlue(RGBpixel.GetBlue());
				SourceWhiteRGBimageIterator.Set(SourceWhiteRGBimagepixel);
			}

			  SourceWhiteRGBimageIterator;
			  RGBimageIterator;
		}
	}

	writer->SetFileName("..\\Image\\lbn.tif");
	writer->SetImageIO(itk::TIFFImageIO::New());
	writer->SetInput(SourceWhiteRGBimage);
	writer->Update();
	QImage *FusionImage = new QImage;
	FusionImage->load("..\\Image\\lbn.tif");
	QImage newImg = FusionImage->scaled(ui.label_Luminescence->width(), ui.label_Luminescence->height());
	ui.label_Luminescence->setPixmap(QPixmap::fromImage(newImg));

	//original = false;
	//Medfilter = false;
	//Substract = false;
	//Process = false;
	//Fusion = true;


}

void ImageProcess::on_pushButton_Save_clicked()
{
	QPixmap pix;
	pix.load("..\\Image\\lbn.tif");
	QString fileName = QFileDialog::getSaveFileName(this,
		tr("Save Image"),
		"",
		tr("*.tif;; "));

	if (fileName.isEmpty())
	{
		QMessageBox::information(this,
			tr("Failed to save the image"),
			tr("Failed to save the image!"));
	}
	else
	{
		QString tempstring = fileName   ".tif";
		pix.save(tempstring, "tif");
	}


}

void ImageProcess::on_pushButton_Clear_clicked()
{
	ui.label_Luminescence->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
	QString sLuminescence = QStringLiteral("Luminescence图像显示区域");
	ui.label_Luminescence->setText(sLuminescence);
	ui.label_Photography->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
	QString sPhotography = QStringLiteral("Photography图像显示区域");
	ui.label_Photography->setText(sPhotography);


}

ImageProcess::~ImageProcess()
{

}

void ImageProcess::paintEvent(QPaintEvent *)
{
	QPainter painter(this);
	QLinearGradient linearGradient(920, 30, 920, 511);
	linearGradient.setColorAt(0, Qt::darkRed);
	linearGradient.setColorAt(0.1, Qt::red);
	linearGradient.setColorAt(0.2, Qt::darkYellow);
	linearGradient.setColorAt(0.3, Qt::yellow);
	linearGradient.setColorAt(0.4, Qt::darkGreen);
	linearGradient.setColorAt(0.6, Qt::green);
	linearGradient.setColorAt(0.7, Qt::darkCyan);
	linearGradient.setColorAt(0.8, Qt::cyan);
	linearGradient.setColorAt(0.9, Qt::blue);
	linearGradient.setColorAt(1, Qt::darkBlue);
	painter.setBrush(linearGradient);
	painter.drawRect(920, 30, 30, 481);
}
//
//void ImageProcess::mouseMoveEvent(QMouseEvent *e)
//{
//	if (e->x() >= 380 && e->x() <= 892)
//	{
//		if (e->y() >= 10 && e->y() <= 522)
//		{
//			x = e->x() - 388;
//			y = e->y() - 8;
//			ui.label_Xposition->setText(QString::number(x));
//			ui.label_Yposition->setText(QString::number(y));
//			mousegetpixel();
//		}
//	}
//	else
//	{
//		ui.label_Xposition->setText("");
//		ui.label_Yposition->setText("");
//	}
//
//
//}
//
//void ImageProcess::mouseReadImage()
//{
//
//
//}
//
//void ImageProcess::mousegetpixel()
//{
//	QByteArray ba = filename.toLatin1();
//	const char *c_str2 = ba.data();
//	typedef unsigned short      PixelType;
//	const   unsigned int        Dimension = 2;
//	typedef itk::Image< PixelType, Dimension >    ImageType;
//	typedef itk::ImageFileReader< ImageType >  ReaderType;
//	typedef itk::ImageFileWriter< ImageType >  WriterType;
//	ReaderType::Pointer reader = ReaderType::New();
//	if (original)
//	{
//		reader->SetFileName(c_str2);
//		reader->SetImageIO(itk::TIFFImageIO::New());
//		reader->Update();
//		ImageType::Pointer input_Medfilter_image = ImageType::New();
//		input_Medfilter_image = reader->GetOutput();
//		ImageType::SizeType  size = input_Medfilter_image->GetLargestPossibleRegion().GetSize();
//		int size_x = floor(x / 512.0 * 1024);
//		int size_y = floor(y / 512.0 * 1024);
//
//		if (size_x <= size[0] && size_y <= size[1])
//		{
//			ImageType::IndexType  index;
//			index[0] = size_x;
//			index[1] = size_y;
//			ImageType::PixelType  value = input_Medfilter_image->GetPixel(index);
//			ui.label_Pixel->setText(QString::number(value));
//		}
//	}
//	if (Medfilter)
//	{
//		reader->SetFileName("..\\Image\\Medfilter_image.tif");
//		reader->SetImageIO(itk::TIFFImageIO::New());
//		reader->Update();
//		ImageType::Pointer input_Medfilter_image = ImageType::New();
//		input_Medfilter_image = reader->GetOutput();
//		ImageType::SizeType  size = input_Medfilter_image->GetLargestPossibleRegion().GetSize();
//		int size_x = floor(x / 512.0 * 1024);
//		int size_y = floor(y / 512.0 * 1024);
//		if (size_x <= size[0] && size_y <= size[1])
//		{
//			ImageType::IndexType  index;
//			index[0] = size_x;
//			index[1] = size_y;
//			ImageType::PixelType  value = input_Medfilter_image->GetPixel(index);
//			ui.label_Pixel->setText(QString::number(value));
//		}
//	}
//	if (Substract)
//	{
//		reader->SetFileName("..\\Image\\Substract_image.tif");
//		reader->SetImageIO(itk::TIFFImageIO::New());
//		reader->Update();
//		ImageType::Pointer input_Medfilter_image = ImageType::New();
//		input_Medfilter_image = reader->GetOutput();
//		ImageType::SizeType  size = input_Medfilter_image->GetLargestPossibleRegion().GetSize();
//		int size_x = floor(x / 512.0 * 1024);
//		int size_y = floor(y / 512.0 * 1024);
//
//		if (size_x <= size[0] && size_y <= size[1])
//		{
//			ImageType::IndexType  index;
//			index[0] = size_x;
//			index[1] = size_y;
//			ImageType::PixelType  value = input_Medfilter_image->GetPixel(index);
//			ui.label_Pixel->setText(QString::number(value));
//		}
//	}
//	if (Process)
//	{
//		reader->SetFileName("..\\Image\\Process.tif");
//		reader->SetImageIO(itk::TIFFImageIO::New());
//		reader->Update();
//		ImageType::Pointer input_Medfilter_image = ImageType::New();
//		input_Medfilter_image = reader->GetOutput();
//		ImageType::SizeType  size = input_Medfilter_image->GetLargestPossibleRegion().GetSize();
//		int size_x = floor(x / 512.0 * 1024);
//		int size_y = floor(y / 512.0 * 1024);
//		if (size_x <= size[0] && size_y <= size[1])
//		{
//			ImageType::IndexType  index;
//			index[0] = size_x;
//			index[1] = size_y;
//			ImageType::PixelType  value = input_Medfilter_image->GetPixel(index);
//			ui.label_Pixel->setText(QString::number(value));
//		}
//	}
//	if (Fusion)
//	{
//		reader->SetFileName("..\\Image\\lbn.tif");
//		reader->SetImageIO(itk::TIFFImageIO::New());
//		reader->Update();
//		ImageType::Pointer input_Medfilter_image = ImageType::New();
//		input_Medfilter_image = reader->GetOutput();
//		ImageType::SizeType  size = input_Medfilter_image->GetLargestPossibleRegion().GetSize();
//		int size_x = floor(x / 512.0 * 1024);
//		int size_y = floor(y / 512.0 * 1024);
//		if (size_x <= size[0] && size_y <= size[1])
//		{
//			ImageType::IndexType  index;
//			index[0] = size_x;
//			index[1] = size_y;
//			ImageType::PixelType  value = input_Medfilter_image->GetPixel(index);
//			ui.label_Pixel->setText(QString::number(value));
//		}
//	}
//
//
//}

标签: 图像 图像处理

实例下载地址

基于itk的医学图像处理程序

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警