1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【CV】使用 scikit-image 進(jìn)行圖像處理

        共 3569字,需瀏覽 8分鐘

         ·

        2021-09-07 15:19

        劃痕試驗(yàn)時(shí)間序列分析。

        圖像處理在當(dāng)今非常適用,對(duì)于2019冠狀病毒疾病,無(wú)論是開發(fā)治療方法還是尋找檢測(cè)病毒的新方法,都給全球的研究人員帶來(lái)了新的挑戰(zhàn)。為了對(duì) 2019冠狀病毒進(jìn)行研究,研究人員通常需要對(duì)圖像進(jìn)行大量計(jì)算,以檢測(cè)有助于得出新見解和結(jié)論的特定元素。


        在這篇文章中,我將介紹圖像處理的基礎(chǔ)知識(shí)和一個(gè)小教程,詳細(xì)介紹如何將圖像處理用于閾值和分割,這是圖像處理中兩種非常強(qiáng)大的技術(shù)。在文章中,我們將使用 scikit-image,因此可能需要 Python 的基本背景知識(shí)和一些高等數(shù)學(xué)知識(shí)才能完全理解該概念。


        什么是 scikit-image?

        scikit-image 是一個(gè)專門用于圖像處理的 Python 庫(kù),它可以與 Scipy 庫(kù)和其他可能有助于計(jì)算的 Python 庫(kù)一起使用,為了充分使用 scikit-image,用戶還必須使用 Matplotlib 來(lái)顯示轉(zhuǎn)換后的圖像并進(jìn)行圖像分析。在本教程中,我們將使用 scikit-image 庫(kù)、Matplotlib 和 NumPy 中的特定函數(shù)來(lái)對(duì)劃痕檢測(cè)進(jìn)行分析。

        什么是劃痕檢測(cè)?

        除非我們有豐富的生物學(xué)經(jīng)驗(yàn),否則大多數(shù)人可能不知道什么是劃痕試驗(yàn),我將簡(jiǎn)要概述什么是劃痕檢測(cè),然后直接進(jìn)入教程。


        劃痕試驗(yàn)是生物學(xué)家用來(lái)跟蹤細(xì)胞運(yùn)動(dòng)和相互作用的一種技術(shù),具體來(lái)說(shuō),生物學(xué)家在培養(yǎng)皿中采集細(xì)胞樣本,并在細(xì)胞平面上制造人工傷口,在開發(fā)人造傷口后,生物學(xué)家會(huì)定期拍攝任何細(xì)胞運(yùn)動(dòng)的圖像,以開發(fā)出一系列用于分析的圖像。


        在下面的教程中,我們將處理下面提供的圖像,因此在開始之前下載此圖像并將其添加到我們的項(xiàng)目目錄中。

        從顯微鏡獲得的劃痕分析圖像


        劃痕分析教程

        首先,我們需要確定我們要試圖做什么來(lái)處理此圖像,為了從該圖像中獲得更多的信息,我們將使用各種分割技術(shù)來(lái)分離細(xì)胞區(qū)域和劃痕區(qū)域(空白區(qū)域)。如我們所見,由于整個(gè)圖像的像素值基本相同,因此我們不能僅根據(jù)顏色對(duì)該圖像進(jìn)行分割,但是我們可以使用紋理作為參數(shù)來(lái)確定培養(yǎng)皿的哪個(gè)區(qū)域有細(xì)胞,哪個(gè)區(qū)域沒有細(xì)胞。為此,在開始分割圖像之前,我們將對(duì)圖像應(yīng)用一個(gè)特殊的過(guò)濾器。


        首先,讓我們將所有必要的庫(kù)導(dǎo)入我們的 Python 腳本:

        然后,導(dǎo)入我們上面提供的圖像,我們?cè)谙旅娴拇a片段中將圖像命名為“scratch.jpg”。

        在上面的代碼中,我使用了scikit image中的io包來(lái)使用imread函數(shù),該函數(shù)允許我輸入圖像數(shù)據(jù),此函數(shù)的工作原理與用于 CSV 文件的 Pandas read_csv 方法完全相同。此外,我們使用了 scikit-image 的形態(tài)學(xué)包中的熵過(guò)濾器,這將允許我們通過(guò)搜索某些像素中的無(wú)序情況來(lái)分析圖像的紋理。如果小伙伴們想進(jìn)一步了解所有這些函數(shù)的功能和參數(shù),請(qǐng)?jiān)L問(wèn) scikit-image 文檔。我們可以使用磁盤參數(shù),但對(duì)于此圖像,磁盤值為 10 時(shí)可獲得最佳結(jié)果。

        現(xiàn)在,我們將應(yīng)用Otsu閾值濾波器,該濾波器來(lái)自skiliage.filters包,這個(gè)簡(jiǎn)單的單行命令將允許我們應(yīng)用Otsu閾值濾波器。Otsu閾值是一種特定算法,它迭代圖像中的每個(gè)像素并將像素分為兩類:背景和前景。一旦我們實(shí)際繪制了圖像,我們就會(huì)理解其效果。


        閾值過(guò)濾器只返回單個(gè)數(shù)字,該值是 Otsu 算法為優(yōu)化圖像分割計(jì)算的精確值,將幫助我們生成最終圖像。

        在這行代碼中,我們將變量“binary”設(shè)置為熵的所有像素值,然后,我們使用一個(gè)邏輯運(yùn)算符,以便將熵中小于或等于閾值的所有像素值設(shè)置為 True。請(qǐng)記住,使用 scikit-image 時(shí),圖像會(huì)被轉(zhuǎn)換為 NumPy ndarrays,因此我們的二進(jìn)制圖像實(shí)際上只是一個(gè)數(shù)組,這意味著我們可以使用邏輯運(yùn)算符將浮點(diǎn)閾值與熵的像素值進(jìn)行比較。在這種情況下,我們的二值圖像會(huì)將檢測(cè)中沒有細(xì)胞的區(qū)域設(shè)置為 True,將有細(xì)胞的區(qū)域設(shè)置為 False。

        最后,在這里我們可以看到圖像分割的結(jié)果。在這段代碼中,我們定義了一個(gè)子圖,其中將顯示原始圖像、使用熵過(guò)濾器的圖像以及同時(shí)使用熵過(guò)濾器和 Otsu 過(guò)濾器的圖像。“帶 Otsu 過(guò)濾器的分段試驗(yàn)”圖像將是我們劃痕試驗(yàn)分析的最終結(jié)果,讓我們看看所有這些代碼的輸出:

        正如我們?cè)谏厦娴膱D像中看到的,熵過(guò)濾器在原始圖像中產(chǎn)生了巨大的變化,熵過(guò)濾器檢測(cè)圖像像素中的微小變化,并根據(jù)圖像某些區(qū)域的復(fù)雜性劃分像素。正如我們?cè)诘诙垐D片中看到的,黑色條帶代表沒有細(xì)胞的區(qū)域,而灰色區(qū)域代表有細(xì)胞的區(qū)域。Otsu 過(guò)濾器通過(guò)實(shí)現(xiàn)一個(gè)閾值來(lái)鞏固這種分割,使我們能夠在劃痕分析的準(zhǔn)確時(shí)刻準(zhǔn)確地定位細(xì)胞的位置。

        最后,我們可以打印代表檢測(cè)中無(wú)細(xì)胞區(qū)域的像素?cái)?shù),以便更好地了解細(xì)胞是如何隨著時(shí)間移動(dòng)和增殖的


        補(bǔ)充說(shuō)明

        這個(gè)具體的項(xiàng)目對(duì)于理解圖像處理的一些基本方面非常有用,由于所有像素具有相同的 RGB 值,因此在本教程中分析的圖像非常難以分割。然而,在熵過(guò)濾器的幫助下,我們能夠生成一個(gè)基于紋理處理的圖像,然后我們可以使用 Otsu 閾值來(lái)更深入地了解該時(shí)間點(diǎn)的細(xì)胞位置。


        劃痕分析由一個(gè)時(shí)間序列組成,我們只分析了該時(shí)間序列中的一張圖像,生物學(xué)家在多個(gè)圖像中多次循環(huán)此過(guò)程,以生成細(xì)胞運(yùn)動(dòng)的時(shí)間序列表示。當(dāng)他們?yōu)g覽每張圖像時(shí),生物學(xué)家會(huì)記錄細(xì)胞運(yùn)動(dòng)和位置的變化,這為他們提供更多有關(guān)細(xì)胞增殖率和細(xì)胞遷移模式的信息。


        許多圖像處理過(guò)濾器需要復(fù)雜的高斯數(shù)學(xué)知識(shí),而大多數(shù)人沒有這方面的經(jīng)驗(yàn),但是 scikit-image 消除了實(shí)現(xiàn)此類過(guò)濾器所需的高級(jí)數(shù)學(xué)知識(shí)。然而,對(duì)高斯核和其他此類計(jì)算工具的了解,可以讓研究人員獲得預(yù)包裝軟件能夠提供的更準(zhǔn)確的可視化效果。


        我在下面添加了完整的代碼要點(diǎn)。


        代碼

        In [ ]:from skimage.filters.rank import entropyfrom skimage.morphology import diskfrom skimage.filters import threshold_otsufrom skimage import ioimport matplotlib.pyplot as pltimport numpy as npimport skimageIn [ ]:img = io.imread('images/scratch.jpg') # Reading Imageentropy_img = entropy(img, disk(10)) # Applying entropy filter for better segmentationIn [ ]:thresh = threshold_otsu(entropy_img) # Applying Otsu filter for optimal thresholdingIn [ ]:# Creating image in which all pixels with value less than threshold is equal to truebinary = entropy_img <= thresh # Composed of 0s and 1s (False and True)In [ ]:# Displaying Imagesfig, ax = plt.subplots(nrows=1, ncols=3, figsize=(12,10))
        ax[0].imshow(img)ax[0].set_title("Original Assay")
        ax[1].imshow(entropy_img)ax[1].set_title("Assay w/ Entropy Filter")
        ax[2].imshow(binary)ax[2].set_title("Segmented Assay w Otsu Filter")In [ ]:print(np.sum(binary == 1)) # the number of pixels that correspond to the clear space in the assay

        往期精彩回顧




        本站qq群851320808,加入微信群請(qǐng)掃碼:
        瀏覽 56
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产区一区 | 亚洲无码AAA | 性一级录像片片视频免费看 | 家庭乱伦一区 | 免费古装一级淫片潘金莲 | 尹人网大香蕉 | 一级二级三级高清视频 | 国产剧情无码 | 国产一级a毛一级a看免费软件下载 | 成 人 网 站 在 线 视 频不 |