我正在尝试编写一个程序来自动定位图像中的蛋白质,这最终将用于区分存在的两种不同高度的蛋白质。
背景顶部的白色区域是蛋白质所在的膜,存在的白色 Blob 是蛋白质。这些蛋白质有两个裂片,因此它们成对出现(实际上是一种蛋白质)。
我一直在用斐济 (Jython) 编写脚本来尝试定位蛋白质,以便我们可以根据本地背景计算出高度。到目前为止,这涉及应用自适应直方图均衡化,然后用半径为 10 像素的滚动球减去背景。之后,我一直在应用一个 10 像素乘 10 像素的内核,计算出 5 个中心像素的平均值,并将它除以内核 4 个边缘上的像素的平均值以获得比率。如果该比率高于某个值,则它是一个候选者。
我得到的输出是这张图片,除了一些环绕和敏感度 (ratio=2.0) 问题外似乎没问题。我的问题是:
- 这是一种合理的方法还是有明显更好的方法?
- 你能建议从这里开始的方法吗?我现在有点卡住了,不确定如何继续。
代码(如有必要):http://pastebin.com/D45LNJCu
谢谢!
山姆
最佳答案
如何从更简单的开始并使用 Harris 点方法检测局部最大值。例如。
import numpy as np
import Image
from scipy import ndimage
import matplotlib.pyplot as plt
roi = 2.5
peak_threshold = 120
im = Image.open('Q766c.png');
image = im.copy()
size = 2 * roi + 1
image_max = ndimage.maximum_filter(image, size=size, mode='constant')
mask = (image == image_max)
image *= mask
# Remove the image borders
image[:size] = 0
image[-size:] = 0
image[:, :size] = 0
image[:, -size:] = 0
# Find peaks
image_t = (image > peak_threshold) * 1
# get coordinates of peaks
f = np.transpose(image_t.nonzero())
# Show
img = plt.imshow(np.asarray(im))
plt.plot(f[:, 1], f[:, 0], 'o', markeredgewidth=0.45, markeredgecolor='b', markerfacecolor='None')
plt.axis('off')
plt.savefig('local_max.png', format='png', bbox_inches='tight')
plt.show()
这给出了这个:
关于python - 图像分析 : Finding proteins in an image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526269/