классификация идентичных и близких объектов - PullRequest
0 голосов
/ 21 марта 2020

Я имею дело со следующей проблемой, мне нужно отметить как можно больше помидоров (чтобы их можно было разделить по цветам и классифицировать).

То, что я делал в течение двух лет, я попробовал несколько вещей, и наиболее выдающимся из них является то, что я прикрепил.

Первый метод - карта в градациях серого - это водораздел на сером изображении после выполнения hminima, затем я попытался приблизить центр и радиус блока круга для каждый сегмент.

Второй метод, я сделал суперпиксель (вложение), используя алгоритм sli c после Канни отсюда, а затем расширил, конечно, есть заполнение объектов друг в друге, так что хотя это не помогло меня слишком много.

У вас есть другая идея, которая может сработать? Или направление относительно того, что я сделал, могло бы улучшить то, что я сделал?

Я также пытался сделать kmeans, потому что он также раскрашен, но не помог, я попытался взять карту yuv и сделать баланс гистограммы для y .

исходное изображение

алгоритм водораздела

алгоритм суперпикселей (sli c)

Канни и расширен после супер пикселя

пример кода:

from skimage.segmentation import slic
from skimage.measure import regionprops
import cv2
import numpy as np
import pylab as plt
from skimage import morphology

def paint_region_with_avg_intensity(rp, mi, channel):
    for i in range(rp.shape[0]):
        img[rp[i][0]][rp[i][1]][channel] = mi


image = cv2.imread(r"E:\PythonProjects\wsc\assorted_tomatoes.jpg") 
img = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
segments = slic(img, n_segments=256, compactness=10,
            multichannel=True,
            enforce_connectivity=True,
            convert2lab=True)

for i in range(3):
    regions = regionprops(segments, intensity_image=img[:,:,i])
    for r in regions:
        paint_region_with_avg_intensity(r.coords, int(r.mean_intensity), i)

plt.imshow(img)
plt.show()
edge = cv2.Canny(img,100,200)
plt.figure()
plt.imshow(edge,cmap='gray')
dilate = cv2.dilate(edge,None,iterations=1)
plt.figure()
plt.imshow(dilate,cmap='gray')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...