【发布时间】:2014-02-06 11:15:36
【问题描述】:
我以前从未使用过计算机视觉的东西,我认为我可以使用 python 来分析凝胶电泳。 Here 是一个视频,解释了如果您不熟悉该过程会发生什么。
所以我从维基百科上拍了一张凝胶的照片,然后使用灰度滤镜,然后使用双边滤镜去除污迹和伪影,然后使用 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'])
这是目前的结果
我遇到了 4 个问题:
使用 otsu 阈值会导致浅色波段的一些数据丢失,是否有更好的方法获取波段数据?
有没有办法将每行的结果返回到 numpy/pandas 数组,其中波段显示在矩阵上? (即 0 表示无条带,1 表示轻条带,2 表示中等条带,3 表示重条带)这将允许检测与 DNA Ladder(参考行)匹配的条带。
可以用什么方法计算孔到波段的距离。
如果照片不是直接拍的,我需要一个叫做Image registration的东西吗?如果是这样,我在哪里可以找到
scikit-image?
如果重要的话,我使用 python 3 和 scikit-image 的最后一个稳定版本。
【问题讨论】:
标签: python numpy computer-vision scikit-image