日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【转】医学影像处理相关知识整理(一)

發(fā)布時(shí)間:2023/12/10 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】医学影像处理相关知识整理(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:醫(yī)學(xué)影像處理相關(guān)知識(shí)整理(一) - 知乎

Segmentation to RT structure

近日做醫(yī)療影像處理相關(guān)的內(nèi)容,感慨于這方面資料不全、散碎,遂記錄自己獲得的一些資料以供日后查閱。

DICOM

DICOM 是醫(yī)學(xué)圖像和相關(guān)信息的國(guó)際標(biāo)準(zhǔn),它定義了滿足臨床需要的可用于數(shù)據(jù)交換的醫(yī)學(xué)圖像格式,被廣泛用于放射、成像的診療診斷設(shè)備。也就是說(shuō),在醫(yī)院放射科使用的設(shè)備上讀取的影像基本都是DICOM格式,包括CT、MRI、超聲等。

DICOM格式的圖像,每一張都帶有除像素(體素)信息之外的大量信息。其信息組成主要有以下幾部分:

  • Patient:病人信息
  • Study:診療信息,如檢查時(shí)間、檢查部位、ID等
  • Series:序列號(hào)、圖像坐標(biāo)信息等。圖像坐標(biāo)信息主要關(guān)注:
    • SliceThickness:層厚,即每張切片之間的間距
    • ImagePositionPatient:該張切片坐標(biāo)原點(diǎn)(圖像左上角,二維圖中向下為y軸,向右為x軸)在空間中的坐標(biāo)(x,y,z)
    • ImageOritentationPatient:六元組,當(dāng)前切片的x、y軸與解剖學(xué)坐標(biāo)系間的關(guān)系。
此處涉及矢狀面、冠狀面、橫斷面
簡(jiǎn)單的記憶方式是:矢狀面即一支箭射中人所形成的面,正中二分人體。
冠狀面可想象古代官帽,從頭頂向地面的切面。
橫斷面即腰斬平面。
在下圖中,紅色切面為矢狀面,紫色切面為冠狀面,綠色切面為橫斷面。

六元組所表示的,即是與這三個(gè)面的夾角關(guān)系,以余弦值呈現(xiàn)。
影像上,正方向?yàn)長(zhǎng)、S、P。
用(x1,x2,x3,y1,y2,y3)來(lái)表示的話,x1、x2、x3分別表示x軸與L、P、S間的夾角余弦值,y1、y2、y3則表示y軸與L、P、S間的夾角余弦值。
使用這個(gè)六元組可以判斷圖像區(qū)域是否為矩形(兩向量點(diǎn)乘為0),以及與解剖學(xué)坐標(biāo)的關(guān)系。當(dāng)這個(gè)六元組只含有0、1、-1時(shí),代表切片一定與某解剖學(xué)平面平行。
更多內(nèi)容可以參見(jiàn)此博客,講解得很詳細(xì)。
https://blog.csdn.net/zssureqh/article/details/61636150

  • Image:圖像信息。主要關(guān)注:
    • PixelSpacing:二元組。用來(lái)表示當(dāng)前二維圖像坐標(biāo)上,xy軸的單位長(zhǎng)度,在實(shí)際坐標(biāo)系中所占據(jù)的長(zhǎng)度。
    • Rows、Columns:行列信息。
    • Bits Allocated、Bits Stored:每個(gè)像素分配的位數(shù)、存儲(chǔ)位數(shù)
    • Window Center、Window Width:窗位、窗寬
    • Rescale Slope、Rescale Intercept?:斜率、截距。主要用在圖像可視化中。

除了上述四個(gè)部分 tag 信息外,就是 PixelData 信息。此處存儲(chǔ)的既是該張切片的像素信息。

DICOM 文件可以使用 pydicom 庫(kù)來(lái)進(jìn)行讀寫(xiě),該庫(kù)提供了非常全面的操作。

