自適應計算醫學影象窗寬窗位技巧
在dicom影象中,對於人體器官以及部位的觀察通常是有固定的窗寬窗位的,但是有時候經過前面演算法的一些處理後結果影象往往不能夠套用現有的窗寬窗位,這裡提供一種簡單的自適應調整窗寬窗位的演算法思路。
一、為什麼要設定窗寬窗位
我並不是專門學醫學出身,因此並不能給出醫學上的解釋,但是從影象的角度來說所謂的窗寬窗位就是找到一個合理的灰度值區間段,在這個區間段中最大程度保留了所關注的內容或者是整張圖片的主體內容。簡而言之,窗寬就是一個灰度值區間段,窗位一般就是這個區間段的中點位置,窗寬窗位的設定就是為了最大程度的展現觀察者所需要的內容
二、用什麼指標可以衡量窗寬窗位
基於上述理解,一般而言,窗寬窗位是為了最大程度展現影象的內容,在影象的灰度域上能夠反映這種程度的工具是影象灰度值的累積分佈函式,因此要設計合理的窗寬窗位計算演算法就需要基於影象灰度值的累積分佈函式來做文章。一個典型的歸一化的灰度累積分佈函式影象如下所示:值域是0到1的一個單增函式,因為是8bit灰度 因而是0到255個bins
從累積分佈函式圖中來看,實際上窗寬窗位就是在上圖中挑一個區間,能夠將上面函式影象的主要部分包絡在裡面。
三、如何設定包絡區間
簡單的方法可以設定前後兩個閾值,比如累積分佈函式的函式值到達0.01以上並且小於0.99的認為是影象主要有用部分的分佈,此時的0.01和0.99就是前後兩個閾值,其所對應的bins在這張8bit灰度圖中就是窗寬的兩個邊緣值,根據這兩個值求平均即可算得窗位值。
複雜一點的做法有基於先驗mask的也有基於一些分割演算法的,其主要的思路都是先判斷出影象的主要部分,然後找到對應的灰度分佈最小值和最大值,用這兩個值來定義窗寬進而求出窗位。這裡提供一種更為簡單的做法。基於累積分佈圖可以有以下兩個普遍假設
1)分佈函式的斜率變化反映了整幅圖灰度值變化的快慢情況
2)分佈函式的斜率越大說明整幅影象的灰度分佈越壓縮,反之,說明灰度分佈寬度越大
對於壓縮灰度分佈的影象,我們需要儘可能窄的窗寬,而對於寬度大的則需要較為寬的窗寬
因此實際上可以根據累積函式灰度分佈的斜率變化來設計自適應的窗寬窗位計算演算法。
我的思路是對上述累積分佈離散序列求一階導數,會得到一個極大值點和一個次大值點(次大值點需要取累積函式值大於50%的點),對應於上圖的就是谷區一個極大值點,高位的平臺區的一個次大值點,然後用上述兩個點的bin值加上一個k×nbins的調整係數就可求得窗寬的左邊界和右邊界,窗位即是左右邊界的中點
用該方法設計的窗寬窗位計算方法普適性比較好,能夠在不引入其他演算法(比如分割不準確)干擾的情況下儘可能地得到合理的窗寬窗位,計算的結果調整如下所示:
未調整前
調整後