Я уже некоторое время бьюсь головой о метафорическую стену по этой проблеме, надеюсь, кто-то может помочь мне дать какое-то указание.
Я пытаюсь найти объект внутри картинки; однако фон загроможден, и мой детектор краев собирает объекты на заднем плане
Я прибегнул к некоторой сегментации, чтобы фон, казалось бы, смешался вместе, и я получаю результаты, подобные этому:
Проблема:
Пока он находит банку с коксом, он мне нужен, чтобы не найти кабину inet на заднем фоне. Причина в том, что мне нужно это для работы с роботом и чтобы робот мог автономно знать, может ли он взаимодействовать с объектом, который он видит.
Другие условия:
Я знаком с пороговым значением ВПГ, и, хотя он может решить эту проблему, c проблема с коксом может быть довольно простой, мне также нужно решение, которое работает с бутылками с водой.
Вот образец воды bottle картинка для работы:
Код для обнаружения банки:
import cv2
import numpy as np
import matplotlib.pyplot as plt
import skimage.segmentation as seg
import skimage.color as color
#read in image and downsize
img = cv2.imread('coke.jpg', cv2.IMREAD_COLOR)
img = cv2.resize(img, None, fx=.2, fy=.2, interpolation=cv2.INTER_AREA)
#segment
image_slic = seg.slic(img,n_segments=20)
img = color.label2rgb(image_slic, img, kind='avg')
thresh = 0.01*img.size #minimum size for object to be detected
edges = cv2.Canny(img, 50, 200)
edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, np.ones((3,3), np.uint8), iterations=1)
contours, hierarchy = cv2.findContours(edges.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#draw contours
for i, c in enumerate(contours):
x,y,w,h = cv2.boundingRect(c) #get bounding box
if w*h >= thresh: #if bounding box big enough
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,255),2)