ITK 實現(xiàn)多張圖像轉(zhuǎn)成單個nii.gz或mha文件案例
主要實現(xiàn)的部分是利用NameGeneratorType讀入系列圖像,見頭文件#include "itkNumericSeriesFileNames.h"。
需要包含的頭文件有:
#include "itkImage.h"
#include "itkImageSeriesReader.h"
#include "itkImageFileWriter.h"
#include "itkNumericSeriesFileNames.h"
#include "itkPNGImageIO.h"http://轉(zhuǎn)成JPG格式,將PNG替換成JPEG就可以。
int main( int argc, char ** argv )
{
// 需要四個參數(shù),分別是程序起點,第一張圖像的編號和最后一張圖像的變化,輸出文件的名稱(包含路徑)
if( argc < 4 )
{
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] << " firstSliceValue lastSliceValue outputImageFile " << std::endl;
return EXIT_FAILURE;
}
//定義讀入圖像類型,創(chuàng)建對應(yīng)的reader
typedef unsigned char PixelType;
const unsigned int Dimension = 3;
typedef itk::Image< PixelType, Dimension > ImageType;
typedef itk::ImageSeriesReader< ImageType > ReaderType;
typedef itk::ImageFileWriter< ImageType > WriterType;
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
//輸入?yún)?shù)定義
const unsigned int first = atoi( argv[1] );
const unsigned int last = atoi( argv[2] );
const char * outputFilename = argv[3];//輸出的文件名加上對應(yīng)格式的后綴即可,如mha或nii.gz
//系列圖像讀入
typedef itk::NumericSeriesFileNames NameGeneratorType;
NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
nameGenerator->SetSeriesFormat( "vwe%03d.png" );
nameGenerator->SetStartIndex( first );
nameGenerator->SetEndIndex( last );
nameGenerator->SetIncrementIndex( 1 );//張數(shù)的增長間距
//讀入圖像,寫出圖像,進行Update
reader->SetImageIO( itk::PNGImageIO::New() );
reader->SetFileNames( nameGenerator->GetFileNames() );
writer->SetFileName( outputFilename );
writer->SetInput( reader->GetOutput() );
try
{
writer->Update();
}
catch( itk::ExceptionObject & err )
{
std::cerr << "ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
補充知識:將一組png圖片轉(zhuǎn)為nii.gz
主要之前使用matlab 對numpy數(shù)組存放方式不是很了解.應(yīng)該是[z,x,y]這樣在itksnamp上看就對了
import SimpleITK as sitk
import glob
import numpy as np
from PIL import Image
import cv2
import matplotlib.pyplot as plt # plt 用于顯示圖片
def save_array_as_nii_volume(data, filename, reference_name = None):
"""
save a numpy array as nifty image
inputs:
data: a numpy array with shape [Depth, Height, Width]
filename: the ouput file name
reference_name: file name of the reference image of which affine and header are used
outputs: None
"""
img = sitk.GetImageFromArray(data)
if(reference_name is not None):
img_ref = sitk.ReadImage(reference_name)
img.CopyInformation(img_ref)
sitk.WriteImage(img, filename)
image_path = './oriCvLab/testCvlab/img/'
image_arr = glob.glob(str(image_path) + str("/*"))
image_arr.sort()
print(image_arr, len(image_arr))
allImg = []
allImg = np.zeros([165, 768,1024], dtype='uint8')
for i in range(len(image_arr)):
single_image_name = image_arr[i]
img_as_img = Image.open(single_image_name)
# img_as_img.show()
img_as_np = np.asarray(img_as_img)
allImg[i, :, :] = img_as_np
# np.transpose(allImg,[2,0,1])
save_array_as_nii_volume(allImg, './testImg.nii.gz')
print(np.shape(allImg))
img = allImg[:, :, 55]
# plt.imshow(img, cmap='gray')
# plt.show()
以上這篇ITK 實現(xiàn)多張圖像轉(zhuǎn)成單個nii.gz或mha文件案例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python統(tǒng)計列表中的重復(fù)項出現(xiàn)的次數(shù)的方法
這篇文章主要介紹了Python統(tǒng)計列表中的重復(fù)項出現(xiàn)的次數(shù)的方法,需要的朋友可以參考下2014-08-08
Python實現(xiàn)多進程共享數(shù)據(jù)的方法分析
這篇文章主要介紹了Python實現(xiàn)多進程共享數(shù)據(jù)的方法,結(jié)合實例形式分析了Python多進程共享數(shù)據(jù)的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-12-12
Python+Flask實現(xiàn)自定義分頁的示例代碼
分頁操作在web開發(fā)中幾乎是必不可少的,而flask不像django自帶封裝好的分頁操作。所以本文將自定義實現(xiàn)分頁效果,需要的可以參考一下2022-09-09

