基本信息
源码名称:基于itk的医学图像处理程序
源码大小:3.60KB
文件格式:.rar
开发语言:C/C++
更新时间:2019-06-16
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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));
// }
// }
//
//
//}