检测背景非常嘈杂的重叠对象

I am currently trying to dectect some reflective and overlapping objects in several images. These images all come with noisy background and the objects I want to detect are overlapping badly. Here are some examples of the images: overlapping and sometimes the background can be bad too

除了能够检测对象之外,我还希望将来对它们进行计数(因此,当出现重叠时,它需要知道有多少个对象重叠)。

我尝试的是先对图像进行去噪,然后尝试应用精巧边缘。

image = cv2.fastNlMeansDenoisingColored(image,None,10,10,7,21) #denoise twice
image = cv2.fastNlMeansDenoisingColored(image,None,10,10,7,21)
imageblur = cv2.GaussianBlur(image,(5,5),0) #blur
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edged = cv2.Canny(gray, 10, 250)
hist = cv2.calcHist([gray],[0],None,[256],[0,256]) #check pixel histogram
#plt.hist(gray.ravel(),256,[0,256]); plt.show()

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))
dilated = cv2.dilate(edged,kernel,iterations = 1)
closed = cv2.morphologyEx(dilated, cv2.MORPH_CLOSE, kernel)
imcompare = cv2.hconcat([edged,closed])
imcompare = cv2.resize(imcompare, (0,0), fx=0.7, fy=0.7) 
cv2.imshow('Compare',imcompare)
(cnts, _) = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

And these are my results: without bounding boxes, with boxes

我不是CV专家,我知道我现在正在尝试的方法可能无法达到预期的效果,但是我真的希望我能完成这个项目,因此,非常感谢任何提示或指导!我愿意学习任何可能有帮助的材料,而我只想至少有一个可以借鉴的起点。

顺便说一句,我还尝试研究了不同的色彩空间,像素直方图,分水岭等,但对我而言,一些具有挑战性的部分是,我的“物体”不是颜色均匀的物体,而是覆盖了很大的强度范围(因为它具有反射性)而且背景也会让人分心。我还考虑过使用神经网络或YOLO或其他一些ML方法,但是我不知道哪种方法最好(因为我也想分离重叠的对象)。

感谢任何回应!