所以我想写一个应用程序,至少在未来可以移植到移动平台(如android),该平台可以扫描蛋白质凝胶的图像并返回数据,如一列中的条带数量(即权重)、相对浓度(条带厚度)和每列中每个条带的权重。
对于那些不熟悉的人来说,变性蛋白质的混合物(基本上是完全笔直的分子)被加载到每个柱中,通过电将蛋白质拉过凝胶(因为蛋白质是极性分子)。此图像每侧的结束列http://i52.tinypic.com/205cyrl.gif是放置已知重量的蛋白质混合物的地方(因此,如果你有4个不同的重量,顶部的带子是最大的重量,蛋白质的重量/大小越低)。这样的东西可以使用OpenCV进行分析吗?给定的图像是一种看起来非常干净的凝胶,它们经常会变得非常凌乱(参见谷歌图像)。我想,如果我允许用户输入列的数量,哪些列包含已知的重量标记和它们的实际重量,并在凝胶边缘提供一个可调整大小的矩形,那么也许可以扫描并从这些凝胶的图像中提取数据?我浏览了一本关于OpenCV的教科书,但我没有看到任何明显和可靠的方法。有什么想法吗?也许换一个图书馆更合适?
我相信你可以使用OpenCV 做到这一点
我的方法是基于颜色的分离。然后计算单独的不同成分。
在大步骤中,您的应用程序将执行以下步骤:
-
加载图像,通过应用程序的GUI手动旋转比例,以满足您的需求
-
创建第二个灰度图像,其中每个像素都包含一个介于[0255]之间的值,该值表示原点的颜色与目标颜色的匹配程度(在该图像中为蓝色阴影)在我的一个实验中,我使用了模糊集和阿尔法切割的概念来提取特定颜色的对象。三角隶属函数给了我很好的结果。这只是意味着我已经为所有三个颜色通道RGB定义了三角形函数,并对作为输入的每种颜色的结果求和。如果颜色的值接近三角形的中心,那么我有很强的相似性。此外,通过控制三角形的宽度,可以定义匹配的公差。(另一种选择是使用梯形隶属函数)
-
在这一点上,你有一个灰度图像,其中背景(凝胶)是黑色的,蛋白质是灰色/白色的。如果你想清除一些噪音,请使用形态运算符(第127页)侵蚀和扩张(openCV中的cvErode和cvDelate)。
-
之后,可以使用这个伟大的基于openCV的斑点提取库来提取剩余灰色区域的边界框-代表蛋白质
-
有了边界框的所有坐标,你可以应用自己的算法,提取你想要的任何数据
在我看来,OpenCV为您提供了所有必要的工具。然而,完全自动化的解决方案可能很难获得。但我相信你可以很容易地构建一个GUI,在上面描述的步骤中,你可以设置你应用的操作员的参数
至于Android:我不是为移动平台开发的,但我知道你可以为这些设备创建C++应用程序-已经阅读了几个关于iPhone的问题;openCV-,所以我认为你的应用程序是可移植的,或者至少是它的图像处理部分(GUI可能太特定于平台)。