基本信息
源码名称:基于itk的医学图像处理程序
源码大小:3.60KB
文件格式:.rar
开发语言:C/C++
更新时间:2019-06-16
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
本处理程序功能不多,只是为了完成本人实验所需的部分,去噪,减背景值,中值滤波,伪彩色,融合; 欢迎和大家交流

#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));
//		}
//	}
//
//
//}