天天看點

western blot蛋白條帶灰階值掃描——python一、原理與思路二、python代碼三、代碼解析四、局限性

一、原理與思路

圖像由無數的像數構成,python讀取圖檔每一像數點的灰階值,從黑-白的灰階值為0~255,即越黑的地方灰階值越小,越白的地方灰階值越大。顯然,我們希望越黑的地方灰階值越大,是以需要做一個反轉,即用255減去各個像數點灰階值。接着,将所有非條帶部分的像數點灰階值改為0,而蛋白條帶部分灰階值保持不變。最後,隻要識别出每個蛋白條帶的區域,将其中所有像數點灰階值和。

western blot蛋白條帶灰階值掃描——python一、原理與思路二、python代碼三、代碼解析四、局限性

圖1  示例圖像

二、python代碼

# 導入子產品

from numpy import *

from PIL import Image

# 建構一個函數讀取灰階值圖像

def pictureRead(path):  # path為圖檔檔案路徑

    im = array(Image.open(path).convert('L'))

    im = 255 - im  # 黑白灰階值轉換

    # 白色部分灰階值轉換為0,黑色部分保持原值

    row, col = im.shape

    for i in range(row):

        for j in range(col):

            if im[i,j] < 128:

                im[i,j] = 0

    return im

# 建構一個函數識别蛋白條帶區域

def discern(array):

    list = []

    array = 1 * (array > 128) # 轉換為二值圖像,白色為0,黑色為1

    # 對每一列像素值求和,若與前一列結果不一緻則判斷為條帶邊緣

    row, col = array.shape

    for i in range(col):

        if (sum(array[:,i]) == 0) != (sum(array[:,i-1])==0):

            list.append(i)

    return list

# 建構一個函數求和各條帶灰階值

def greySum(array, list):

    sumlist = []

    for i in range(len(list)):

        if i % 2 ==0:

            sum = array[:,list[i]:list[i+1]].sum()

            sumlist.append(sum)

    return sumlist

#  運作

if __name__ == '__main__':

    path = r'C:\test.png'

    im = pictureRead(path)

    list = discern(im)

    area = greySum(im,list)

    print(area)
           

三、代碼解析

1)導入子產品

程式運作需要導入numpy和PIL子產品,如果你的python還未安裝這兩個子產品,程式出錯。

2)pictureRead()函數

pictureRead()函數用于讀取圖像,并進行一些轉換操作。這個函數需要您提供一個圖像檔案路徑的字元串參數path(如示例所示),經這一步處理後圖像如下:

western blot蛋白條帶灰階值掃描——python一、原理與思路二、python代碼三、代碼解析四、局限性

圖2  

圖2中,蛋白條帶輪廓清晰可見,但是示例圖像中第一條很淺的條帶消失了,這是函數中把灰階值小于128的像數點都改為0了,是以太淺的條帶,此程式可能無法掃描,或者您可以試着把128調低,看看能否把較淺的條帶識别出來。

3)discern()函數

discern()函數先将灰階圖像轉換成二值圖像,用于識别條帶左右邊緣,轉換後的二值圖像如下:

western blot蛋白條帶灰階值掃描——python一、原理與思路二、python代碼三、代碼解析四、局限性

圖3

此函數傳回一個清單,此例為:[76, 128, 134, 183, 194, 245, 249, 302],第1、2個值為第一個條帶左右邊緣的列下标,第3、4個為第二個條帶左右邊緣的列下标,依次類推。

4)greySum()函數

根據discern()函數獲得的清單資訊,對圖2的灰階圖像的蛋白條帶區域灰階值求和。

最後結果傳回一個清單:[166251, 100107, 129382, 158781]即表示各條帶灰階值

四、局限性

1)掃描灰階值的圖像,蛋白條帶間不要連在一塊,否則将視為一個條帶。

2)蛋白條帶灰階太低無法識别,需做修改。

3)結果可靠性有待評價,可與其他工具相比較。