Проблема:
Хотя текущая реализация хорошо работает на темном фоне, с ярким или неравномерно освещенный фон:
Обнаружение краев не работает или дает зашумленные результаты.
Алгоритму сложно надежно идентифицировать контуры документа.
Что я пробовал:
Скорректированный Канни пороговые значения: небольшое улучшение, но на ярком фоне все еще шумно.
Нормализация освещения: неоднозначные результаты в зависимости от окружающего освещения.
Фильтрация контуров по площади: помогает, но не устраняет шум.
Фрагмент кода:Вот логика предварительной обработки и обнаружения, которую я использую в Java:
Код: Выделить всё
// Grayscale and Edge Detection
Mat gray = new Mat();
Imgproc.cvtColor(rgba, gray, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(gray, gray, new Size(11, 11), 0);
Mat edges = new Mat();
Imgproc.Canny(gray, edges, 50, 100);
// Contours Detection
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(5, 5));
Imgproc.dilate(edges, edges, kernel);
List contours = new ArrayList();
Imgproc.findContours(edges, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
Collections.sort(contours, (lhs, rhs) ->
Double.valueOf(Imgproc.contourArea(rhs)).compareTo(Imgproc.contourArea(lhs)));
Ожидаемые: четкое определение краев документа независимо от условий освещения.
Фактические: при ярком/неравномерном освещении. края зашумлены или неразличимы, а контуры не могут надежно очертить документ.
Просьба о помощи:
Следует ли мне изучить адаптивное пороговое определение или другую предварительную обработку методы улучшения края обнаружение?
Существуют ли лучшие подходы для фильтрации шумных контуров на ярком фоне?
Какие-либо функции или параметры OpenCV, которые вы рекомендуете для нормализации освещения?
Подробнее здесь: https://stackoverflow.com/questions/792 ... arying-lig
Мобильная версия