Экземплярная сегментация криволинейных поверхностейPython

Программы на Python
Ответить
Anonymous
 Экземплярная сегментация криволинейных поверхностей

Сообщение Anonymous »

У меня есть рендер четырех одинаковых объектов, и мне нужно сегментировать изогнутые поверхности и классифицировать их (связать похожие друг с другом).
Все объекты расположены под одинаковым углом относительно точки зрения. По сути задача сводится к выявлению и сопоставлению соответствующих 2D-образцов.
Я хочу сделать это без глубокого обучения, используя традиционные методы или алгоритмы компьютерного зрения.
Изображение

До сих пор я пробовал извлекать контуры с помощью Коварно, но результаты шумные, и Я не знаю, как их улучшить.

Код: Выделить всё

import cv2
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

image = np.array(image)

bil = cv2.bilateralFilter(image, d=2, sigmaColor=75, sigmaSpace=300)
edges = cv2.Canny(bil, 0, 20)

contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

min_length = 25
filtered_contours = [cnt for cnt in contours if cv2.arcLength(cnt, True) >= min_length]

filtered_edge_image = np.zeros_like(edges)
cv2.drawContours(filtered_edge_image, filtered_contours, -1, (255, 255, 255), 1)

image = Image.fromarray(filtered_edge_image.astype(np.uint8))
image
Изображение

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

Код: Выделить всё

import cv2
import numpy as np
from PIL import Image
from skimage.util import invert

img = cv2.imread("img.png", cv2.IMREAD_GRAYSCALE)
image = invert(img)

sobelx = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)

magnitude = np.sqrt(sobelx**2 + sobely**2)
magnitude = np.uint8(magnitude * 255 / np.max(magnitude))

thresh = cv2.threshold(magnitude, 0, 255, cv2.THRESH_BINARY)

Image.fromarray(thresh)
Изображение

В на этом этапе я застрял.
  • Как мне получить точные маски сегментации?
  • Как классифицировать маски одинаковых поверхностей? Стоит ли использовать аффинные преобразования?


Подробнее здесь: https://stackoverflow.com/questions/793 ... d-surfaces
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»