Вопрос или проблема
Я хочу отсканировать сотни листов формата A4, но у меня нет сканера.
У меня есть хорошая камера, так что я:
- Кладу бумагу на пол
- Светит яркими лампами на неё (включая солнечный свет)
- С помощью камеры зумирую, чтобы уменьшить искажения
- Снимаю с высоты
В результате у меня получается целая папка с изображениями в формате JPG, у которых есть следующие проблемы:
- Искажение подушкой
- Белый цвет скорее серовато-желтый
- Поля вокруг бумаги
Я ищу программу, которая может для каждого изображения автоматически:
- Обнаружить и исправить искажения подушкой и неортогональный угол
- Обнаружить и исправить поворот
- Угадать, где белый цвет, и сделать его действительно белым, чтобы результат выглядел красивее и увеличивалась сжимаемость, не уменьшая читаемость
- Обнаружить и обрезать поля, чтобы результирующий файл имел такую же форму, как и бумага. Параметры бумаги всегда можно угадать по теням и различиям в цвете.
Требования:
- Может работать автоматически на папке изображений, не требуется вмешательство человека
- Бесплатно, желательно с открытым исходным кодом
- Работает на Ubuntu Linux
Любой разумный формат вывода подойдет, например PNG или PDF.
Это может быть основано на GIMP, если оно может запускаться из командной строки или иным образом обрабатывать сотни JPG-файлов без вмешательства человека.
Я попробовал некоторые из решений, предложенных в комментариях к посту. Ниже мои комментарии:
- Unpaper – в целом это решение не сработало для меня. Хорошо работает с pbm изображениями (черно-белыми), но получить хорошее первоначальное изображение pbm было невозможно.
- Это решение, основанное на cv2 и skimage, сработало нормально. Объедините код Python из статьи и запустите его. Обратите внимание, что вам не нужен модуль pyimagesearch (он проприетарный и платный), код для функции four_point_transform предоставлен здесь. Мне пришлось поиграть с параметрами некоторых методов (threshold_local, cv2.Canny), чтобы получить хороший результат.
Ответ или решение
Программа для пакетной коррекции фотографий сканов на Linux
Введение
С учётом вашей необходимости обрабатывать большое количество фотографий, полученных с помощью камеры вместо сканера, важно выбрать подходящее программное обеспечение, которое не только автоматизирует, но и обеспечивает высокое качество результатов. В данной статье мы рассмотрим практические решения для устранения распространённых проблем, таких как искажение изображения, неправильная цветопередача и наличие лишних полей.
Проблемы, требующие решения
Необходимо учесть несколько основных недостатков, возникающих при фотографировании документов:
- Искажение изображения (cushion distortion), которое может повлиять на читаемость текста.
- Цветовой баланс, при котором белый цвет выглядит серым или жёлтым.
- Наличие излишних полей по периметру изображения, которые следует удалить.
Решения
Для автоматизации процесса обработки изображений на Ubuntu Linux, я предлагаю использовать комбинацию решений на основе OpenCV и Python, а также возможности таких инструментов, как GIMP и ImageMagick.
-
OpenCV и Python
С помощью библиотеки OpenCV можно создать скрипт, который выполнит все необходимые операции:- Коррекция искажения и непрямых углов – используйте метод
cv2.getPerspectiveTransform()
для преобразования и выравнивания изображений. - Определение и коррекция наклона – примените алгоритмы детекции границ (например, Canny) и анализ контуров для нахождения углов изображения.
- Коррекция цвета – можете использовать
cv2.cvtColor()
для преобразования изображения в цветовое пространство, позволяющее корректировать баланс белого. - Удаление полей – определите контуры, соответствующие документу, и используйте
cv2.boundingRect()
для обрезки.
Для примера, вот базовая структура кода:
import cv2 import numpy as np def process_image(image_path): # Загрузка изображения image = cv2.imread(image_path) # Коррекция искажения # Определение контуров и перспективное преобразование # Коррекция цвета # Баланс белого # Обрезка полей # Выделение контуров и обрезка return processed_image # Пакетная обработка изображений for image_file in image_files: result_image = process_image(image_file) cv2.imwrite(f"processed_{image_file}", result_image)
- Коррекция искажения и непрямых углов – используйте метод
-
GIMP с использованием командной строки
GIMP может быть использован для пакетной обработки изображений через его интерфейс командной строки. Используя сценарии на языке Script-Fu, вы можете автоматизировать коррекцию, аналогично тому, как это делается в OpenCV.gimp -i -b '(batch-process "input_directory" "output_directory")' -b '(gimp-quit 0)'
-
ImageMagick для изменения формата и обработки изображений
ImageMagick может быть использован для конвертации форматов файлов и дополнительной обработки изображений, например, повышения контрастности или коррекции цвета.mogrify -path output_directory -resize 800x800 -colorspace sRGB -level 20%,90% input_directory/*.jpg
Заключение
Для пакетной коррекции фотографий, полученных с помощью камеры, OpenCV является наиболее гибким и мощным решением, позволяет настроить процесс в соответствии с конкретными требованиями. Кроме того, сочетание GIMP и ImageMagick предоставляет дополнительные инструменты для обработки изображений. Все указанные решения бесплатны и открыты, что позволяет вам адаптировать их под ваши нужды. Выбор подходящего инструмента будет зависеть от вашего уровня комфорта с программированием и требования к качеству итоговых изображений.
Используя предложенные выше методы, вы сможете значительно упростить и улучшить процесс обработки ваших фотографий.