我有显微镜的图片,我正在尝试计算水晶的总数以及具有特定颜色(红色,蓝色或黄色)的水晶总数。原则上看起来可以通过查看图片来实现,但考虑到我必须超过200,我相信脚本会更有效。
我的第一种方法是遵循一个非常相似的问题的建议(Finding number of colored shapes from picture using Python)然而,我的问题是水晶颜色和背景颜色(酒精溶液)几乎相同(透明),并且因此到目前为止,无法获得任何成功的结果。
我还检查了" skimage"模块(http://scikit-image.org/)但我遇到了与水晶/背景相同的问题。
使用以下代码,我可以得到一些开始有意义的东西,但它仍然远离我的目标:
import scipy
from scipy import ndimage
sand = scipy.misc.imread(img) # gray-scale image
sandf = ndimage.gaussian_filter(sand, 16)
T = 160 # set threshold by hand to avoid installing `mahotas`
# find connected components
#labeled, nr_objects = ndimage.label(sandf> T) #black-white
labeled, nr_objects = ndimage.label(sandf[:,:,0] > T) #colour
print ("Number of objects is %d " % nr_objects)
import matplotlib.pyplot as plt
plt.imshow(labeled)
plt.show()
如果有人能帮助我,我将非常感激。我甚至尝试修改我拍摄照片的方式,但没有。同样,我有两个目标:计算粒子总数,然后计算那些具有色调(红色,蓝色或黄色)的粒子
请在下面找到一张典型图片:
答案 0 :(得分:0)
这不是一个理想的解决方案,但它为计数提供了合理的答案。
import scipy, pylab, mahotas as mh
from scipy import ndimage
sand = scipy.misc.imread(img)
dnaf = ndimage.gaussian_filter(sand, 4)
T = mh.thresholding.otsu(dnaf)
labeled, nr_objects = ndimage.label(sand > T)
for i in range(20):
dnaf = ndimage.gaussian_filter(dnaf, 1)
T = mh.thresholding.otsu(dnaf)
labeled, nr_objects = ndimage.label(sand < T)
labeled, nr_objects = ndimage.label(sand > T)
pylab.imshow(labeled)
pylab.show()
print(nr_objects)
这是一个有趣的问题。我会尝试找一些时间来解决它并给你一些其他的选择。
答案 1 :(得分:0)
由于粒子会反射很多光线,如果将粒子放在深色背景上,处理图像会不会更容易?然后,应该更容易将粒子与背景分开。
答案 2 :(得分:0)
透明物品总是很难。我的方法是:
现在你应该能够计算组件
了