2014-02-06 50 views
1

我從來沒有使用過計算機視覺的東西之前,我想我可以用Python凝膠電泳的分析。 Here是解釋,如果你不熟悉的過程中所發生的事情的錄像。Python的凝膠電泳數據的Scikit圖像處理

因此,我從凝膠的維基百科拍攝了一張照片,然後使用灰度濾鏡,然後使用雙邊濾鏡來消除污跡和僞影,然後使用Otsu濾鏡分離出明顯的條紋。

import numpy as np 
import matplotlib.pyplot as plt 

from skimage import data, io 
from skimage.filter import threshold_otsu, denoise_bilateral 
from skimage.morphology import closing, square 
from skimage.measure import regionprops 
from skimage.color import label2rgb, rgb2gray 


image = io.imread('http://upload.wikimedia.org/wikipedia/commons/6/60/Gel_electrophoresis_2.jpg') 


#grayscaling 
gray_image = rgb2gray(image) 

# bilateral filtering 
bilat=denoise_bilateral(gray_image, sigma_range=0.05, sigma_spatial=20) 

# apply threshold Otsu 
thresh = threshold_otsu(bilat) 
bw = closing(bilat > thresh, square(1)) 

#print process 
def show_images(images,titles=None): 
    """Display a list of images""" 
    n_ims = len(images) 
    if titles is None: titles = ['(%d)' % i for i in range(1,n_ims + 1)] 
    fig = plt.figure() 
    n = 1 
    for image,title in zip(images,titles): 
     a = fig.add_subplot(1,n_ims,n) 
     if image.ndim == 2: 
      plt.gray() 
     plt.imshow(image) 
     a.set_title(title) 
     n += 1 
    fig.set_size_inches(np.array(fig.get_size_inches()) * n_ims) 
    plt.show() 

#print data 
show_images(images=[image, bilat, bw], titles=['Normal', 'Bilateral filter', 'Otsu Threshold']) 

這裏是什麼結果目前看起來像 Wikipedia Gel electrophoresis

我有4個問題,我就死在:

  1. 使用大津門檻導致從淺色帶一些數據丟失有更好的方法獲得樂隊數據?

  2. 有沒有辦法將每行的結果返回到矩陣上顯示帶的numpy/pandas數組? (即,0表示沒有條帶,1光帶,2表示介質帶,3爲重頻帶)這將允許檢測與該DNA梯(參考行)匹配頻帶。

  3. 什麼方法可以用來計算從井到波段的距離。

  4. 如果圖片沒有直接拍攝,我需要一個叫做Image registration的東西嗎?如果是的話,我在哪裏可以找到scikit-image

最後,我使用python 3和scikit-image的最後一個穩定版本(如果它很重要)。

回答

1

也許與https://github.com/hugadams/pyparty的作者建立在scikit-image之上。

  1. 您可能希望先均衡圖像(見「曝光」子模塊)
  2. 你首先要做的某種峯值檢測(見「功能」子模塊)
  3. 我m不太清楚你在這裏問的是什麼
  4. 反而是圖像變形(參見「變換」子模塊)