在 vscode 中搜索 dicom 有一個(gè)插件可以用來(lái)看 dicom 文件信息。

segmentation

segmentatiom 是對(duì) DICOM 序列文件進(jìn)行器官分割、靶區(qū)勾畫(huà)后的結(jié)果,以 nifti 格式給出(也可以為其他格式,但存儲(chǔ)形式基本都是裸數(shù)據(jù),直接給出分割結(jié)果的數(shù)組)。其中的信息為三維數(shù)組形式,每個(gè)體素點(diǎn)存儲(chǔ)該點(diǎn)對(duì)應(yīng)圖像的分割結(jié)果:

0:代表此點(diǎn)為background,或此次標(biāo)注中不關(guān)注的區(qū)域 1~n:代表此點(diǎn)為對(duì)應(yīng)的區(qū)域。 其中 1~n 所代表的器官、區(qū)域由分割程序定義

RT structure

RT structure 文件是導(dǎo)入到放療系統(tǒng)中所需的 DICOM 文件,其中存儲(chǔ)了每個(gè)結(jié)構(gòu)區(qū)域的組成,以及相對(duì)應(yīng)的原始 DICOM 序列標(biāo)識(shí)和部分病人信息。其主要結(jié)構(gòu)分為三個(gè)部分:

  • 首先為頭部信息,其中存儲(chǔ)了諸如 patientname、patientid 一類(lèi)的病人信息,以及 DICOM 信息。

  • 第二部分為 reference 信息,即該 RT structure 文件參考的 dicom 序列文件。

  • 第三部分即是結(jié)構(gòu)信息,存儲(chǔ)各個(gè)區(qū)域的構(gòu)成點(diǎn)、參考dicom文件等。

若要解析 RT structure 文件可以從以上三部分入手

segmentation to RT structure

近期所做的工作主要是將已經(jīng)生成的分割、勾畫(huà)信息結(jié)合原始的 DICOM 序列文件,生成 RT structure 文件(后簡(jiǎn)稱(chēng) RTs ),以供醫(yī)生后續(xù)使用。

主要思路為:nifti->mha->RTs

nifti->mha

mha 是一種 metadata 格式,其中存儲(chǔ)了頭部信息和像素信息。與 mha 格式類(lèi)似的是 mhd 格式,區(qū)別在于 mhd 將頭部信息存儲(chǔ)于一個(gè)單獨(dú)的 .raw 文件中,本身只存儲(chǔ)數(shù)據(jù)信息。

上圖即為一個(gè) mha 文件所存儲(chǔ)的頭部信息,可以看到,它存儲(chǔ)了維度、原點(diǎn)、方向、像素間距等信息,這部分信息在后續(xù)構(gòu)建 RTs 時(shí)是非常重要的。

那么,在初步了解 mha 文件的構(gòu)成后,要將 nii 文件轉(zhuǎn)換為 mha 文件就比較簡(jiǎn)單了。

思路為:

  • 使用 SimpleITK 庫(kù)讀取 nii 文件中儲(chǔ)存的體素信息。
  • 使用 pydicom 庫(kù)讀取參考的 DICOM 序列文件信息。然后使用這里得到的信息用于構(gòu)建 mha 頭部信息。
  • 最后再使用 SimpleITK 庫(kù)寫(xiě) mha 文件

一個(gè)簡(jiǎn)單的可執(zhí)行示例代碼如下:

import SimpleITK as sitk import pydicom reader=sitk.ReadImage("labels.nii") referencect=pydicom.read_file("file_path.dcm")##輸入?yún)⒖嫉?dicom 文件,一個(gè)即可 ? ConstPixelSpacing =(float(referencect.PixelSpacing[0]), float(referencect.PixelSpacing[1]), float(referencect.SliceThickness)) ? Origin = referencect.ImagePositionPatient ? img=sitk.GetArrayFromImage(reader) #z y x img2=sitk.GetImageFromArray(img) #z y x img2.SetSpacing(ConstPixelSpacing) img2.SetOrigin(Origin) sitk.WriteImage(img2,"testmha.mha")

