深度學(xué)習(xí)谱轨,分割后處理之通過填補(bǔ)孔洞戒幔,提高分割準(zhǔn)確度

image

當(dāng)我們查看分割結(jié)果時(shí),會(huì)發(fā)現(xiàn)分割內(nèi)部偶爾會(huì)出現(xiàn)這種分割孔洞(hole)土童。

常識(shí)告訴我們诗茎,這個(gè)器官內(nèi)部是沒有孔洞的,因此娜扇,我們通過后處理的方法把它填上,可以提高分割準(zhǔn)確度错沃。

這種三維孔洞栅组,我們希望有一種便捷方法雀瓢,可以直接填補(bǔ)這種三維孔洞∮竦В可以使用 SITK 的二值孔洞填補(bǔ)方法刃麸。 sitk.BinaryFillhole

  1. sitk.BinaryFillhole

注意: 該函數(shù)只針對二值圖像(值為0或1)

import SimpleITK as sitk
import os
import glob

imglist= glob.glob('./*.nii.gz')
save_dir = './fillhole'

for img in imglist:
    img_nii = sitk.ReadImage(img, outputPixelType=sitk.sitkUInt16)
    img_fill = sitk.BinaryFillhole(img_nii)
    img_savedir = os.path.join(save_dir, img.split('/')[-1])

    sitk.WriteImage(img_fill, img_savedir)

該例子顯示了如何批量填補(bǔ)孔洞,并且保存下來司浪。

  1. 自寫一個(gè)泊业。

我是主張能用開源工具就用工具,畢竟這些工具都是大牛寫的啊易,值得信賴吁伺。

但是,我這里還是提供一個(gè)github上寫的算法租谈。

大致思路: 這個(gè)算法提供了三維填充和二維填充篮奄,二維填充是選擇一個(gè)面(如橫斷面或者冠狀面)進(jìn)行一層一層的填充捆愁。

from scipy.ndimage.morphology import binary_fill_holes
import numpy as np
from scipy import ndimage
import nibabel as nib
from skimage.measure import label
import matplotlib.pyplot as plt


def hole_filling(bw, hole_min, hole_max, fill_2d=True):
    bw = bw > 0
    if len(bw.shape) == 2:
        background_lab = label(~bw, connectivity=1)
        fill_out = np.copy(background_lab)
        component_sizes = np.bincount(background_lab.ravel())
        too_big = component_sizes > hole_max
        too_big_mask = too_big[background_lab]
        fill_out[too_big_mask] = 0
        too_small = component_sizes < hole_min
        too_small_mask = too_small[background_lab]
        fill_out[too_small_mask] = 0
    elif len(bw.shape) == 3:
        if fill_2d:
            fill_out = np.zeros_like(bw)
            for zz in range(bw.shape[1]):
                background_lab = label(~bw[:, zz, :], connectivity=1)   # 1表示4連通, ~bw[zz, :, :]1變?yōu)?窟却, 0變?yōu)?
                # 標(biāo)記背景和孔洞昼丑, target區(qū)域標(biāo)記為0
                out = np.copy(background_lab)
                # plt.imshow(bw[:, :, 87])
                # plt.show()
                component_sizes = np.bincount(background_lab.ravel())
                # 求各個(gè)類別的個(gè)數(shù)
                too_big = component_sizes > hole_max
                too_big_mask = too_big[background_lab]

                out[too_big_mask] = 0
                too_small = component_sizes < hole_min
                too_small_mask = too_small[background_lab]
                out[too_small_mask] = 0
                # 大于最大孔洞和小于最小孔洞的都標(biāo)記為0, 所以背景部分被標(biāo)記為0了夸赫。只剩下符合規(guī)則的孔洞
                fill_out[:, zz, :] = out
                # 只有符合規(guī)則的孔洞區(qū)域是1菩帝, 背景及target都是0
        else:
            background_lab = label(~bw, connectivity=1)
            fill_out = np.copy(background_lab)
            component_sizes = np.bincount(background_lab.ravel())
            too_big = component_sizes > hole_max
            too_big_mask = too_big[background_lab]
            fill_out[too_big_mask] = 0
            too_small = component_sizes < hole_min
            too_small_mask = too_small[background_lab]
            fill_out[too_small_mask] = 0
    else:
        print('error')
        return

    return np.logical_or(bw, fill_out)  # 或運(yùn)算,孔洞的地方是1茬腿,原來target的地方也是1

參數(shù)簡介

  • bw: array, 待填補(bǔ)的數(shù)組
  • hole_min: 孔洞像素的個(gè)數(shù)最小值,一般為0
  • hole_max: 孔洞像素的個(gè)數(shù)最大值呼奢。
  • fill_2d: True:二維填充。False:三維填充
    只有當(dāng)孔洞像素值個(gè)數(shù)在 [hole_min, hole_max] 才會(huì)被填補(bǔ)切平。

算法里面涉及了大量的與或非運(yùn)算控妻。

調(diào)用

filled = hole_filling(arr, 0, 100, fill_2d=True)  # 通過改變bw[zz, :, :],選擇軸

你可以對比一下揭绑,這三種算法(第二個(gè)里面是2種算法)哪個(gè)更適合你弓候。

深度學(xué)習(xí),分割后處理之通過連通成分分析去除假陽性區(qū)域他匪,提高分割準(zhǔn)確度

常用的分割后處理方法就是 連通成分分析和填補(bǔ)孔洞菇存,你學(xué)會(huì)了嗎。

我是Tina, 我們下篇博客見~

白天工作晚上寫文邦蜜,嘔心瀝血

覺得寫的不錯(cuò)的話最后依鸥,求點(diǎn)贊,評論悼沈,收藏

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贱迟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子絮供,更是在濱河造成了極大的恐慌衣吠,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壤靶,死亡現(xiàn)場離奇詭異缚俏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贮乳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門忧换,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人向拆,你說我怎么就攤上這事亚茬。” “怎么了浓恳?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵刹缝,是天一觀的道長葡兑。 經(jīng)常有香客問我,道長赞草,這世上最難降的妖魔是什么讹堤? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮厨疙,結(jié)果婚禮上洲守,老公的妹妹穿的比我還像新娘。我一直安慰自己沾凄,他們只是感情好梗醇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撒蟀,像睡著了一般叙谨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上保屯,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天手负,我揣著相機(jī)與錄音,去河邊找鬼姑尺。 笑死竟终,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的切蟋。 我是一名探鬼主播统捶,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柄粹!你這毒婦竟也來了喘鸟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤驻右,失蹤者是張志新(化名)和其女友劉穎什黑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旺入,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兑凿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年凯力,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茵瘾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咐鹤,死狀恐怖拗秘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祈惶,我是刑警寧澤雕旨,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布扮匠,位于F島的核電站,受9級特大地震影響凡涩,放射性物質(zhì)發(fā)生泄漏棒搜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一活箕、第九天 我趴在偏房一處隱蔽的房頂上張望力麸。 院中可真熱鬧,春花似錦育韩、人聲如沸克蚂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埃叭。三九已至,卻和暖如春悉罕,著一層夾襖步出監(jiān)牢的瞬間赤屋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工壁袄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留益缎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓然想,卻偏偏與公主長得像莺奔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子变泄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容