Масочная фильтрация

Масочная фильтрация является мощнейшим инструментом для обработки черно-белых растров. Масочные фильтры при правильном использовании могут решать огромный спектр задач, от подготовки горизонталей растра рельефа до выделения штрихов болот.

Масочная фильтрация как она есть…

Есть хорошая поговорка: «Хочешь получить дурацкий ответ — задай дурацкий вопрос». Пакет EasyTrace создан с одной целью — помочь вам ответить на вопрос «Что изображено на этом растре?». И если растр «дурацкий» — мало вам не покажется…

Прежде всего, следует твердо запомнить: обработка растров занимает максимум часы (а как правило — минуты), а векторизация длится часы, дни, а иногда и недели! Сэкономив полчаса на подготовке растра, можно обречь оператора на десятки лишних часов векторизации. А если учесть, что часто подготовкой растров и векторизацией занимаются разные люди, то проблема встает в полный рост.

Т. е. растры непременно надо предварительно подготавливать. И крайне желательно использовать не тупой метод обработки вроде фильтрации по смежности или иного способа удаления шумов, а применить индивидуальный подход к каждой локальной ситуации на растре. Звучит довольно фантастично. Однако ничего нереального в этом нет. Еще в те времена, «когда компьютеры были большими», группа ученых закодировала по одному лучшему ходу для нескольких тысяч малофигурных шахматных окончаний. Каково же было их удивление, когда машина поставила мат в позиции, принципиально считавшейся ничейной. И сделала это на 151-ом ходу…

Принцип масочной фильтрации тот же самый. Если программа находит участок растра, похожий на заданный образец, она изменяет его заданным образом. Например: если черная дырка в линии со всех сторон окружена светлыми пикселами, то следует команда «залить дырку». Если есть изолированный островок из 2-3 белых точек, то это мусор и его нужно удалить.

К сожалению, простота подхода уравновешивается тиранией количества. То, что просто на примере из 2-3 точек, перестает быть обозримым, если их становится два десятка. Вот здесь-то способность компьютера легко перемалывать миллионы вариантов приходится очень кстати! Вместо всех возможных описаний положения пикселов кодируются только те, которые являются «скелетом» или, как сейчас модно говорить, «паттерном» ситуации.

Инструмент разработки масочных фильтров

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

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

Именно сочетания положений белых и черных пикселов образуют тот самый «паттерн», который разыскивается на растре. Или «маска», в терминологии EasyTrace. Далее дело техники — если паттерн найден, то в заданных позициях маски добавляются или удаляются белые пикселы. Вот, собственно, и все.

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

Такое деление диктуется способом применения масок, заложенным в программу. Маски применяются к исходному растру последовательно. Т. е. за один прием растр обрабатывается только одной маской (во всех ее вариантах). Точнее, создается новый растр из неизменного исходного. Следующая маска в стратегии обрабатывает растр, созданный предыдущей маской. И так далее.

Группировка последовательностей масок в фильтры обусловлена схожестью выполняемых ими операций. Например, фильтры удаления мусора, улучшения формы линий, связывания разрывов, удаления «склеек» между линиями. Последовательность фильтров образует Стратегию: убрать посторонний мусор, удалить дефекты на линиях, связать разорванные линии, попытаться продолжить линии и еще раз связать их.

Поскольку растры могут иметь разное разрешение, толщина растровых линий на них тоже разная. И для их обработки нужны другие маски, собранные в свои фильтры и стратегии. Мы различаем три типа растров по толщине растровых линий: тонкие линии в 1-3 pix, средние — 3-5 pix и толстые линии — более 5 pix.

С другой стороны, некоторые маски и фильтры могут применяться независимо от толщины линий и характера растра. Это фильтры уборки мусора, устранения локальных дефектов на поверхности линий, заливки каверн в линиях и т. д. Т. е. многие маски могут быть использованы в нескольких фильтрах. Поэтому маски, фильтры и стратегии собраны в специальное хранилище — Репозитарий. Оттуда их можно легко извлекать, составляя свои специализированные фильтры и стратегии.

