Обнаружение линии в эскизах

-4

Я ищу способ найти штрихи в рисованных эскизах. Мой фактический подход заключается в применении адаптивного порогового значения и findContours из OpenCV. Проблема в том, что findContours дает мне правую сторону и левую сторону, верхний и нижний контуры одного хода. Есть ли способ получить одно контурное представление из ручного удара?

заранее спасибо

Отредактировано:

Вот код и изображение того, что я до сих пор добился:

Сначала я применил адаптивное пороговое значение к исходному изображению:

Imgproc.GaussianBlur(image, image, new Size(5, 5), 3);
Mat thresholded = Mat.zeros(image.size(), CvType.CV_8U);

Затем я применил findCountours на пороговом изображении и дополнительно approxPolyDB на каждом контуре.

Imgproc.findContours(thresholded, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0,0));

List<MatOfPoint> refinedContours = new ArrayList<MatOfPoint>();
for (int i = 0; i < contours.size(); i++) {
MatOfPoint2f approx = new MatOfPoint2f();
Imgproc.approxPolyDP(mop2mop2f(contours.get(i)), approx, 6, true);
}

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

На картинке вы можете увидеть пороговое изображение в качестве конечных контуров

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

благодаря

спросил(а) 2016-06-09T13:50:00+03:00 4 года, 5 месяцев назад
0
92

Для поиска контуров используется контурный поиск. Это имеет смысл только в том случае, если вы заинтересованы в контурах пусть говорят тело некоторой толщины. Вас интересуют линии. Если вы наложите контурный искатель на толстую линию, вы получите 2 строки вместо одного, что даст вам еще больше данных.

Я предлагаю вам вместо этого использовать алгоритм прореживания. Сделайте бинаризацию изображения с помощью подходящего порога, затем примените алгоритм прореживания/скелетонирования.

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

Используйте алгоритмы обрезки, чтобы очистить ваш скелет.

Читайте это: http://homepages.inf.ed.ac.uk/rbf/HIPR2/thin.htm

ответил(а) 2016-06-13T16:05:00+03:00 4 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема