OpenCV исправляет отсканированные документы, отсутствующие (белые пиксели) линии сканирования

У меня есть около 500 страниц PNG, представляющих схему для мэйнфрейма DIGITAL DECsystem-20 KL10PV начала 1980-х годов (общедоступный). Процесс сканирования был ошибочным в том, что в PNG случайно вкраплены белые линии, которые представляют систематическую "соль" на чертеже. Это мешает процессу, который я использую для восстановления схемы - и OCR, и восстановление списка соединений компонентов и соединений.

Увеличенная часть страницы схемы

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

Какой волшебный механизм OpenCV я могу использовать, чтобы обнаружить эти белые полосы и "исцелить" их, скопировав среднее значение ряда выше и ряда ниже, или подобного? Я ожидаю попробовать несколько методов "исцеления", чтобы найти лучший, когда найду механизм для систематического выявления этих недостатков.

1 ответ

Решение

Вы имеете в виду, как это?

Этот конкретный метод использует размытие и морфологию для обработки изображения. Я заимствовал код отсюда

    int morph_elem = 1;
    int morph_size = 1;
    int morph_operator = 0;

    Mat origImage = mat;
    medianBlur(origImage, origImage,1);
    cvtColor(origImage, origImage, COLOR_RGB2GRAY);
    threshold(origImage, origImage, 0, 255, THRESH_OTSU);

    Mat element = getStructuringElement(morph_elem, Size(2 * morph_size + 1, 2 * morph_size + 1), cv::Point(morph_size, morph_size));

    morphologyEx(origImage, origImage, MORPH_OPEN, element);
    //thin(origImage, true, true, true);
    imshow("@", origImage);

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

Другие вопросы по тегам