python - 图像分析 : Finding proteins in an image

标签 python image-processing imagej

我正在尝试编写一个程序来自动定位图像中的蛋白质,这最终将用于区分存在的两种不同高度的蛋白质。 proteins in a membrane

背景顶部的白色区域是蛋白质所在的膜,存在的白色 Blob 是蛋白质。这些蛋白质有两个裂片,因此它们成对出现(实际上是一种蛋白质)。

我一直在用斐济 (Jython) 编写脚本来尝试定位蛋白质,以便我们可以根据本地背景计算出高度。到目前为止,这涉及应用自适应直方图均衡化,然后用半径为 10 像素的滚动球减去背景。之后,我一直在应用一个 10 像素乘 10 像素的内核,计算出 5 个中心像素的平均值,并将它除以内核 4 个边缘上的像素的平均值以获得比率。如果该比率高于某个值,则它是一个候选者。

我得到的输出是这张图片,除了一些环绕和敏感度 (ratio=2.0) 问题外似乎没问题。我的问题是:

  1. 这是一种合理的方法还是有明显更好的方法?
  2. 你能建议从这里开始的方法吗?我现在有点卡住了,不确定如何继续。

enter image description here

代码(如有必要):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()

这给出了这个:

enter image description here

关于python - 图像分析 : Finding proteins in an image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526269/

相关文章:

java - 加载插件时调用 run() 方法是如何工作的?

python - Matplotlib - 强制在脚本内显示

python - 如何在 python 中从 csv 读取编码字符串的数据帧

python - 从嵌套Python字典导出csv

保存 jpg 图像时 Java 1.5.0_16 颜色损坏

image - 什么是缝(缝雕)

python - 无法循环遍历 QTableWidget 的列

matlab - 使用 KNN 进行词袋分类

java - ImageJ 叠加堆栈

java - Gradle 找不到方法编译