Я запускаю обнаружение blob на изображении камеры круговых объектов, используя OpenCV 2.4.9. Я запускаю ряд стандартных фильтров на изображении (размытие, адаптивный порог, скелетонирование с использованием схем скинов и расширение каркаса) и хотел бы определить результат (сплошные черные области) на результат. Для этого есть SimpleBlobDetector, но, однако, я устанавливаю его параметры, он не делает то, что я хотел бы.настройка параметров обнаружения блоба в python
и это обработанная версия, с характерными точками от детектора нарисованного в желтом цвете:
В ключевых точках, кажется, не соблюдать ограничение зоны, и также не появляются там, где я ожидал бы их.
Сценарий выглядит следующим образом: есть ли что-то явно неправильное? Или любые другие предложения?
import numpy as np
import cv2
import skimage, skimage.morphology
img0=cv2.imread('capture_b_07.cropped.png')
img1=cv2.cvtColor(img0,cv2.COLOR_BGR2GRAY)
img2=cv2.medianBlur(img1,5)
img3=cv2.bilateralFilter(img2,9,75,75)
img4=cv2.adaptiveThreshold(img3,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,21,0)
img5=skimage.img_as_ubyte(skimage.morphology.skeletonize(skimage.img_as_bool(img4)))
img6=cv2.dilate(img5,cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)),iterations=1)
# blob detection
pp=cv2.SimpleBlobDetector_Params()
pp.filterByColor=True
pp.blobColor=0
pp.filterByArea=True
pp.minArea=500
pp.maxArea=5000
pp.filterByCircularity=True
pp.minCircularity=.4
pp.maxCircularity=1.
det=cv2.SimpleBlobDetector(pp)
keypts=det.detect(img6)
img7=cv2.drawKeypoints(img6,keypts,np.array([]),(0,255,255),cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite('capture_b_07.blobs.png',img7)
Похожие трубопровод из ImageJ (Анализ частиц, округлость 0,5-1,0, площадь 500-5000 точек^2), который я пытаюсь воспроизвести с помощью OpenCV, дает что-то вроде этого:
Вы сможете получить аналогичную сегментацию, что и ImageJ использования водораздела. – dhanushka