Отличить guish дефектных зерен от изображения зерен - PullRequest
2 голосов
/ 18 июня 2020

Я пытаюсь классифицировать зерна на дефектные и исправные, используя инструменты обработки изображений, такие как OpenCV в Python. Одно из изображений выглядит так, как показано на рисунке.

Food Grains

Сначала я сегментировал зерна отдельно, ранжируя, используя пространство HSV, и применил некоторые алгоритмы обнаружения краев как хитрый, адаптивный порог, но я могу найти конкретный способ решить эту проблему, потому что я недавно начал исследовать и все еще изучаю возможности обработки изображений.

Неисправно:

Defective_1 canny_1 Defective_2 enter image description here enter image description here enter image description here

Исправен:

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

У меня два вопроса:

1) Какие показатели использовать для различения guish зерна, если я использую изображения edge_detected, как показано выше.

2) Поскольку обнаружение краев с помощью canny не удалось на третьем изображении исправных изображений, есть ли другие функции, на которые я мог бы положиться .

1 Ответ

3 голосов
/ 18 июня 2020

На примере:

import cv2
import numpy as np
img=cv2.imread('YfClv.jpg')
#convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#color definition
blue_lower = np.array([100,118,33])
blue_upper = np.array([119,255,160])
#blue color mask (sort of thresholding, actually segmentation)
mask = cv2.inRange(hsv, blue_lower, blue_upper)
se=cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (20, 20))
mask=cv2.dilate(mask, se)
mask=cv2.bitwise_not(mask)
edges = cv2.Canny(img,300,100) #find edges
out=cv2.bitwise_and(edges, mask) #xor for testing
#cv2.imshow('test', out)
cv2.imwrite('bad_seeds.png', out)

Результат, внутренние края: enter image description here

...