CardArrange - программа обработки сканов карточных игр

Автор Dimon_II, 16 августа 2019, 14:49:35

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Dimon_II

Проект со всеми исходниками переехал на GITHUB:
CardArrange.zip
Новые фичи:
- Исправлено смещение при работе с большими градусами
- Разделение большой картинки(игрового поля) для печати с вылетами под обрезку
- Разворот загруженной картинки на 90 градусов
- Якорь для ручного вращения: TopLeft/Center
- На предпросмотре показаны контуры карты и рамки

Старые версии:
CardArrange.zip
CardArrange2021.zip - на тестирование


FREE SOFTWARE, поставляется как есть, написано на Delphi7 для себя и не оптимизировалось.
Программа позволяет выделить на картинке  несколько прямоугольных областей, расположенных под разными углами и сохранить в отдельные файлы или более аккуратно расположить на одном листе.

Требования к картинке для авто-распознавания:
1. Автоматическое распознавание работает для угла не более 30 градусов (по умолчанию - 20)
2. Карты на листе должны быть с явными интервалами.
3. Должны быть хорошо заметные границы самой карты или рисунок рамки на карте.
4. Карты не должны быть вплотную к краю картинки.

Порядок работы:

1. Загрузите изображение (Load).
2. Задайте размеры карт (Size), число карт на листе (Count)и примерный отступ слева/сверху (Delta)
3. Двойным кликом по верхнему левому углу карты на картинке можно установить рамку и проверить правильность размеров.
4. Кнопка  ?{: заполняет таблицу примерными координатами карт по их размерам и числу.
5. Когда картинка загружена - доступно авто-распознавание. Если центр распознанной области  находится в области "примерной" карты - то для нее устанавливаются новые координаты и угол, иначе в таблицу добавляется строка. Регулятор шага перемещения также управляет контрастностью распознавания. В новой версии это отдельный ползунок сверху. Для очень контрастных (черная рамка) сдвиньте вправо до упора.
Если на всех картах рамка одного цвета, можно использовать новый режим автопоиска Frame.
Для этого выберите цвет рамки:
- кнопка Frame color и кликнуть на картинке в области с нужным цветом
- переключите режим  Ground / Frame
- и пробуйте с разной контрастностью.

6. При выборе карты в таблице она показывается на экране с мерцающей рамкой. Координаты и угол можно исправить, используя кнопки со стрелками и поворотом карт, двойным кликом по верхнему левому углу или ввести координаты вручную.
7. Эта таблица записывается в INI-файл с именем файла-картинки и автоматически загружается при повторной загрузке картинки.
8. Экспортируются карты тем же блоком, как на исходном изображении (например 3х3), опцией Split можно поменять блок экспорта или сохранять карты по одной в отдельный файл.
9. Frame - применяется, если все карты на листе имеют рамку одинакового цвета. Рисует одноцветную рамку поверх карты, Round rect - скругляет углы рамки, Frame color позволяет выбрать цвет на исходном изображении. Если видимые элементы карты отстоят от ее края, временно можно назначить рамку для ручного позиционирования и обнулить перед экспортом.
10. Cutting line добавляет при экспорте метки реза
11. Параметры Border, Interval уточняют размещение карт при экспорте, Mirror заполняет интервал между картами.
12. Закладка Selected  позволяет посмотреть уже повернутую карту и ориентируясь на какой-то вертикальный элемент уточнить градус поворота, совместив при нажатой кнопке мыши картинку в увеличенном блоке.
13. Если авто-распознание с ошибками или невозможно - карты можно выделять вручную.
- Выбираете строку с картой в таблице,
- совмещаете рамку в с верхним левым углом соотв.карты двойным кликом или клавишами-стрелками при зажатом Ctrl, шаг смещения задаётся ползунком.
-  поворачиваете рамку относительно верхнего левого угла, используя клавиши Ctrl-PgUp / Ctrl-PgDn или щелкая мышью по кнопкам. Шаг поворота задаётся ползунком.

Дмитрий Яценко
[email protected]

Post Merge: 16 августа 2019, 14:52:51

По просьбе общественности:

Видео полностью ручного выравнивания карт видео-пример

Пример автораспозавания очень неудобного не контрастного скана, на четких рамках и большего размера картинках положение и угол наклона карт определяется намного точнее. видео-пример (ну не силён я в видео...)



Dimon_II

#1
(Файл тот же)
1. Улучшен алгоритм определения карт
2. Добавлена визуализация процесса распознавания
3. Процесс можно прервать

Post Merge: 30 августа 2019, 08:23:00

Minor bugfix - форма с отображением процесса распознавания могла не полностью отображаться при другом DPI монитора (scaled установлено в FALSE).

Dimon_II

Новый инструмент для ручного исправления:
на отдельной картинке справа внизу показаны УГЛОВЫЕ части карты, без масштабирования, совмещенные рядом.
Хорошо видна ступенька, если край карт контрастный. 

Смущает, что эти части смещаются зеркально относительно рамки вокруг карты.

Dimon_II

Добавлены режимы автопоиска карт: Ground(старый) / Frame (новый).

Если на всех картах рамка одного цвета, можно использовать режим автопоиска Frame.
Для этого выберите цвет рамки:
- кнопка Frame color и кликнуть на картинке в области с нужным цветом
- переключите режим  Ground / Frame
- и пробуйте с разной контрастностью.

Dimon_II

Проект со всеми исходниками переехал на GITHUB:
CardArrange.zip
Новые фичи:
- Разворот загруженной картинки на 90 градусов
- Якорь для ручного вращения: TopLeft/Center
- На предпросмотре показаны контуры карты и рамки
  •  
    Пользователи, которые поблагодарили этот пост: koros, Covax

Dimon_II

Новые фичи:
- Разделение большой картинки(игрового поля) для печати с вылетами под обрезку

CardArrange.zip

  •  

sokrat

Приветствую опытного разработчика для пнп-мейкинга.
Сам месяц назад начал писать авторотатор карт на скане, поэтому спасибо за труд.
Сделал так себе версию, мало что умеющую, поэтому просто хотел сказать спасибо за вклад желающим попечатать/порезать/поламинировать.
Может нужна помощь или есть лист пожеланий для реализаций? Может получиться поколабить.
Я пишу на C#, а на делфи писал в универе.
Моя прога тоже opensource, посмотреть можно на гитхабе https://github.com/sokrata/CardRotager
  •  

Dimon_II

#7
У мню программа изначально под ручное (из)вращение карт делалась, автоматику я относительно недавно дописал.
Алгоритм:
- делается заливка от угла (половина "дельты" верхней левой карты, потому что края скана часто сильно отличаются по цвету), контрастность сравнения задаётся ползунком
- два варианта: заливать похожие цвета или не трогать определенный, если у всех карт одноцветная рамка.
- запоминаются области, не залитые в процессе
- анализируются только области, имеющие периметр больше 2/3 размера карты
- примерное расположение центров карт берется из настройки (размер и расположение на листе) и находится ближайший периметр (был вариант с анализом всех областей, но вылезало слишком много ошибок)
- вычисляется реальный центр, по минимальному и максимальному XY найденной области
- от центра влево или вверх считается под углом два вектора до пересечения с периметром
- по разности  их длины определяется угол наклона карты

Плюс никто не запрещает исправить ошибки вручную.
  •  
    Пользователи, которые поблагодарили этот пост: sokrat

Mamosik

Если удалить онлайн игры и ютуб, то времени хватит на всё.
  •  

duckbill

Цитата: Dimon_II от 18 октября 2021, 16:10:39У мню программа изначально под ручное (из)вращение карт делалась, автоматику я относительно недавно дописал.
Алгоритм:
- делается заливка от угла (половина "дельты" верхней левой карты, потому что края скана часто сильно отличаются по цвету), контрастность сравнения задаётся ползунком
- два варианта: заливать похожие цвета или не трогать определенный, если у всех карт одноцветная рамка.
- запоминаются области, не залитые в процессе
- анализируются только области, имеющие периметр больше 2/3 размера карты
- примерное расположение центров карт берется из настройки (размер и расположение на листе) и находится ближайший периметр (был вариант с анализом всех областей, но вылезало слишком много ошибок)
- вычисляется реальный центр, по минимальному и максимальному XY найденной области
- от центра влево или вверх считается под углом два вектора до пересечения с периметром
- по разности  их длины определяется угол наклона карты

Ужас как сложно:)

Правильный подход - радоновское преобразование. Экстремумы дадут углы прямоугольных объектов. Точность не хуже 0.05°
  •  

Dimon_II

CardArrange.zip
Новые фичи:
- Исправлено смещение при работе с большими градусами


Цитата: duckbill от 19 октября 2021, 11:06:28
Правильный подход - радоновское преобразование. Экстремумы дадут углы прямоугольных объектов. Точность не хуже 0.05°
Основная сложность - не угол угадать, а разбить скан на отдельные карты, с учетом того  что они не совсем прямоугольные и часть слабо контрастные.

  •  

duckbill

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

Dimon_II

Добавлена опция для исправления геометрии скана:
Если после вертикального выравнивания (по левой стороне) верх/низ карты не горизонтален, можно ввести поправку.
  •  

Dimon_II

На GIT выложена новая версия:
- Добавлена закладка About
- Исправлены мелкие ошибки
- Проект пересобран на Delphi 10.4
https://github.com/Dimon-II/CardArrange/releases
  •  
    Пользователи, которые поблагодарили этот пост: xonix