MINC/工具/emma/emma-demo1
EMMA(可擴充套件的 MATLAB 醫學分析)是一個通用的 MATLAB 函式工具包,旨在幫助研究人員進行 MATLAB 下的影像分析。它提供用於讀取 MINC(醫學影像 Net CDF)檔案、寫入 MINC 檔案、顯示影像以及對影像進行一般操作的函式。
讓我們從一個快速演示開始。我們將從儲存在 MINC 檔案中的動態 PET 中讀取 21 幀,並顯示該資料集中的一個幀。首先,我們必須開啟檔案。EMMA 函式openimage開啟影像檔案以供讀取,並返回控制代碼。因此,我們這樣呼叫它
h=openimage('/local/matlab/toolbox/emma/examples/yates_19445.mnc');
變數h現在是用於處理此影像檔案(其實際值對使用者不重要)的控制代碼。現在檔案已開啟,我們可以使用 EMMAgetimages函式讀取它。我們將從研究的第 8 片中讀取所有 21 幀
PET=getimages(h,8,1:21);
變數PET現在包含第 8 片的每一幀的影像。我們可以使用 MATLABwhos命令檢視我們擁有的變數及其大小
>> whos
Name Size Elements Bytes Density Complex
PET 16384 by 21 344064 2752512 Full No
h 1 by 1 1 8 Full No
Grand total is 344065 elements using 2752520 bytes
影像本身為 128 畫素 x 128 畫素(16384 個元素),並由 EMMA 以列形式儲存。當getimages函式讀取影像時,它會將影像的行連線在一起以形成一列。因此,之前讀取的PET變數包含 16384 行(128x128=16384)和 21 列(21 個影像)。雖然這乍一看可能有些笨拙,但它允許在 MATLAB 下進行高效的影像操作。
我們可以使用 EMMAviewimage函式從該資料集中檢視一個影像。它接受以列格式儲存的影像(如剛剛描述的那樣),或作為矩陣儲存的影像,並在圖形視窗中顯示它。如果我們想檢視變數中的第 17 個影像PET(先前開啟的研究的第 8 片中的第 17 幀),我們想檢視PET(:,17),因為這將返回矩陣 PET 的第 17 列的所有元素
viewimage(PET(:,17));
這將產生類似於這樣的影像
我們也可以使用 EMMAnewimage函式建立一個新的 MINC 檔案並將影像寫入其中。如果我們要儲存變數PET到名為new.mnc的新的 MINC 檔案中,我們首先會使用newimage函式建立 MINC 檔案
h2 = newimage('new.mnc', [21 1 128 128]);
與openimage函式類似,newimage也返回一個開啟的 MINC 檔案的控制代碼(這次 MINC 檔案是開啟以供寫入)。上面的命令建立一個包含 21 幀、1 片和 128x128 影像的 MINC 檔案。當使用newimage建立檔案時,它是空的,應該用影像填充。這可以使用 EMMAputimages函式建立 MINC 檔案
putimages(h2,PET,1,1:21);
函式完成。這將變數 PET 中的 21 個影像寫入 MINC 檔案(由h2表示)作為第 1 片,幀 1 到 21。
讓我們嘗試一些更復雜的東西。我們將使用我們已經從磁碟讀取的變數PET,將每個畫素在幀(時間)上進行積分,並將生成的影像寫出。首先,我們需要載入的 21 幀的中幀時間。我們可以使用 EMMAgetimageinfo函式獲取此資訊
ftimes = getimageinfo(h,'MidFrameTimes');
這將建立一個名為ftimes的新變數,其中包含每一幀的中幀時間。我們現在可以使用 EMMAntrapz函式(它與 MATLABtrapz函式具有相同的功能,但執行其計算的速度快一個數量級)進行積分
img = ntrapz(ftimes,PET')';
我們必須將PET變數轉置後再傳遞給ntrapz函式,因為ntrapz期望第二個變數的行數與第一個變數的行數相同(PET為 16384x21,因此PET'為 21x16384,而ftimes為 21x1,滿足要求)。答案也必須轉置,以便img成為影像的列向量(而不是行向量)表示。(注意:此示例不是計算積分影像的最記憶體高效的方式。有關更多資訊,請參閱 [matlab_memory.html 控制 MATLAB 記憶體使用]。)
人們可能會想象這樣一種情況,我們希望計算研究中每一片的積分影像,然後將結果寫入新的 MINC 檔案。我們希望新的 MINC 檔案具有與原始 MINC 檔案相同的維資訊,只是沒有幀。這很容易實現,因為 newimage 允許指定一個“父影像”,從中獲取所需的維資訊。因此,使用原始 MINC 檔案作為父檔案,我們可以建立一個新的 MINC 檔案
h3 = newimage('new2.mnc', [0 15], ...
'/local/matlab/toolbox/emma/examples/yates_19445.mnc');
這個新檔案不包含幀,包含 15 片,並且與父影像具有相同的間距。然後,我們可以使用putimages函式建立 MINC 檔案
putimages(h3,img,8);
函式將我們的積分影像寫入這個新的 MINC 檔案中。img這將變數中的資料寫入控制代碼h3