上例代碼僅顯示如何構(gòu)建一個(gè) mha 文件,在 nii 轉(zhuǎn)化 mha 中還有很多細(xì)節(jié)需要主要:

  • 在一個(gè) DICOM 序列中,你最終參考的 DICOM 文件將決定你構(gòu)建的 mha 文件頭部信息中?offset?項(xiàng),該項(xiàng)將影響到構(gòu)建 RTs 時(shí)切片的走向。例如若你選擇的 DICOM 文件為切片中最頂部的一張,則你的整個(gè)結(jié)構(gòu)由于層厚大于0,將向上生長(zhǎng),與真實(shí)結(jié)構(gòu)相反。因此選擇哪張切片作為參考,要結(jié)合層厚來(lái)確定。通常層厚大于0,因此選擇最底部的切片作為參考。
  • SimpleITK 庫(kù)在讀入 nii 文件生成數(shù)組時(shí),將以 (z,y,x) 形式生成數(shù)組,如果同樣以 SimpleITK 庫(kù)寫(xiě)文件,可以不用注意,但若還有其他諸如可視化等需求,應(yīng)注意坐標(biāo)對(duì)應(yīng)。
  • 寫(xiě) mha 文件時(shí),可能出現(xiàn) PixelSpacing、Origin 由于浮點(diǎn)數(shù)精度而不完全等于元數(shù)據(jù)的問(wèn)題。如下圖所示,此問(wèn)題我暫未想到解決方案,但由于在后續(xù)生成 RTs 并無(wú)影響,因此暫時(shí)忽略此問(wèn)題。

mha->RTs

將 mha 轉(zhuǎn)換為 RTs 文件是一個(gè)比較棘手的問(wèn)題,一開(kāi)始我預(yù)備在了解 RTs 文件的結(jié)構(gòu)后,手動(dòng)構(gòu)造 RTs 文件,但考慮到可靠性(有可能信息轉(zhuǎn)換不完全或兼容性不夠好,畢竟醫(yī)學(xué)的東西謹(jǐn)慎一點(diǎn)更好),最終沒(méi)有采用手動(dòng)構(gòu)造的方法,而是使用了 plastimatch 這個(gè)比較成熟的軟件來(lái)進(jìn)行。但不排除后續(xù)使用自己寫(xiě)的代碼來(lái)完成這個(gè)步驟的可能性。

plastimatch 提供了 DICOM RT 導(dǎo)出功能,支持從 mha 文件導(dǎo)出 RTs,同時(shí)也支持 nii 導(dǎo)出 RTs。

在我成功從 mha 導(dǎo)出 RTs 后,試圖簡(jiǎn)化步驟直接從 nii 到 RTs,但經(jīng)過(guò)嘗試后發(fā)現(xiàn) nii 到 RTs 的結(jié)果與 mha 到 RTs 并不相同(很奇怪),且并不正確,同時(shí),從 nii 到 RTs 所需的時(shí)間非常久,在五分鐘以上,而使用 nii->mha->RTs 耗時(shí)不到 30s
這個(gè)結(jié)果令人費(fèi)解,mha 文件的信息都是從 nii 中解析得到,導(dǎo)出 RTs 所使用的參考 dicom 序列也都相同,卻導(dǎo)向了不同的結(jié)果。我最初猜測(cè)是由于 nii 中數(shù)組方向可能有問(wèn)題,但在我修改方向重寫(xiě) nii 后結(jié)果依然不對(duì)。

那么在安裝 plastimatch 后,使用如下三條指令即可使用 mha 生成 RTs:

plastimatch adjust --input testmha.mha --pw-linear "0,0,1,1,2,2,3,4,4,8,5,16" --output TEMP-1.mha plastimatch convert --input TEMP-1.mha --output-img TEMP-2.mha --output-type uint32 plastimatch convert --input-ss-img TEMP-2.mha input-ss-list structure_ref.txt --referenced-ct renference_files/ --output-dicom DICOM-OUT

