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);
Боюсь, у меня нет особого энтузиазма, чтобы написать много разных способов, это не совсем то, для чего нужно переполнение стека. Этот предложенный способ может привести вас на правильный путь.