Для удобства отладки в инструмент разработки масочных фильтров заложен ряд простых механизмов:

  • Во-первых, есть возможность увидеть, ЧТО изменилось после фильтрации;
  • Во-вторых, стратегии и фильтры можно запускать по частям, вплоть до применения одной маски за один раз;
  • В-третьих, есть средство, дающее ответ на вопрос — «Какая маска изменила именно этот пиксел?»;
  • Еще один подход — это возможность взять с экрана образец растра как основу будущей маски.

Несмотря на кажущуюся сложность, простые фильтры для удаления специфического мусора и/или «лечения» дефектов на линиях строятся за несколько минут, а вот результат дают весьма внушительный. К сожалению, каждый следующий шаг, улучшающий фильтр «еще чуть-чуть» дается со все большим трудом. Но дело того стоит. Часы, проведенные за разработкой фильтров, экономят дни и недели оцифровки.

Текущая стратегия и список фильтров

  • Текущая стратегия — выпадающий список, который позволяет выбрать стратегию из Репозитария.
    После выбора стратегии возможно изменение состава и порядка исполнения фильтров и масок, составляющих стратегию. При этом следует помнить, что фильтры и маски, используемые в текущей стратегии, могут входить и в другие стратегии. Пиктограммы таких объектов изображаются красным цветом. Их изменение неизбежно отразится на всех стратегиях, в которые они входят. Это и хорошо и плохо. Хорошо для поверхностных фильтров, улучшающих форму линий независимо от их толщины. И плохо для фильтров, ориентированных на конкретную толщину растровых линий. Принимая решение об изменении красной маски или фильтра, можно запросить информацию об их принадлежности к стратегиям (фильтрам). Для этого, указав на имя объекта, и нажав правую клавишу, выберите из выпавшего меню команду Информация.
  • Новая стратегия — позволяет создать новую (пустую) стратегию. Фильтры и входящие в них маски могут быть созданы с нуля средствами инструмента разработки масочных фильтров, либо добавлены из Репозитария.
  • Удалить текущую стратегию — удаляет текущую стратегию. При этом все фильтры, составляющие стратегию, и входящие в них маски сохраняются в Репозитарии. При необходимости, они тоже могут быть удалены средствами Репозитария.
  • Открыть Репозитарий — открывает доступ к Репозитарию — хранилищу масок и фильтров для их выбора и включения в текущую стратегию.
  • Список фильтров, составляющих текущую стратегию — список определяет состав вошедших в стратегию масочных фильтров и порядок их выполнения. Фильтры могут быть в двух состояниях: включен — маски фильтра будут использоваться, и выключен — все маски, вошедшие в фильтр, игнорируются. Порядок следования фильтров в списке соответствует порядку их выполнения. Изменить порядок можно перетаскивая фильтры мышью. Кроме фильтров, список может содержать имена файлов, служащих для записи промежуточных результатов фильтрации. Управление добавлением, переименованием или удалением фильтров и файлов, составляющих стратегию, выполняется через контекстное меню. Доступ к меню обеспечивается по нажатию правой клавиши на именах объектов.

Управление масками текущего фильтра

Прежде всего следует напомнить, что имя маски, указанное в фильтре — это ссылка на единственный экземпляр «тела» маски, хранящееся в Репозитарии. Так что изменение структуры маски отражается на всех фильтрах (и, соответственно, стратегиях), где есть на нее ссылки. Аналогично списку фильтров стратегии, список масок, составляющих фильтр, определяет порядок их выполнения. Маски тоже могут быть «включены» и «выключены». И их тоже можно «перетаскивать», меняя порядок исполнения. В отличии от фильтров, каждая маска может несколько раз входить в один фильтр. Обычно так используются маски, заполняющие каверны в линиях, заливках или маски, истончающие растровые линии. Изменяя «красную» маску, следует поинтересоваться на каких фильтрах и стратегиях это может отразится. В случае сомнений, сделайте дубликат «тела» маски и дайте ему новое уникальное имя.

Процесс фильтрации, к сожалению, не так быстр, как хотелось бы. Да и понять, что именно нужно изменить в цепочке исполняющихся масок для достижения лучшего результата — задача нетривиальная. Поэтому здесь применяется принцип «разделяй и властвуй». Для целей «разделения» служат опции включение / выключение масок и фильтров. А запись промежуточных результатов фильтрации в файл позволяет не тратить время на исполнение операций, предшествовавших его появлению. Просто отключаете фильтры, стоявшие до записи файла, и используете его в качестве исходного. Вставить команды записи в файл можно как в списке фильтров, так и в списке масок. Сдавая стратегию в «эксплуатацию», команды записи в файл отключать не обязательно, поскольку при выполнении готовых стратегий командой Фильтрация растра промежуточные файлы игнорируются.

