我正在尝试处理一个简单的应用程序,在培养皿照片上计数细菌菌落。我主要使用python和cv2库。在
我使用上面的代码:
#reading image (reading is fixed for tests) and putting Opening morphological transformation to improve edge visibility
img = cv2.imread("image1.jpg",1)
img = cv2.resize(img,(500,500))
kernel = py.ones((7,7),py.uint8)
open = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
#converting colors to GRAY scale, setting threshold and contours. Setting a copy for result comprasion
img_gray = cv2.cvtColor(open, cv2.COLOR_BGR2GRAY)
copy = img.copy()
ret,thresh = cv2.threshold(img_gray,190,255,cv2.THRESH_BINARY)
im2,contours2,hierarchies = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#drawing and counting countours (colonies)
visible_colonies = 0
for contour in (contours2):
(x,y),radius = cv2.minEnclosingCircle(contour)
center = (int(x),int(y))
radius = int(radius)
if(radius>2 and radius<25):
cv2.circle(img,center,radius,(255,0,255),2)
visible_colonies += 1
#showing result
plt.imshow(img)
plt.show()
print(visible_colonies)
plt.imshow(copy)
plt.show()
我可以清楚地看到有许多轮廓(菌落)没有被圈起来。同时,也有一些轮廓线什么都没有。在
我所做的:
我的怀疑:
最后,我的问题来了——如何尽可能提高轮廓的精确性?我不想用任何简单化的方法,我希望它尽可能准确。在
一个好的方法是使用^{} 进行颜色阈值分割。其思想是将图像转换为HSV格式,并使用较低/较高的颜色阈值来分割菌落。我们把检测到的菌落画在面具上,然后在面具上找到轮廓。在
用彩色分割的菌落涂在面膜上
结果
我们还可以记录菌落的数量
潜在的优化是提供更高分辨率的图像以获得更精确的结果。其他过滤器将使用
cv2.contourArea()
和最小阈值区域大小,如果您只想检测中/大型菌落。在使用此脚本可以找到下限和上限
^{pr2}$相关问题 更多 >
编程相关推荐