用于模糊图像中的对象检测(圆圈)的优秀Python工具

时间:2013-06-14 18:16:45

标签: python image-processing object-detection

所以我有TEM张图片,如下所示:

TEM

我可以使用Python模块来帮助我分析这个图像,特别是检测图片中的原子(圆圈)吗?

TEM的图像质量非常差,所以我需要一种足够强大的方法来区分原子和非原子。

我可以很容易地使用PIL打开图片并用它做事,但我希望找到一种可以检测圆圈的算法。

如果没有这样的工具,有谁知道如何制作我自己的算法来做到这一点?

1 个答案:

答案 0 :(得分:2)

这是尝试使用OpenCV计算图片中的原子数。这是一种很好的方法,但产生了不错的结果。首先将图片模糊一点,然后将其阈值,然后找到生成的轮廓。

以下是代码:

import cv2
image = cv2.imread('atoms.png')
image2 = cv2.cvtColor(
    image,
    cv2.COLOR_BGR2GRAY, 
    )
image2 = cv2.GaussianBlur(
    image2, 
    ksize=(9,9), 
    sigmaX=8,
    sigmaY=8,
    )
cv2.imwrite('blurred.png', image2)
hello, image2 = cv2.threshold(
    image2,
    thresh=95,
    maxval=255,
    type=cv2.THRESH_BINARY_INV,
    )
cv2.imwrite('thresholded.png', image2)
contours, hier = cv2.findContours(
    image2,  # Note: findContours() changes the image.
    mode=cv2.RETR_EXTERNAL,
    method=cv2.CHAIN_APPROX_NONE,
    )
print('Number of contours: {0}'.format(len(contours)))
cv2.drawContours(
    image,
    contours=contours,
    contourIdx=-1,
    color=(0,255,0),
    thickness=2,
    )
cv2.imwrite('augmented.png', image)
cv2.imshow('hello', image)
cv2.waitKey(-1)

stdout输出是:

Number of contours: 46

花些时间摆弄高斯模糊和阈值参数,我敢打赌你可以获得更准确的结果。