Создание и редактирование масок

  • Редактор маски
    Расположенное в правом верхнем углу панели инструмента «шахматное поле» — это редактор масок. Поле позволяет не только просматривать структуры имеющихся масок, но и изменять их или создавать новые. Максимальный размер маски в Easy Trace — 8 х 8 пикселов. Белые квадраты поля соответствуют пикселам линии, черные — пикселам фона. Только строгое совпадение позиций черных и белых пикселов маски с пикселами растра заставит ее сработать.
    Серые пикселы указывают, что отмеченные ими позиции игнорируются при проверке совпадения маски с участком растра. Это позволяет, задав «костяк» ситуации черными и белыми пикселами, охватить гораздо большее число растровых комбинаций. Маски могут быть только квадратными. Текущий размер маски отображается пунктирной линией. Чем меньше размерность маски, тем быстрее выполняется обработка растра с ее участием. Если правые столбцы и нижние строки маски заняты исключительно серыми пикселами — размер маски автоматически уменьшается.
    Чтобы изменить цвет пиксела маски, нужно последовательно щелкать по нему левой клавишей мыши. Цвет изменяется циклически в последовательности черный — белый — серый
    .Команды на изменение растра задаются в виде красных квадратов или крестов, лежащих поверх клеток символизирующих пикселы маски. Красный квадрат означает изменение цвета пиксела на белый (добавление пиксела), крест — на черный (удаление пиксела). Команды на изменение задаются правой клавишей мыши. Они циклически меняются в последовательности: удалить — добавить — не изменять.
  • Опция Поворот
    включение опции разрешает выполнить три ее поворота на 90 градусов для создания дополнительных вариантов маски. Опция может задаваться индивидуально для каждого из вызовов маски в фильтре.
  • Опция Отражение
    включение опции разрешает выполнить ее зеркальное отображение относительно вертикальной и горизонтальной осей. Опция может задаваться индивидуально для каждого из вызовов маски в фильтре.
  • Создать новую маску по образцу
    Нажав на кнопку и «натянув» рамку на участок растра на экране, можно создать новую маску. Вернее, создать «заготовку» для маски. На ней еще предстоит указать удаляемые или дополняемые пикселы и скрыть пикселы, не имеющие значения для поиска совпадений. Ну и, конечно, дать новой маске имя.
    Ссылка на новую маску будет вставлена НАД текущим выделенным именем маски. Само «тело» маски попадет в Репозитарий и может впоследствии использоваться в других фильтрах. Вернее, может попасть, если, выходя из инструмента, вы согласитесь на сохранение внесенных в стратегию изменений.

Средства контроля и отладки фильтров

Контрольные точки
Выпадающий список Контрольные точки хранит перечень координат точек растра, изменение состояния которых контролируется во время фильтрации.
При отладке фильтров, нередко возникают побочные эффекты, число которых должно быть сведено к минимуму. Это паразитные «склейки» соседних линий или разрушение связности линий. Выяснить «виновника» таких действий позволяет установка контрольной точки в позиции повреждаемого пиксела. При изменении состояния пиксела во время фильтрации процесс прерывается и сообщается имя маски-виновника повреждения.

Удалить текущую точку проверки
Если необходимость в контроле над некоторой точкой растра отпала, соответствующая ей контрольная точка может быть удалена. Для этого следует выбрать эту точку в списке Контрольные точки (т. е. сделать ее текущей) и нажать кнопку Удалить контрольную точку.

Добавить контрольную точку
Инструмент разработки масочных фильтров взаимодействует с изображением растра на экране только в двух случаях: когда надо взять образец растра для создания новой маски и когда отмечаются контрольные точки. По умолчанию, указание пиксела на экране левой клавишей мыши — это и есть установка контрольной точки. Во избежание случайной установки точек при указании их позиции запрашивается подтверждение на установку.

