+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-03(49)

2020-04(67)

2020-05(28)

2020-06(46)

2020-07(42)

western blot蛋白条带灰度值扫描——python

发布于2020-02-25 12:56     阅读(387)     评论(0)     点赞(11)     收藏(3)


0

1

2

3

4

5

一、原理与思路

图像由无数的像数构成,python读取图片每一像数点的灰度值,从黑-白的灰度值为0~255,即越黑的地方灰度值越小,越白的地方灰度值越大。显然,我们希望越黑的地方灰度值越大,因此需要做一个反转,即用255减去各个像数点灰度值。接着,将所有非条带部分的像数点灰度值改为0,而蛋白条带部分灰度值保持不变。最后,只要识别出每个蛋白条带的区域,将其中所有像数点灰度值和。

图1  示例图像

 

二、python代码

  1. # 导入模块
  2. from numpy import *
  3. from PIL import Image
  4. # 构建一个函数读取灰度值图像
  5. def pictureRead(path): # path为图片文件路径
  6. im = array(Image.open(path).convert('L'))
  7. im = 255 - im # 黑白灰度值转换
  8. # 白色部分灰度值转换为0,黑色部分保持原值
  9. row, col = im.shape
  10. for i in range(row):
  11. for j in range(col):
  12. if im[i,j] < 128:
  13. im[i,j] = 0
  14. return im
  15. # 构建一个函数识别蛋白条带区域
  16. def discern(array):
  17. list = []
  18. array = 1 * (array > 128) # 转换为二值图像,白色为0,黑色为1
  19. # 对每一列像素值求和,若与前一列结果不一致则判断为条带边缘
  20. row, col = array.shape
  21. for i in range(col):
  22. if (sum(array[:,i]) == 0) != (sum(array[:,i-1])==0):
  23. list.append(i)
  24. return list
  25. # 构建一个函数求和各条带灰度值
  26. def greySum(array, list):
  27. sumlist = []
  28. for i in range(len(list)):
  29. if i % 2 ==0:
  30. sum = array[:,list[i]:list[i+1]].sum()
  31. sumlist.append(sum)
  32. return sumlist
  33. # 运行
  34. if __name__ == '__main__':
  35. path = r'C:\test.png'
  36. im = pictureRead(path)
  37. list = discern(im)
  38. area = greySum(im,list)
  39. print(area)

三、代码解析

1)导入模块

程序运行需要导入numpy和PIL模块,如果你的python还未安装这两个模块,程序出错。

2)pictureRead()函数

pictureRead()函数用于读取图像,并进行一些转换操作。这个函数需要您提供一个图像文件路径的字符串参数path(如示例所示),经这一步处理后图像如下:

图2  

图2中,蛋白条带轮廓清晰可见,但是示例图像中第一条很浅的条带消失了,这是函数中把灰度值小于128的像数点都改为0了,所以太浅的条带,此程序可能无法扫描,或者您可以试着把128调低,看看能否把较浅的条带识别出来。

3)discern()函数

discern()函数先将灰度图像转换成二值图像,用于识别条带左右边缘,转换后的二值图像如下:

图3

此函数返回一个列表,此例为:[76, 128, 134, 183, 194, 245, 249, 302],第1、2个值为第一个条带左右边缘的列下标,第3、4个为第二个条带左右边缘的列下标,依次类推。

4)greySum()函数

根据discern()函数获得的列表信息,对图2的灰度图像的蛋白条带区域灰度值求和。

最后结果返回一个列表:[166251, 100107, 129382, 158781]即表示各条带灰度值


四、局限性

1)扫描灰度值的图像,蛋白条带间不要连在一块,否则将视为一个条带。

2)蛋白条带灰度太低无法识别,需做修改。

3)结果可靠性有待评价,可与其他工具相比较。

发布了3 篇原创文章 · 获赞 0 · 访问量 50

0

1

2

3

4



所属网站分类: 技术文章 > 博客

作者:天青色等烟雨

链接: https://www.pythonheidong.com/blog/article/233282/76ee35093a11c478399f/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

11 0
收藏该文
已收藏

评论内容:(最多支持255个字符)