Автор Тема: CardArrange - программа обработки сканов карточных игр  (Прочитано 8704 раз)

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 или щелкая мышью по кнопкам. Шаг поворота задаётся ползунком.

Дмитрий Яценко
yatcenko@gmail.com

Post Merge: 16 Август 2019, 13:52:51
По просьбе общественности:

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

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


« Последнее редактирование: 20 Октябрь 2021, 11:14:02 »
     

    Оффлайн Dimon_II

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

    Post Merge: 30 Август 2019, 07:23:00
    Minor bugfix - форма с отображением процесса распознавания могла не полностью отображаться при другом DPI монитора (scaled установлено в FALSE).
    « Последнее редактирование: 30 Август 2019, 07:23:00 »
       
      Поблагодарившие: wait, pAnAp, ChupVulf, knart, cccp, angelochek836, SniperOFF

      Оффлайн Dimon_II

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

      Смущает, что эти части смещаются зеркально относительно рамки вокруг карты.
         
        Поблагодарившие: pAnAp, Ultramarine, ChupVulf, koros, angelochek836, SniperOFF

        Оффлайн 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

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

                Плюс никто не запрещает исправить ошибки вручную.
                « Последнее редактирование: 18 Октябрь 2021, 15:33:17 »
                   
                  Поблагодарившие: sokrat

                  Оффлайн Mamosik

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

                    Оффлайн duckbill

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

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

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

                      Оффлайн Dimon_II

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


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

                         

                        Оффлайн duckbill

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

                          Оффлайн Dimon_II

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

                            Оффлайн Dimon_II

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