Опция Сворачивать панель
Так как панель параметров инструмента все время находится на экране, она может мешать просматривать результаты фильтрации. Что сделать — активировать эту опцию, автоматически сворачивающую панель до полоски заголовка, или вручную задвигать ее за край экрана, решать вам…

Опция Показывать разницу
Исключительно важная опция! Возможность воочию увидеть происшедшие с растром изменения немедленно после завершения фильтрации — основа отладки масок и фильтров. Включение опции позволяет сравнить растры до и после фильтрации. Измененные точки не только подсвечиваются (по умолчанию, добавленные — красным, удаленные — синим цветом), но и мерцают с заданной частотой, что делает их гораздо более заметными.
С другой стороны, при анализе растра на предмет «что бы еще такое сделать?», мигание измененных пикселов становится помехой и опцию лучше выключить. Выполнение команды UNDO, тоже прекращает мерцание (потому как отменяются внесенные изменения), а команда REDO, напротив, возвращает растр к исходному состоянию.
Команды UNDO и REDO упомянуты не случайно. Обычно разработка идет в циклическом режиме: доработка фильтра, запуск и оценка результатов, внесение изменений в фильтр, откат изменений в растре, новый запуск фильтра.
Обратите внимание, речь идет о запуске только одного фильтра (а в нем, в свою очередь, может быть включена только часть масок!). Оценка влияние конкретной маски, если их была запущена пара десятков — дело, мягко говоря, сомнительное.
Для экономии времени удобно ОДИН РАЗ выполнить отлаженную часть фильтра (стратегии) и далее использовать полученный промежуточный растр в качестве исходного. Ну а после запуска отлаживаемой части фильтра и анализа результатов выполнять откат к этому промежуточному растру. Последовательно перемещая эту «промежуточную точку» по мере отладки очередной серии масок, вы в итоге доберетесь до финиша за кратчайшее время.

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

Параметры инструмента
Позволяют управлять двумя функциями: параметрами отображения разницы в растрах при их сравнении и детальностью «отчета о проделанной работе». Выбор цвета и периода мигания измененных точек растра — процесс достаточно очевидный. Что касается отчета, то возможны три варианта:

  • без отчета;
  • только число хитов — имена масок и число их совпадений с участками растра;
  • число хитов и все варианты маски — иногда бывает трудно понять, почему маска делает нечто неожиданное. Анализ возможных вариантов масок позволяет понять причину и принять соответствующие меры.

Репозитарий

Как только становится понятным, что многие маски могут использоваться в более чем одном фильтре, возникает вопрос: где собственно они должны храниться и как их оттуда извлекать? Пока описание масок и фильтров хранилось в текстовом формате, проблема решалась операциями COPY и PASTE. Но когда число масок перевалило за сотню, разработка фильтров превратилась в кошмар …

Для выхода из этой ситуации было создано специальное хранилище — Репозитарий. Его появление наконец-то позволило навести порядок в «авгиевых конюшнях». Это позволяет надеяться на скорое появление новых, эффективных стратегий масочной растровой фильтрации.

Назначение Репозитария

В Репозитарии хранятся стратегии, фильтры и маски. Маска — это наименьший объект масочного фильтра. Из масок компонуются фильтры, а из фильтров, в свою очередь, стратегии. Маски собираются в фильтры по общности выполняемых ими операций — заполнение каверн, сглаживание линий, связывание разрывов и т. д. Стратегия — это уже законченный инструмент обработки растра определенного вида. Необходимость в разных стратегиях вызвана, прежде всего, различием структуры масок для растровых линий различной толщины.

Классификация масок, хранящихся в Репозитарии, проводится по двум признакам — типу выполняемой маской операции и толщине растровых линий, к которым данная маска применима.

Способы представления содержания

Основным элементом Репозитария является панель отображения его содержания. В зависимости от выбранных опций, оно может быть представлено различным образом, т. е. может группироваться следующими способами

  • По стратегиям и фильтрам.
  • В этом случае, стратегии, маски и фильтры представлены в их «естественном», хотя и свернутом виде. Стратегия может быть развернута до списка составляющих ее фильтров, а фильтры — до списка масок. И хотя маски хранятся в Репозитарии в единственном экземпляре, в фильтрах их имена (а точнее ссылки на объекты-маски) могут присутствовать в нескольких экземплярах. То есть ровно в том количестве и последовательности, как они и собирались в фильтре при его отладке.
  • По категориям.
  • Разработку новых фильтров можно сократить, выбирая из Репозитария ранее разработанные маски. Группировка масок по категориям собирает вместе маски ориентированные на выполнение одинаковых операций
  • По типу растра
  • Растровые линии различной ширины имеют различный растровый «рисунок». Естественно, что и маски для выявления ситуаций на таких растрах будут различаться. Готовя фильтр для растра с определенной шириной линий, следует использовать маски из одного диапазона толщин.

