我以前从来没有用过计算机视觉的东西,我认为我可以用python来分析凝胶电泳。Here是一段视频,说明如果您不熟悉该过程,会发生什么。在
所以我从维基百科上取了一张凝胶的照片,然后用灰度滤镜,然后用双边滤镜去除污迹和伪影,然后用大津滤镜把突出的条纹分开。在
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'])
以下是目前的结果
我遇到了4个问题:
使用otsu阈值会导致一些来自浅色波段的数据丢失有没有更好的方法来获取波段数据?
有没有办法把每一行的结果返回到一个numpy/pandas数组中,在这个数组中,波段显示在矩阵上?(即0代表无带,1代表轻带,2代表中带,3代表重带)这将允许检测与DNA阶梯相匹配的带(参考行)。
什么方法可以用来计算从井到带的距离。
如果这张照片没有照直,我需要一个叫Image registration的东西吗?如果是,我在scikit-image
中找到它?
最后一件事,我使用的是python3和scikit image的最后一个稳定版本(如果需要的话)。在
或许可以联系一下https://github.com/hugadams/pyparty的作者,它构建在scikit图像之上。在
相关问题 更多 >
编程相关推荐