Алгоритм обнаружения инсульта в изображениях для обнаружения линий и кривых - PullRequest
2 голосов
/ 05 января 2020

Я ищу алгоритм, который обнаруживает все линии, включая кривые и т. Д. c. на рисунке, чтобы я мог перерисовать его, используя мое программное обеспечение в программе для рисования, как краска. Пока я хочу, чтобы он был перекрашен в черный и белый. Мой подход состоял в том, чтобы сделать трафарет рисунка и попытаться прочитать все черные пиксели в виде линий и, наконец, нарисовать его. Расчет строки выглядит примерно так:

 * for every pixel
 *      Point p = (x, y)
 *      List<Point> line
 *      while p is not marked
 *          mark p
 *          p = adjacent darkest pixel //brightness of a pixel is calculated by pixel luminance divided by 2 + luminance of the 8 adjacent pixels divided by 16
 *          add p to line
 *      end while
 *      draw line
 * end for

Мой подход работает, но не очень хорошо. Некоторые контуры обнаруживаются в виде двух строк.

My approach

У вас есть некоторые улучшения в моем алгоритме или еще лучше?

1 Ответ

2 голосов
/ 07 января 2020

Попробуйте Canny Edge Detection, который является популярным алгоритмом обнаружения краев. Это уже реализовано в OpenCV как cv2.Canny(). Используя скриншоты входного изображения, вот результат:

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

image

Результат (инвертированная и не инвертированная версия)

image image

Вот реализация в Python OpenCV

import cv2

# Load image, convert to grayscale, and perform Canny edge detection
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
canny = 255 - cv2.Canny(gray, 120, 255, 1)

# Show image
cv2.imshow('canny', canny)
cv2.waitKey()

Примечание: Чтобы автоматически определить нижний и верхний пороги, взгляните на Нулевой параметр, автомат c Обнаружение контуров с помощью Python и OpenCV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...