所以我想做的是编写一个应用程序,至少在未来,可以移植到移动平台(如android),可以扫描蛋白质凝胶的图像并返回数据,如乐队的数量(即重量)在一列中,相对浓度(带的厚度),以及每列中每个的重量。
对于那些不熟悉的人,将变性蛋白质的混合物(基本上是直接完成的分子)加载到每个柱子中,并且利用电力将蛋白质拉过凝胶(因为蛋白质是极性分子) 。此图像http://i52.tinypic.com/205cyrl.gif每侧的末端列是放置已知重量的蛋白质混合物的地方(因此,如果您有4种不同的重量,顶部的带子是最大的重量,并且重量/大小是蛋白质越往下降就越小。是否可以使用OpenCV进行分析?给定的图像是一个非常干净的凝胶,它们经常会变得非常混乱(参见谷歌图片)。我想如果我允许用户输入列数,哪些列包含已知的重量标记和它们的实际重量,以及提供一个可调节的矩形来调整凝胶边缘的大小,也许可以扫描和从这些凝胶的图像中提取数据?我浏览了一本关于OpenCV的教科书,但我没有看到任何明显可靠的方法来解决这个问题。有任何想法吗?也许一个不同的图书馆更适合?
答案 0 :(得分:5)
我相信你可以使用OpenCV
来做到这一点我的方法是基于颜色的分离。然后计算单独的不同组件。
您可以通过大步骤执行以下步骤:
加载图片,通过应用的GUI手动旋转图像,以满足您的需求
创建第二个灰度图像,其中每个像素包含[0,255]之间的值,表示原始点的颜色与目标颜色的匹配程度(在this image的情况下,蓝色) 在我的一个实验中,我使用模糊集和alpha切割的概念来提取某种颜色的对象。三角隶属函数给了我很好的结果。这只是意味着我已经定义了triangular functions for all three color channels RGB,并将每个颜色的结果总结为输入。如果颜色的值接近三角形的中心,那么我有很强的相似性。另外,通过控制三角形的宽度,您可以定义匹配的容差。 (另一种选择是使用梯形隶属函数)
此时你有一个灰度图像,背景(凝胶)是黑色,蛋白质是灰色/白色。如果您希望消除一些噪音,请使用morphological operators(第127页)侵蚀和扩张(cvErode和cvDelate in openCV)。
之后,可以使用此great openCV based blob extraction library提取剩余灰色区域的边界框 - 代表蛋白质
拥有边界框的所有坐标,您可以应用自己的算法,提取您想要的任何数据
在我看来,OpenCV为您提供了所有必要的工具。但是,可能很难获得完全自动化的解决方案。但我确信您可以轻松构建一个GUI,您可以在其中设置您在上述步骤中应用的运算符的参数
至于Android:我没有为移动平台开发,但我知道你可以为这些设备创建C ++应用程序 - 已经阅读了几个关于iPhone和iPhone的问题。 openCV - ,所以我认为你的应用程序是可移植的,或者至少是它的图像处理部分(GUI可能过于特定于平台)。