接下來(lái)解釋一下上述三條指令:

  • 第一條指令的目的是將 mha 文件存儲(chǔ)的體素的信息做一個(gè)變換,遵循 0->0,1->1,2->2,3->4,4->8,依次類(lèi)推。如果你的勾畫(huà)結(jié)果并非是以位圖方式存儲(chǔ)(即第 0bit 為 1 表示該點(diǎn)為第 0 種結(jié)構(gòu),第 1bit 為 1 表示該點(diǎn)為第 1 種結(jié)構(gòu)),那么你就需要這個(gè)操作將其轉(zhuǎn)換為該格式,以方便后續(xù)處理。
  • 第二條指令的目的是轉(zhuǎn)換 mha 文件中的信息為 uint32 存儲(chǔ)。
  • 第三條指令生成 RTs 文件,其中input-ss-list structure_ref.txt?后續(xù)闡述。referenced-ct renference_files/?指定要參考的 DICOM 序列所在的文件夾,最終將在?DICOM-OUT?目錄下生成 RTs 文件。
  • structure_ref.txt

    該文件遵循下述格式:

    0|0 255 0|Bladder 1|0 0 255|Femoral_Head-L 2|255 0 255|Femoral_Head-R 3|0 255 255|Femur-L 4|255 255 0|Femur-R 5|122 122 122|Rectum

    在未指定該文件時(shí),生成的 RTs 文件中結(jié)構(gòu)名是沒(méi)有指定的,將以 unknown structure 的名字呈現(xiàn),這對(duì)后續(xù)醫(yī)生的操作是不利的,因此需要指定上述文件,以形成 value-color-structure_name 的對(duì)應(yīng)關(guān)系。此處的 value,即 0、1、2...等值,是指對(duì)應(yīng) bit 位為 1。因此前述第一條指令的轉(zhuǎn)換操作就是不可缺少的,將普通的值轉(zhuǎn)換為對(duì)應(yīng)的 bit 位為 1 的值,才能正確標(biāo)識(shí)結(jié)構(gòu)名字。

    others

    此處列出一些可能有用的庫(kù):

    SimpleITK:支持較多格式的文件,提供了一些處理圖像內(nèi)容的操作。

    pydicom:提供對(duì) DICOM 文件讀寫(xiě)、修改的操作。

    itk、vtk:前者提供處理,后者提供顯示,是醫(yī)學(xué)影像處理中常用的庫(kù)。

    dicom2nifti:dicom 文件轉(zhuǎn) nii 文件等操作。

    gdcm2vtk:提供 vtk 支持的格式文件轉(zhuǎn)換 dicom 文件等操作。

    此外還有 gdcm、dcmtk 等庫(kù)尚未詳看。

    plastimatch 這個(gè)軟件也提供了很豐富的功能,最重要的是在它的 mail list 中,開(kāi)發(fā)者會(huì)回復(fù)使用相關(guān)問(wèn)題。

    后續(xù)可能會(huì)調(diào)研圖像顯示相關(guān)的資料并更新。

    不過(guò)沒(méi)搞明白一通操作下來(lái)是什么目的,既然已有勾畫(huà)信息,再弄rts有什么其他用途

    因?yàn)楣串?huà)信息不是醫(yī)生做的,是用AI做的。AI做的勾畫(huà)信息不是RTs結(jié)構(gòu)的,醫(yī)生沒(méi)辦法在現(xiàn)在的放療系統(tǒng)上使用,所以要轉(zhuǎn)一下。

    mha可以轉(zhuǎn)回nii嗎?要怎么轉(zhuǎn)?

    從mha文件里面提取像素信息,然后保存為nii就可以了,nii本質(zhì)上就是裸數(shù)據(jù)

    總結(jié)

    以上是生活随笔為你收集整理的【转】医学影像处理相关知识整理(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。