Управление содержанием Репозитария

Частично функции Репозитария и Инструмента разработки масочных фильтров перекрываются, но есть ряд операций, которые можно выполнить только в Репозитарии. Прежде всего, это возможность собрать в одно место стратегии, разработанные на разных компьютерах, т.е. операция импорта стратегий. С другой стороны, это операции классификации и категоризации масок и фильтров. Если сделать это сразу по завершению разработки новой стратегии, появится не плохой задел для создания новых инструментов фильтрации…

Непосредственное управление объектами выполняется с помощью операций «перетаскивания» или через дополнительное меню, вызываемое нажатием на правую клавишу мыши. Доступны следующие команды:

  • импорт как новых файлов StdMasks.msb, так и старых файлов текстового формата с раширением *.mst;
  • создать новую пустую стратегию;
  • создать новый пустой фильтр;
  • добавить в список категорий классификации масок новую категорию;
  • удалить текущий объект. При удалении стратегий и фильтров содержащиеся в них фильтры и маски переносятся в разделы Неиспользуемые;
  • переименовать текущий объект;
  • отобразить содержание по стратегиям / категориям / типам растров.

Перетаскивая объекты внутри Репозитария, можно решать две задачи: первая — классифицировать объекты по категориям и типам растров, и вторая — создавать новые или редактировать существующие стратегии и фильтры. Если с классификацией все однозначно — одна маска не может принадлежать двум категориям, то с созданием и редактированием дело обстоит несколько сложнее. Ссылки на маски и фильтры можно как перетащить, так и продублировать. Простое перетаскивание равнозначно выполнению операций CUT + PASTE. Дублирование эквивалентно операциям COPY + PASTE, и выполняется перетаскиванием при нажатой клавише CTRL.

Перетаскивание используется и для вставки масок и фильтров в окно Инструмента разработки масок. Т. е. берете маску (фильтр) в окне Репозитария и «перетаскиваете» ее в новый разрабатываемый фильтр. В этом случае, всегда создается ссылка на маску в новом фильтре. Там, откуда вы взяли маску или фильтр никаких изменения не произойдет.

  • Создать новую стратегию
    Команда создает новую пустую стратегию. Ее можно наполнить, перетаскивая в нее (при нажатом CTRL!!!) существующие фильтры.Эту операцию лучше выполнять в инструменте Разработка масочных фильтров.
  • Создать новый фильтр
    Команда создает новый пустой фильтр. Его можно наполнить, перетаскивая в него (при нажатом CTRL!!!) существующие маски.Эту операцию лучше выполнять в инструменте Разработка масочных фильтров.
  • Создать новую категорию
    Создает новую категорию для классификации масок и фильтров. Категория — это пользовательское название операции над растром, на которую ориентирована данная группа масок.
  • Импортировать
    Как всякая нематериальная ценность, фильтры могут быть легко скопированы и перенесены на другую машину. Для этого достаточно скопировать и передать файл Репозитария StdMasks.msb, лежащий в каталоге Filters пакета EasyTrace. Но как быть, если надо объединить результаты разработки фильтров, выполненные на разных машинах, да еще хранящиеся старом формате?

    Для этого в Репозитарий встроена возможность импорта, причем можно импортировать данные как из других Репозитариев, так и из устаревших файлов формата *.mst;

Каталогизация и комментирование объектов

  • Поле описания объектов Репозитария служит для описания назначения масок/фильтров/стратегий.
  • Поле отображения маски показывает структуру шаблона и заложенные в маску команды изменения пикселов обрабатываемого растра.
  • Поле типа растра служит для указания типа растра по толщине растровых линий, для которого применима текущая маска.
  • Поле категории объекта служит для назначения категории (типа выполняемой операции), к которой относится текущая маска.

Содержание

Прокрутить вверх