1с обработка сопоставление объектов информационных баз. Сопоставление - объект. Порядок сопоставления объектов

To properly display this page you need a browser with JavaScript support.

Обработка "Сопоставление и исправление объектов"

Обработка "Сопоставление и исправление объектов" применяется, если для ранее сопоставленных объектов было изменено сопоставление в Управление дистрибуцией. Тогда в форме обработки для загрузки данных от дистрибьютора появится ссылка для исправления документов, содержащих измененные данные (Рис. 7.16 ) .

Обработка может быть запущена двумя способами:

    из подсистемы "Данные дистрибьюторов" для изменения сопоставления непосредственно через обработку;

Для отбора данных по дистрибьютору укажите наименование дистрибьютора в поле "Дистрибьютор" и нажмите кнопку "", чтобы отобразить данные, загруженные из УС дистрибьютора.

Рассмотрим сопоставление номенклатуры в качестве примера.

Рис. 7.13. Обработка "Сопоставление и исправление объектов"

В табличной части отображается элемент справочника в базе дистрибьютора и установленное ему соответствие в базе производителя.

Соответствие указывается из справочника "Номенклатура ". Это можно сделать вручную или при помощи кнопки "Найти похожие ". Поиск может быть осуществлен по артикулу (если включена настройка "Отображать артикул") или по наименованию. Если при поиске не найдено полное соответствие, то будет подставлена номенклатура с частичным соответствием артикула или наименования.

Измененное, но несохраненное сопоставление выделяется жирным шрифтом .

Флажок "Отображать артикул " регулирует отображение артикула товара дистрибьютора и сопоставляемого товара.

Режим просмотра списка элементов в табличной части настраивается в меню табличной части "Еще" (Рис. 7.14 ) . Если обработка запущена после внесения изменений через "Загрузку данных от дистрибьюторов " или справочник "Номенклатура дистрибьютора ", то список товаров будет отфильтрован установленным флажком "Только измененные ".

Для исправления документов нужно:

Сопоставление объектов в карбонатных коллекторах с объектами терригенного девона дает возможность сказать, что разработка первых ведется более высокими темпами. Темпы разработки по объектам карбонатного девона не отличаются от объектов карбонатных отложений среднекаменноугольной системы.
Сопоставление объектов экологической экспертизы на федеральном уровне и уровне субъекта Российской Федерации представлены в табл. 8.1. Анализ этой таблицы показывает, что объекты экологической экспертизы на федеральном уровне и уровне субъекта Российской Федерации в пределах своей компетенции похожи. Однако ряд объектов экологической экспертизы присутствует только на федеральном уровне.
Первая цель вызовет сопоставление объектов X в Y, и, если X и Y солоставямы, возможно, приведет к конкретизации каких-либо переменных в этих объектах.
Назовем среди изучаемых приемов и сопоставление объекта и фона по тональному контрасту: контраст тонов помогает выявлению главного объекта изображения. Фото 5 показывает нам, как отчетливо рисуется освещенный, переданный светлыми тонами объект на темном, неосвещенном фоне.
Эта формула может быть рекомендована при сопоставлении объекта изобретения с имеющимися аналогами.
Принятый в большинстве стран метод квалификации нарушений основывается на сопоставлении объекта с патентной формулой изобретения, толкуемой с учетом оценки значимости указанных в ней признаков, а также охвата ею эквивалентов.
В последнем случае может понадобиться нормировка переменных, так чтобы сопоставление объектов включало псевдооднородный набор данных и было до некоторой степени облегчено. Для реализации этого возможны различные преобразования.
Кроме того, такой выбор L оказывается за рамками геометрического подобия сред для сопоставления объектов.
Часто процессы селекции и симплификации осуществляются параллельно. Им предшествуют классификация, ранжирование объектов и специальный анализ перспективности и сопоставления объектов с будущими потребностями.
Процессы селекции и симплификации осуществляются параллельно. Им предшествуют классификация и ранжирование объектов и специальный анализ перспективности и сопоставления объектов с будущими потребностями. Так, при разработке первого ГОСТа на алюминиевую штампованную посуду были классифицированы по вместимости выпускаемые в тот период кастрюли. Анализ показал, что номенклатуру можно сократить до 22 типоразмеров, исключив дублирующие емкости.
Автомат Мили с асинхронными выходами. Оба вида содержат в своем теле набор последовательных операторов, которые задают совокупность действий, исполняемых после вызова этой подпрограммы. Процедура возвращает результаты либо путем непосредственного преобразования объектов, определенных в вызывающей программе (глобальных сигналов или переменных), либо за счет сопоставления объектов через список соответствий. Функция же определяет единственное значение, используемое в выражениях, в которые включен вызов этой функции.
Коэффициенты регрессии (см. главу 5), выражающие степень влияния отдельных геолого-промысловых факторов на нефтеотдачу, могут быть использованы для сравнительной оценки эффективности процесса вытеснения нефти на исследованных объектах и сходных с ними по геологическому строению. При этом все факторы, действующие на нефтеотдачу, следует разделить на две группы: природные, отражающие объективные возможности залежи, и технологические, отражающие особенности систем и методов регулирования разработки. Из-за преобладающего влияния природных факторов на нефтеотдачу оценить влияние технологических факторов на нее затруднительно. В связи с этим можно предположить, что методические трудности, возникающие при изучении влияния технологических факторов на эффективность разработки, были бы значительно уменьшены, если бы при сопоставлении объектов разработки удалось каким-либо образом исключить суммарное влияние природных факторов.
Кривые ответов испытуемого в исследовании влияния контекста. По горизонтали. А - соответствующий контекст. N - нет контекста. Is - несоответствующий контекст, сходный объект. и 1Ь - несоответствующий контекст, непохожий объект. Адаптировано из. Ru-melhart 1977 по данным Palmer (1975bj.
В нашем случае с распознаванием паттернов человеком эталон - это некоторая внутренняя структура, которая при ее сопоставлении с сенсорными стимулами позволяет опознать объект. Согласно такому представлению о распознавании, в процессе приобретения жизненного опыта у нас образуется огромное количество эталонов, каждый из которых связан с некоторым значением. Так, зрительное опознание формы, например, геометрической фигуры, происходит следующим образом: световая энергия, исходящая от этой фигуры, воздействует на сетчатку глаза и преобразуется в нервную энергию, которая передается в мозг. Осуществляется поиск среди имеющихся эталонов. Если находится эталон, который соответствует нервному паттерну, человек опознает этот паттерн. После сопоставления объекта с его эталоном может происходить дальнейшая обработка информации и интерпретация объекта.
Сами алгоритмы удаления невидимых линий и поверхностей до сих пор не оптимальны, в каждом из них имеются недостатки, неэффективно реализованные элементы и ошибки. Однако основные качества этих алгоритмов могут быть со временем обобщены единым пониманием сущности процесса удаления невидимых поверхностей. В обоих алгоритмах исследуются области экрана, выбираются объекты, размещенные в этих областях; затем для определения видимых объектов все объекты внутри каждой области сортируются по глубине. Используются различные методы сортировки: в алгоритме Уоткинса объекты сортируются по координате Y на 1024 группы, затем производится сортировка (методом пузырька) отрезков по координате X и, наконец, поэлементное сравнение глубины объектов внутри интервала для установления видимости. В алгоритме Варнока сортировка объектов по значениям координат X и Y выполняется с помощью блока просмотра с очень сложной процедурой сопоставления объектов и областей экрана; объекты внутри области сортируются по глубине поэлементным сравнением. В алгоритме используется сортировка по составному признаку с основанием 41) по координатам X и - У; при разделении области все объекты, имеющие пересечение с этой областью, сортируются в одной или нескольких из четырех меньших областей. X и Y, сортировка по составному признаку на 1024 группы и сортировка отрезков методом пузырька на сканирующей линии) выполняется быстрее. Из этих замечаний следует, что неотъемлемой частью удаления невидимых линий является сортировка объектов по координатам X, Y и Z, поэтому для разработки эффективных алгоритмов необходимо исследование различных приемов и методов сортировки.
Но и этот единичный пример демонстрирует нам несколько приемов, с помощью которых фотограф получает в кадре желаемый акцент. Подведем итог, перечислив эти приемы. Отдадим должное также правильному выбору крупности плана, масштаба изображения фигур и предметов, образующих смысловой центр картины. Назовем еще правильное сопоставление объекта и фона по степени резкости и, наконец, важнейшее акцентирующее средство - свет, световой рисунок кадра.
Аналог в случае выполнения процедуры определения потребности проектирования к моменту составления технического задания уже определен. Если же эта процедура не выполнилась, то следует обратиться к базе данных по существующим образцам в соответствующей области техники. Основой для выбора аналога помимо функционального назначения служит главный параметр. Под ним понимается показатель от величины которого зависит наибольшее число других основных параметров. Так, для одноковшового экскаватора главным параметром считается вместимость ковша. При наличии нескольких аналогов для сравнения выбирается лучший из них по комплексному обобщенному показателю. Если же аналога нет, то сопоставление объекта проектирования ведется по показателям качества перспективного образца. Под перспективным образцом понимается параметрическое и структурное описание наиболее вероятного варианта машины, составленное на основе сценария развития объектов в данной области техники.

Принципы сопоставления объектов при обмене данными 1С

При переносе данных в непустую базу как правило возникает проблема синхронизации идентичной, прежде всего справочной, информации. В базе, откуда осуществляется перенос (в источнике), и в базе, в которую загружаются данные (в приемнике), существуют объекты, отражающие одни и те же сущности. Самый наглядный пример - это, пожалуй, справочник Номенклатура , который есть во всех конфигурациях, содержит сведения о товарах, продукции и услугах и чаще всего так и называется. При загрузке информации в приемник возникает необходимость найти возможно существующий уже в приемнике элемент справочника, чтобы не создавать нового и таким образом избежать дублирования. Найти существующий элемент автоматически не всегда бывает возможно, поскольку не совпадает ни один реквизит: ни код, ни наименование, ни артикул, ничего. В этом случае при синхронизации не обойтись без сопоставления объектов вручную. Об этом и пойдет речь далее.

Рассматривать решение поставленной задачи для наглядности будем на примере переноса данных из программы 1С Комплексная автоматизация в 1С Бухгалтерия 8 (КА 1.1 => БП 3.0 ) с использованием правил переноса, созданных по технологии Конвертации данных 2.0 . Все сказанное относится к любым правилам переноса, написанным по указанной технологии.

Начну с пояснения того, можно ли решить рассматриваемую проблему в рамках типовых конфигураций с использованием обработки УниверсальныйОбменДаннымиXML . Нет, нельзя. Эта обработка не обладает функциональными возможностями сопоставления объектов различных информационных баз.

Поэтому мы будем рассматривать обработку максимально похожую по функционалу, позволяющую загрузить данные из файла, сформированного предварительно в базе-источнике с помощью все той же обработки УниверсальныйОбменДаннымиXML , но позволяющую перед загрузкой просмотреть и при необходимости отредактировать соответствия объектов двух баз.

Сразу об ограничениях. Соответствие объектов - это пара уникальных идентификаторов (УИД) объекта источника и объекта приемника (если таковой имеется). Поэтому задать соответствие можно только для тех объектов, у которых в файле загрузки есть уникальные идентификаторы, т.е. для тех объектов, для которых правилами синхронизации задан поиск с использованием УИД. Это не значит, что при этом невозможен поиск по реквизитам. Это значит, что заданный правилом обмена поиск объекта осуществляется либо только по УИД, либо сначала по УИД, а затем по реквизитам. Если поиск осуществляется только по реквизитам, то в файле загрузки УИД отсутствует. Для таких объектов сопоставление невозможно.

Итак, начнем знакомство с новыми функциональными возможностями. Для примера будем переносить один документ Поступление товаров и услуг (см. рис.1), который содержит табличную часть из двух строк, отражает поступление товаров двух видов. Для демонстрации создадим в приемнике, в базе БП 3.0 номенклатуру с наименованием Телевизор "JVC" . Конкретно в данных правилах конвертации есть возможность с помощью параметра Продолжить поиск по реквизитам если по идентификатору не нашли задать вариант поиска объекта в приемнике. Если значение параметра - Нет , поиск производится только по УИД, в приемнике ничего не будет найдено, установим значение параметра - Да , т.е. будет производиться поиск по наименованию.

Рис.1 Документ выгружаемый из источника

Обработка для загрузки Перенос_данных_с_сопоставлением_УФ_v1_1.epf имеет по сравнению с типовой обработкой две дополнительные закладки: Типы данных сопоставления и Сопоставление данных . На первой из них необходимо отметить те типы данных, которые будут участвовать в сопоставлении объектов. Это вспомогательный сервис, повышающий удобство пользования, чтобы не интересующие нас данные не отражались в окне соответствий. В нашем случае мы будем работать пока только с номенклатурой, поэтому отметим только этот тип метаданных (см. рис.2).

Важно: если какие-то метаданные не отмечены, это не означает, что объекты данного типа не будут участвовать в переносе. Это означает, что соответствия для них не указываются, объекты загружаются по правилам конвертации без подмены ссылками на существующие в базе объекты, т.е. загрузка производится как в типовой обработке. Но помните, что соответствия для каких-то объектов могли быть выставлены ранее и сохранены (об этом ниже).

Рис.2 Отметка типов метаданных для сопоставления

Переходим на закладку Сопоставление данных , вся основная работа производится здесь (предварительно, как обычно, на странице выбираем файл для загрузки). Нажимаем Заполнить соответствия . Происходит чтение файла загрузки. Процедура при этом точно такая же как по команде Загрузить данные , но никакие данные в приемник не записываются. Происходит чтение данных из файла, поиск данных по правилам конвертации и заполнение таблицы соответствий объектов источника (загружаемого объекта) и приемника (найденного объекта). В нашем примере это выглядит как на рис.3.

Рис.3 Пример таблицы соответствий объектов

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

Если мы сейчас выберем команду Загрузить данные , то произойдет заполнение базы приемника. Но результат ничем (почти ничем, об этом "почти" расскажу ниже) не будет отличаться от типовой загрузки, поскольку соответствия установлены автоматически и не изменены.

Теперь создадим в приемнике еще один элемент справочника Номенклатура с наименованием Телевизор JVC (без кавычек) и отредактируем таблицу соответствий: установим загружаемому объекту Наименование=Телевизор "JVC"... в соответствие этот новый элемент. Т.е. мы осуществили подмену объекта приемника, найденного правилами конвертации, другим объектом. То же самое можно было сделать например для элемента Телевизор "SHARP" : выбрать существующий элемент и поставить его в соответствие загружаемому объекту. Теперь загрузим данные и посмотрим на результат (см. рис.4).

Рис.4. Результат загрузки данных с ручным сопоставлением объектов

Как видим, в документе присутствует элемент справочника, который мы поставили в соответствие вручную. Напоминаю, я изменил соответствие перед загрузкой. Для наглядности на рис. 4 показано, что в справочнике есть два похожих по наименованию элемента, оба были созданы в приемнике вручную. Элемент Телевизор "SHARP" появился в результате переноса. Причем, этот новый элемент находится в папке Бытовая техника , точно как в источнике и точно по правилам синхронизации.

А вот теперь обещанное выше пояснение "почти". Обратите внимание на колонку Зам (Замещать свойства объекта, существующего в базе, свойствами загружаемого объекта). Галочки в ней нет, значит свойства объекта приемника не будут перезаписаны, что и произошло. Если галочку установить и вновь загрузить данные, Телевизор JVC переместится в папку Бытовая техника , но и наименование у него поменяется на Телевизор "JVC" (наименование это ведь тоже свойство). Надеюсь этого достаточно для пояснения назначения флага Зам : если нужно подменить загружаемый объект на существующий и не изменять существующий объект, флаг не устанавливаем. Если нужно заполнить свойства существующего объекта значениями загружаемого (наименование, код, ставка НДС и т.п.), флаг устанавливаем.

Я рекомендую флаг устанавливать. И вот почему. Как уже было сказано, при загрузке данных в непустую базу существует проблема: объекты разных баз, отражающие одни и те же сущности, имеют разные уникальные идентификаторы и не совпадающие значения реквизитов. Выставив соответствия вручную, мы можем избежать дублирования. Но что если при следующем сеансе обмена мы забудем это сделать. Тогда база будет испорчена. Если же перезаписать ключевые реквизиты объекта приемника, реквизиты поиска, то при следующих загрузках соответствие загружаемому объекту будет выставлено автоматически по реквизитам. Разумеется при условии, что в правилах конвертации задан поиск по реквизитам.

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

Как сохранить составленные соответствия для будущих обменов. Нужно создать План обмена Полный и использовать его в качестве идентификатора настройки соответствий. Выбирайте его в поле ввода и нажимайте Записать соответствия . План обмена полный создается в разделе Администрирование - Настройки синхронизации данных . Нужно установить флаг синхронизации данных с другими программами, а затем создать собственно настройку синхронизации, указав префикс и наименование. Создавать начальный образ подчиненного узла РИБ не нужно. Нам нужен только узел обмена для выбора варианта соответствий (см. рис.5), никакие возможности подсистемы распределенных информационных баз не используются.

Рис.5 Выбор узла обмена, для которого созданы соответствия

Таблица соответствий сохраняется в регистре сведений Соответствия объектов информационных баз , который есть во всех типовых конфигурациях. Если выбрать узел обмена перед загрузкой данных, то сохраненные для данного узла соответствия будут использованы в процессе загрузки. Можно предварительно прочитать соответствия из регистра в таблицу соответствий для просмотра, можно этого не делать. В любом случае, если узел обмена выбран, соответствия будут использованы. Можно прочитать соответствия из регистра, а затем изменить какие-то из них. Приоритет при загрузке данных следующий: сначала соответствие ищется в таблице соответствий обработки, затем, если не найдено, в регистре сведений.

Теперь рассмотрим особенности переноса с сопоставлением для связанных данных на примере контрагента и его договора. Создадим в приемнике вручную контрагента и договор и назовем их для наглядности Существующий контрагент и Существующий договор . Выгрузим в файл все тот же документ, показанный на рис.1. При заполнении соответствий из файла загрузки (команда Заполнить соответствия ) по понятным причинам соответствия найдены не будут. Укажем их вручную как на рис.6.

Рис.6 Соответствие указано вручную

Отмечу, что флаг замещения реквизитов существующих объектов снят. После нажатия Загрузить данные в приемнике появится новый документ, но контрагент и договор в нем будут заменены на существующие (см. рис.7), новых контрагента и договора из документа создано не будет. Поясню, на рис. 6 виден еще один договор (с кодом 00078). Он никакого отношения к документу не имеет, переносится потому, что указан как основной договор у контрагента. Поскольку мы для него соответствия не указали, он запишется в базу-приемник без изменений, причем помеченным как основной договор. У Существующего контрагента таким образом будет два договора: Существующий договор и новый. Новый договор принадлежит именно Существующему контрагенту , так как контрагент Фирма "LIGHT " в процессе загрузки подменен, в том числе и там, где он является владельцем.

Рис.7 Результат переноса документа

Если установить флаг замещения реквизитов существующих объектов, то реквизиты Существующего контрагента и Существующего договора будут изменены (включая наименование). Таким образом Существующий контрагент "превратится" в Фирму "LIGHT " . Важно понимать, что это ни в коем случае не новый контрагент, а уже существующий, но с перезаписанными (если конечно это позволяют правила переноса) реквизитами.

Оба варианта являются примерами правильной конвертации. Придраться тут не к чему. А теперь о "неправильностях". Предположим, что выставлено соответствие только для договора, т.е. все так же как на рис. 6, но нет соответствия Существующий контрагент . При этом замена реквизитов у договора Существующий договор также не производится. После загрузки в документе будет указан контрагент Фирма "LIGHT " и договор Существующий договор , который принадлежит другому контрагенту.

Это может быть расценено как ошибка переноса, хотя никакой ошибки конечно нет, все сделано в точном соответствии с настройками: контрагент оригинального документа сохранен, договор подменен, реквизиты существующего договора не изменены, а значит не изменен и владелец существующего договора. Если установить флаг замены реквизитов для Существующего договора , то документ будет более корректным. При записи Существующего договора изменится его владелец, он будет принадлежать отныне контрагенту Фирма "LIGHT " , а также его наименование, т.е. его будет "трудно узнать". Это все тот же существующий договор, но изменивший абсолютно все реквизиты, включая наименование и своего владельца - контрагента.

С учетом сказанного можно рекомендовать связанные объекты сопоставлять существующим объектам также в связке, а если уж указывать соответствие без соответствия для владельцев, родителей (групп), то устанавливать флаг замены реквизитов. Но в последнем случае нужно помнить, что существующий объект может оказаться где угодно: "переехать" в другую группу справочника, принадлежать другому объекту-владельцу.

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

В версии 2.1 появилась возможность сопоставления планов счетов. Рассмотрим на примере как и в каких случаях это можно использовать. На рис.8 показан документ, в котором используется добавленный в режиме ведения учета субсчет к счету 68. Т.е. это нетиповой, отсутствующий в типовой конфигурации счет. При переносе данных в другую информационную базу его можно также добавить к типовому плану счетов, но это не всегда правильно. Очень часто бухгалтеры злоупотребляют созданием всевозможных субсчетов, а когда понимают к каким последствиям это приводит, бывает уже поздно что-то менять.

Рис.8 Пример использования добавленного счета плана счетов в источнике

Предположим, при обмене мы захотели исправить эту ситуацию и заменить добавленный в источнике счет 68.16 на типовой счет 68.10 , уже имеющийся в приемнике. Для этого при загрузке в приемник нужно установить соответствие счета 68.16 счету 68.10 как показано на рис.9. Заодно еще раз показано, как можно заменить значение справочника, в данном случае справочника Организации . Такая же необходимость может возникнуть при объединении данных из нескольких информационных баз в одну, когда возникает задача синхронизации планов счетов в источниках, которые не совпадают.

Рис.9 Установлено соответствие счетов

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

Рис. 10 Результат переноса документа

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

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

Рис.11 Конвертация документов Поступление товаров и услуг

В список полей поиска включим реквизит СуммаДокумента для того, чтобы иметь возможность не просто искать в базе приемника документ нужной даты и с нужным номером но и проверить совпадение суммы документа с документом источника. Для удобства введем параметр Поиск по сумме и реализуем алгоритм поиска вот так:
Если Параметры.ПоискПоСумме Тогда
СтрокаИменСвойствПоиска = "Дата, Номер, СуммаДокумента";
Иначе
СтрокаИменСвойствПоиска = "Дата, Номер";
КонецЕсли;
Т.е. при установке параметра в значение Истина ("Да") поиск будет осуществляться по дате, номеру и сумме, иначе только по дате и номеру.

Теперь при заполнении соответствий, если синхронизация по сумме и суммы документов в источнике и приемнике совпадают, документ в приемнике будет найден и соответствие установлено (см. рис.12)

Рис.12 Результат поиска (сопоставления) по реквизитам при совпадении суммы

Если же суммы не совпадают, документ в приемнике найден не будет. Замечу, что реквизит СуммаДокумента есть не во всех но во многих документах типовых конфигураций.

Важно . Обратите внимание на параметр Отключить поиск документов по УИД . Он появился в версии 3.1 и служит как раз для сверки документов. Если синхронизация документов осуществляется по УИД, то в том случае, если документ найден по УИД, поиск по реквизитам производиться не будет. Таково типовое поведение обработки при загрузке. Нам же нужно не просто убедиться в наличии в приемнике документа, но и проверить на совпадение с источником его реквизитов (в нашем примере суммы документа). Для этого мы отключаем поиск по уникальному идентификатору, поиск таким образом всегда будет продолжаться (осуществляться) по заданным реквизитам.

Вы можете приобрести описанную выше обработку, которая применима в конфигурациях, имеющих в своем составе обработку Универсальный обмен данными в формате XML редакции 2.1.8, т.е. работающих в режиме управляемого приложения, таких как Бухгалтерия предприятия ред.3.0, Комплексная автоматизация ред.2.0, Управление торговлей ред.11 и т.п. Вы можете также приобрести эту обработку в различных комплектах, в составе пакетов из обработок и правил обмена на нашем сайте . В составе комплектов это будет существенно дешевле.

Сравнение версий :

    10.03.2018 - версия 3.1. Добавлена возможность отключения поиска документов по УИД для сопоставления документов по реквизитам

    06.02.2018 - версия 2.1. Добавлена возможность сопоставления планов счетов

    05.02.2018 - версия 1.2. Исправлена ошибка в режиме работы на клиенте

    01.03.2017 - версия 1.1. Возможно сопоставление документов и справочников

© Борис Балясников, март 2017г., последние изменения март 2018г.

Материал из Техническое зрение

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

Сопоставление на основе точечных особенностей.

Основными достоинствами использования характерных точек для задач обнаружения являются простота и скорость выделения (по сравнению с другими используемыми характерными признаками). Кроме того, на изображениях не всегда удается выделить другие характерные черты (хорошие и четкие контуры или области), в то время как локальные особенности в подавляющем большинстве случаев выделить можно.

Задача обнаружения объекта на изображении сводится к поиску характерных точек и фиксации их взаимного расположения. Эти процедуры выполняются сначала на эталонном изображении, затем на исследуемом, часто в определенной ограниченной области поиска. Общая схема алгоритма поиска соответствующих точек состоит из несколько этапов:

Выделение точечных особенностей на изображениях;

Формирование векторов признаков точек;

Сопоставление точек в пространстве признаков;

Выделение и описание характерных точек на изображении является начальным и ключевым этапом в алгоритме отождествления, от которого зависит результат работы всего алгоритма. Этот этап был рассмотрен ранее в разделе 4.1.

Однако какую бы сложную форму ни имели инварианты, они все равно не в состоянии в $100${\%} случаев уникально охарактеризовать объект. Неоднозначности, то есть случаи, когда разные объекты (точки, области) на изображении характеризуются очень похожими параметрами, могут быть связаны с несовершенством выбранных инвариантов, с низким разрешением или шумом на изображении. Неоднозначности также возникают при наличии на изображении повторяющихся объектов. Один из способов разрешения неоднозначных ситуаций связан с разработкой более качественных инвариантов или иных дескрипторов; это направление очень актуально среди исследователей, занимающихся машинным зрением. Параллельный подход состоит в использовании пространственных соотношений между объектами.

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

Распределение особых точек

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

Метрическое сопоставление.

Для того чтобы проверить правильность составления пар кандидатов, привлекается дополнительная информация о взаимном пространственном расположении точек на плоскости изображения. Другими словами, пространственное расположение точек на правом и левом изображении должно быть в определенном смысле схожим. Пространственное расположение может быть описано как матрица расстояний. Рассмотрим набор точек $A_{1}, A_{2}, \ldots, A_{i}, \ldots, A_{N}$ в плоскости изображения (рис. 8).

Расстояния между точками могут быть записаны в виде матрицы расстояний $\vert \vert r_{ij}\vert \vert $ следующим образом:

\[ {\begin{array}% & {A_1 } & {A_2 } & {...} & {A_i } & {...} & {A_N } \\ \hline {A_1 } & 0 & {r_{12} } & {...} & {r_{1i} } & {...} & {r_{1N} } \\ {A_2 } & & 0 & {...} & {r_{2i} } & {...} & {r_{2N} } \\ {...} & & & {...} & {...} & {...} & {...} \\ {A_i } & & & & 0 & {...} & {r_{iN} } \\ {...} & & & & & {...} & {...} \\ {A_N } & & & & & & 0 \\ \end{array} } \]

где $r_{ik} =\sqrt {(x_i -x_k)^2-(y_i -y_k)^2} $ - евклидово расстояние между $A_{i}$ и $A_{k}$, $x_{i}$, $y_{i}$ - координаты точки $A_{i}$ на изображении, $x_{k}$, $y_{k}$ - координаты точки $A_{k}$ на изображении.

Для проверки правильности формирования сопряженных пар точек сравниваются матрицы расстояний левого $\vert \vert r_{ij}^{L}\vert \vert $ и правого $\vert \vert r_{ij}^{R}\vert \vert $ изображений. Для количественной оценки ошибочного связывания вводится переменная $\delta _{ij}$,

$$ \delta _{ij} = r_{ij}^{R} - r_{ ij}^{L}. $$

Анализ гистограммы распределения $\delta _{ij}$ позволяет оценить величину порога отбраковки ошибочных пар $\Delta $ согласно критерию, описанному ниже. Заметим, что точка с номером $i$ имеет $N-1$ связей, причем соответствующие расстояния в матрице $\vert \vert r_{ij}\vert \vert $ суть: $r_{1i}$, $r_{2i},{\ldots}, r_{ii}$, $r_{i,i+1},{\ldots},r_{i,N}$. Соответственно, вектор расстояний, ассоциированный с парой номер $i$ есть $$ \delta_{i}=\{\delta _{1i}, \delta _{2i},{\ldots}, \delta _{ii}, \delta _{i,i+1},{\ldots}, \delta _{i,N}\} $$ где $$ \vert \vert \delta _{i}\vert \vert = \min\{\delta _{1i}, \delta _{2i},{\ldots}, \delta _{ii}, \delta _{i,i+1},{\ldots}, \delta _{i,N}\}$$ - норма вектора $\delta_{i}$.


Отфильтрованные пары точек

Пара сопряженных точек принимается, если $\vert \vert \delta _{i}\vert \vert < \Delta $ и отклоняется в противоположном случае. Процедура проверки выполняется для каждого $i$ от $1$ до $N$. Существенно, что предложенный критерий отбора на основе анализа матрицы (5) инвариантен к вращению изображений.

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

Топологическое сопоставление.

Рассмотрим тройку объектов $\langle R_1^1 ,R_1^2 ,R_1^3 \rangle$ на изображении $V_1 $ и соответствующую ей тройку объектов $\langle R_2^1 ,R_2^2 ,R_2^3 \rangle$ на изображении $V_2 $. Под объектом понимается область изображения, например "интересная точка" (скажем, угол либо локальный экстремум яркости) и ее окрестность, либо область более сложной формы.

Пусть $c_v^i =\langle x_v^i ,y_v^i \rangle$ - центр объекта (области) $R_v^i $. Функция

$$ \begin{gather}\tag{1} \textrm{side} (R_v^1 ,R_v^2 ,R_v^3)= \textrm{sign} \left(\det \left[ {{\begin{array}{*{20}c} {x_v^3 -x_v^2 } & {x_v^1 -x_v^2 } \\ {y_v^3 -y_v^2 } & {y_v^3 -y_v^2 } \\ \end{array} }} \right] \right) \end{gather} $$

принимает значение $-\mbox{}1$, если $c_v^1 $ лежит по правую сторону от вектора, направленного из $c_v^2 $ в $c_v^2 $, или значение 1, если эта точка лежит по левую сторону от него. Таким образом, уравнение

$$ \begin{gather}\tag{2} \textrm{side}(R_1^1 ,R_1^2 ,R_1^3)=\textrm{side}(R_2^1 ,R_2^2 ,R_2^3) \end{gather} $$ означает, что точка $c^1$ лежит по ту же сторону от вектора на обоих изображениях. Если для некоторой точки равенство (9) не выполняется, будем говорить, что точка нарушает отношение сторонности. Такое происходит в случае, когда по крайней

Отношение сторонности - - точка $c^1$ должна лежать по одну и ту же сторону (здесь - по левую) от направленного отрезка из $c^2$ в $c^3$ в обоих изображениях

мере один из трех объектов неверно привязан к своему аналогу в другом изображении или же если объекты не компланарны и имеется сдвиг камеры в направлении, перпендикулярном трехмерной плоскости, содержащей их центры. В последнем случае точка может передвинуться на другую сторону от вектора (то есть изменится ее параллакс), однако такое случается лишь с небольшим числом троек. Точки $R_v^1 $, $R_v^2 $ и $R_v^3 $ удовлетворяют равенству (9) или нарушают его вне зависимости от порядка, в котором они появляются в тройке; необходимо лишь, чтобы в обоих изображениях они были пронумерованы в одинаковом циклическом порядке (по часовой стрелке или против часовой стрелки). На рис. 10 изображены тройки соответствующих точек, удовлетворяющих соотношению (9).

Когда равенство (9) нарушается, можно сделать вывод о неверной привязке одного из объектов тройки, но на данном этапе неясно, какого именно. Одной тройки для такого вывода недостаточно, однако, рассмотрев все возможные тройки, можно найти объекты, которые с большей вероятностью, чем остальные, привязаны неверно. Основная идея метода, предложенного в заключается в том, что неверно сопоставленные объекты чаще нарушают отношение сторонности.

Равенство (9) проверяется для всех троек областей $\langle R^i,R^j,R^k\rangle,R^i,R^j,R^k\in \Phi _{12}$, где $\Phi _{12} $ - множество областей, присутствующих как на изображении $V_1 $, так и на изображении $V_2 $. Пусть $\Phi =\left\{ {i\vert R^i\in \Phi _{12} } \right\}$. В начале алгоритма подсчитывается штраф $$ \begin{gather}\tag{3} h(i)=\sum\limits_{j,k\in \Phi \backslash i,j>k} {\left| {\textrm{side}(R_1^i ,R_1^j ,R_1^k)-\textrm{side}(R_2^i ,R_2^j ,R_2^k)} \right|} , \end{gather} $$ то есть количество раз, когда объект $R^i$ нарушает отношение сторонности (9), для всех $i\in \Phi $. Затем штраф нормируется на максимальное количество всех возможных нарушений:

$$ \begin{gather}\tag{4} h_N (i)=\frac{h(i)}{(n-1)(n-2)}, \quad n=\left| \Phi \right|. \end{gather} $$

Исходя из (11), получаем, что $h_N (i)\in $. Пользователем выбирается порог $t_{\textrm{topo}} \in $. Проанализировав штраф для всех объектов, определяется объект $R^w$, где $w=\arg \max _i h_N (i)$, нарушивший отношение (9) чаще других. Если $h_N (w)>t_{\textrm{topo}} $, то объект $R^w$ (то есть пара объектов $R_1^w ,R_2^w)$ считается неверно привязанным и удаляется из множества $\Phi .$ На каждой итерации штраф $h_N (i)$ пересчитывается на основе оставшихся в $\Phi $ объектов и наиболее часто нарушающие отношение (9) пары удаляются. Процесс продолжается до тех пор, пока есть объекты для удаления, то есть пока максимальное значение штрафа на оставшихся объектах не станет меньше порога $t_{\textrm{topo}}$.

Во время первых итераций, пока в множестве $\Phi $ имеется достаточно много кандидатов на удаление, даже верно привязанные объекты могут иметь высокое значение штрафа. Однако у неверно привязанных объектов штраф будет еще выше. После удаления наихудшей пары объектов, $h_N (i)$ для оставшихся объектов уменьшится. Когда останутся только правильно привязанные пары объектов, небольшие изменения параллакса по-прежнему будут давать ненулевые значения штрафа.

Величина порога $t_{\textrm{topo}}$ влияет на количество оставшихся после топологической фильтрации объектов. Нулевое значение порога приводит к тому, что остается небольшое число объектов, но все они полностью удовлетворяют топологическому отношению сторонности. Такой выбор порога разумен на относительно плоских изображениях с малой глубиной. В большинстве случаев следует иметь в виду, что малое значение порога приводит к нежелательному эффекту ошибочного удаления ряда точек/областей как неверно привязанных. Исходя из многочисленных экспериментов с наземными и аэрофотоснимками, наиболее желательно выбирать порог $t_{\textrm{topo}}$ из диапазона [$0{,}03$, $0{,}15$].

Проиллюстрируем работу алгоритма на примере. Пусть некоторым алгоритмом найдено и привязано друг к другу $50$ пар точек (рис. 11). На глаз можно определить, что ряд точек привязан друг к другу неправильно, то есть точки, помеченные одним номером, находятся в разных местах левого и правого изображений.

Теперь пропустим координаты пар точек через топологический фильтр с $t_{\textrm{topo}} =0{,}15$ - останется $21$ пара точек (рис. 12). Если же применить более строгую

Найдено и привязано друг к другу $50$ пар точек. Примерно 2/3 соответствий являются ложными

После применения топологического фильтра с $t_{\textrm{topo}} =0{,}15$ $29$ пар точек удалено как ложные соответствия, осталась $21$ пара

После применения топологического фильтра с $t_{\textrm{topo}} =0{,}05$ $34$ пары точек удалено как ложные соответствия, осталось $16$ пар

фильтрацию с $t_{\textrm{topo}} = 0{,}05$, то останется $16$ пар точек (рис. 13), причем все соответствия являются верными. Никакие верные соответствия удалены не были, причем данный метод успешно отфильтровал $34$ пары, что означает, что $68\%$ исходных соответствий были ложными.

Как видно, метод топологической фильтрации не столь чувствителен к точной пространственной локализации точек. Главный акцент в методе делается именно на взаимное расположение точек на изображении.

Вычислительная сложность метода зависит от количества неверно привязанных пар и, в большей степени, от исходного числа пар привязанных объектов. Наибольшая часть вычислений приходится на вычисление определителя в формуле (8) для проверки всех возможных троек объектов. В исходном наборе из $\left| \Phi \right|=n$ пар-кандидатов необходимо проверить $C_n^3 =\frac {n(n-1)(n-2)} {6}$ троек, так что итоговая сложность алгоритма составляет $O(n^3)$, что довольно много, и это один из недостатков метода. По мере отбраковки объектов число всевозможных троек уменьшается, и для ускорения работы можно в формуле (10) не пересчитывать штрафы заново, а подсчитать только те слагаемые, в которые входил удаленный объект, и затем вычесть эти слагаемые из выражения для $h(i)$.

Необходимо отметить, что данный метод плохо справляется с ситуациями, когда на изображении присутствует ярко выраженный передний и задний план. Например, если большинство областей находится на переднем плане, то области заднего плана будут часто нарушать отношение сторонности (9) в силу некомпланарности с областями переднего плана. Часть правильных областей в таком случае будет отбракована.

Сопоставление на основе контурных особенностей.

Основным недостатком точечных особенностей является неустойчивость к радиометрическим изменениям изображения. В то же время на реальных изображениях этот вид искажений встречается достаточно часто: блики, тени и другие эффекты, связанные с изменением условий освещения, времени или сезона съемки. Другим недостатком точечных особенностей является их неустойчивость к ракурсным искажениям. Этот вид искажений также встречается во многих задачах, представляющих практический интерес. Поэтому возникает необходимость привлечения информации о форме самого объекта как наиболее устойчивой к изменениям такого рода, для решения задач координатно-плановой привязки. Форма объекта, безусловно, является наиболее устойчивой его характеристикой. Одна из сложностей поставленной задачи заключается в том, что на практике достаточно распространены случаи сезонных изменений формы естественных (леса, водоемы) и искусственных объектов (дороги), не связанных с радиометрическими искажениями. Отсутствие априорной информации о моделях сезонных изменений форм объектов существенно затрудняет решение данной задачи.

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

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

  1. выделение контурных точек;
  2. прослеживание контуров;
  3. описание контуров;
  4. сравнение контуров в выбранном признаковом пространстве.

Методы выделения контурных точек уже были ранее подробно рассмотрены в разделе 3.4. Задачи прослеживания и описания контуров обсуждались в разделе 4.1. Рассмотрим теперь задачу сравнения контуров.

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

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

В зависимости от выбранных атрибутов используются различные методы сравнения контуров.

Сравнение контуров в естественном представлении.

Пусть эталонное изображение содержит $N$ различных контуров $i=1 ,\ldots, N$, тогда $C_L ^i$ - $i$-й контур длинной $l_L ^i$. Область поиска на другом изображении содержит $M$ различных контуров $j=1 ,\ldots, M$, тогда $C_R ^j$ - $j$-й контур области поиска длиной $l_R ^j$. $C_L ^i$ и $C_R ^j$ представлены функциями кривизны (перегиба) $K_L (l)$ и $K_R (l)$ соответственно.

Для решения поставленной задачи может быть использована процедура сравнения двух контуров, суть которой заключается в последовательном перемещении функции $K_{\textrm{Э}}(l)$ (контура $C_{\textrm{Э}}$) по функции $K_{\textrm{ОП}}(l)$ (контура $C_{\textrm{ОП}}$), и в каждом текущем положении вычисляется значение нормированного коэффициента корреляции $$ k(m, C_{\textrm{Э}} , C_{\textrm{ОП}}) = \frac {\sum\limits_{i=1}^{l_\textrm{Э}} {\left({K_{\textrm{Э}} \left({l_i } \right)-\bar {K}_{\textrm{Э}} } \right)\left({K_{\textrm{ОП}} \left({l_{i+m} } \right)-\bar {K}_{\textrm{ОП}} ^m} \right)} }{\sqrt {\sum\limits_{i=1}^{l_{\textrm{Э}} } {\left({K_{\textrm{Э}} \left({l_i } \right)-\bar {K}_{\textrm{Э}} } \right)^2} } \sqrt {\sum\limits_{i=1}^{l_{\textrm{Э}} } {\left({K_{\textrm{ОП}} \left({l_{i+m} } \right)-\bar {K}_{\textrm{ОП}}^m} \right)^2} } }, $$ где $m=1 ,\ldots, l_{\textrm{ОП}} -l_{\textrm{Э}} $; $K_{\textrm{Э}} (l)$ - - функция кривизны $C_{\textrm{Э}} $ контура; $K_{\textrm{ОП}} (l)$ - - функция кривизны $C_{\textrm{ОП}}$ контура; $\bar {K}_{\textrm{Э}} $, $\bar {K}_{\textrm{ОП}} ^m$ - - средние значения интенсивности кривизны контура $C_{\textrm{Э}} $ и фрагмента контура $C_{\textrm{ОП}} $ соответственно.

При этом необходимо, чтобы выполнялось следующее условие: $l_{\textrm{Э}}

Фиксируется положение, при котором достигается максимальное значение коэффициента корреляции, при этом паре контуров $C_{\textrm{Э}} $ и $C_{\textrm{ОП}}$ ставится в соответствие значение коэффициента корреляции в данном положении.

После того как коэффициенты корреляции найдены для всех контуров области поиска, необходимо выбрать пару контуров ($C_{L } ^i$ и $C_R ^j)$, для которых коэффициент корреляции принимает максимальное значение. Однако максимальное значение коэффициента в ограниченной области поиска не гарантирует достоверности результата, поэтому необходимо использовать дополнительную информацию о взаимном расположении контуров. Использование такой информации позволяет выявлять ложные отождествления.

В данной работе для проверки достоверности отождествления были использованы расстояния между центрами тяжести контуров, при этом найденные пары контуров ($C_{L}^i$, $C_R^j)$ и ($C_{L}^l$, $C_R ^m)$ можно считать правильными, если $$ \left| {L_{i,l} -L_{j,m} } \right|\le \Delta , $$ где $L_{i,l} $ - - расстояние между центрами тяжести контуров $C_{_L } ^i$ и $C_{_L } ^l$; $L_{j,m} $ - - расстояние между центрами тяжести контуров $C_R ^j$ и $C_R ^m$.

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

Сравнение характерных точек контура.

Пусть для контура $C_{\textrm{Э}}^i$ эталонного изображения каким либо способом найдено $N_{\textrm{Э}} $ особых точек, а для контура $C_{\textrm{ОП}}^j$ из области поиска найдено $N_{\textrm{ОП}} $ точек. При этом сама область поиска $C_{\textrm{Э}}^i$ содержит $N$ контуров. Тогда любой контур $C^i$ можно представить в виде функции $F^i (l)$, принимающей значения, отличные от нуля только в найденных характерных точках контура. Причем если при сравнении контуров используется только взаимное расположение точек, то значения функции в особых точках можно положить равным единице (рис. 14).

Представление контура в виде функции $F(l)$

Необходимо для каждого контура $C_L ^i$ эталонного изображения найти соответствующие контуры $C_R ^j$ из области поиска.

Для решения поставленной задачи используется процедура сравнения двух контуров, суть которой заключается в последовательном совмещении точки $i$ контура $C_{\textrm{Э}} $ ($i=1,\ldots, N_{\textrm{Э}})$ и $j$ точки контура $C_{\textrm{ОП}} $ ($j=1, \ldots, N_{\textrm{ОП}})$. При этом необходимо, чтобы выполнялось условие $l_{\textrm{Э}}

В каждом фиксированном положении определяется число соответствующих точек, для которых выполняется условие

\begin{gather*} F_{\textrm{Э}} (l_{\textrm{Э}} ^i+\Delta _m)=F_{\textrm{ОП}} (l_{\textrm{ОП}} ^j+\Delta _m)\ne 0,\\ \Delta _m =l_{\textrm{Э}} ^{i+m}-l_{\textrm{Э}} ^i, \quad m=1 ,\ldots, N_{\textrm{Э}} -i. \end{gather*} В результате выполнения $N$ операций сравнений контуров необходимо выбрать контур $C_{\textrm{ОП}} ^\ast $, содержащий максимальное число соответствующих точек. Однако для сокращения числа ложных отождествлений необходимо ограничить снизу максимальное число найденных соответствующих точек. Контуры $C_{\textrm{Э}} ^i$ и $C_{\textrm{ОП}} ^\ast $ считаются соответствующими, если число найденных точек больше определенного порога $T$.

Данный способ сравнения является одним из самых быстрых и не требует вычислений дополнительных характеристик в точках, однако надежность такого алгоритма невысока. Неустойчивость работы алгоритма связана с тем, что для реальных данных $$ F_{\textrm{Э}} (l_{\textrm{Э}}^i+\Delta_m)=F_{\textrm{ОП}} (l_{\textrm{ОП}}^j+\Delta _m \pm \Delta E_m)\ne 0, $$ где $\Delta E_m $ - величина погрешности, обусловленная дискретностью исходных данных и влиянием различных шумов.

Альтернативным способом поиска соответствующих точек на двух контурах является схема, при которой для сравнения используются не яркостные, а геометрические особенности объекта, и все характеристики вычисляются не по двумерной функции интенсивности $I(x,y)$, а по одномерной функции $F(l)$. Алгоритм поиска соответствующих точек состоит из трех основных этапов:

  1. выбор атрибутов;
  2. поиск соответствующих точек в многомерном пространстве признаков;
  3. проверка достоверности отождествления при помощи взаимного расположения точек на изображении.;

В качестве атрибутов точек используются следующие характеристики: $M_{0}$, $D$, коэффициент асимметрии. Коэффициент асимметрии вычисляется по формуле $$ a=\frac{{\bar M}_3 }{\sigma ^3}, $$ где ${\bar M}_3 $ - центральный момент третьего порядка.

В отличие от предыдущего метода, задача идентификации точек решается при помощи геометрического поиска в многомерном пространстве признаков. Для указанных атрибутов мера сходства точек в пространстве признаков будет иметь вид $$ S_{ij} =\frac{\vert M^{\textrm{Э}}_{0i} -M^{\textrm{ОП}}_{0j} \vert }{M_{0\max} -M_{0\min}} +\frac{\vert D^{\textrm{Э}}_i -D^{\textrm{ОП}}_j \vert }{D_{\max} -D_{\min} } +\frac{\vert a^{\textrm{Э}}_i -a^{\textrm{ОП}}_j \vert }{a_{\max} -a_{\min} } $$ Поиск соответствующих точек заключается в определении пары точек $\langle i,j \rangle$, $i\in C_{\textrm{Э}} $, $j\in C_{\textrm{ОП}} $, для которой $S_{ij} $ принимает наименьшее значение в области поиска контура.

Данный алгоритм отождествления точек является более надежным. Это связано с тем, что для проверки достоверности использовалось евклидово расстояние между точками.

Вот мое прокомментированное решение в ES3 (подробности после кода):

Object.equals = function(x, y) { if (x === y) return true; // if both x and y are null or undefined and exactly the same if (! (x instanceof Object) || ! (y instanceof Object)) return false; // if they are not strictly equal, they both need to be Objects if (x.constructor !== y.constructor) return false; // they must have the exact same prototype chain, the closest we can do is // test there constructor. for (var p in x) { if (! x.hasOwnProperty(p)) continue; // other properties were tested using x.constructor === y.constructor if (! y.hasOwnProperty(p)) return false; // allows to compare x[ p ] and y[ p ] when set to undefined if (x[ p ] === y[ p ]) continue; // if they have the same strict value or identity then they are equal if (typeof(x[ p ]) !== "object") return false; // Numbers, Strings, Functions, Booleans must be strictly equal if (! Object.equals(x[ p ], y[ p ])) return false; // Objects and Arrays must be tested recursively } for (p in y) { if (y.hasOwnProperty(p) && ! x.hasOwnProperty(p)) return false; // allows x[ p ] to be set to undefined } return true; }

Разрабатывая это решение, я особенно внимательно посмотрел на угловые случаи, эффективность, но пытаясь дать простое решение, которое работает, надеюсь, с некоторой элегантностью. JavaScript допускает, что у нулевых и неопределенных свойств и объектов есть прототипы, которые могут привести к очень разному поведению, если не проверены.

Сначала я решил расширить Object вместо Object.prototype , главным образом потому, что null не может быть одним из объектов сравнения и что я считаю, что null должен быть действительным объектом для сравнения с другим. Есть и другие законные проблемы, отмеченные другими в отношении расширения Object.prototype относительно возможных побочных эффектов для другого кода.

Необходимо проявлять особую осторожность, чтобы разрешить JavaScript, чтобы свойства объекта могли быть установлены как неопределенные , т.е. Существуют свойства, значения которых установлены как неопределенные . Вышеприведенное решение подтверждает, что оба объекта имеют одинаковые свойства, которые не определены для сообщения о равенстве. Это может быть достигнуто только путем проверки существования свойств с использованием Object.hasOwnProperty(property_name) . Также обратите внимание, что JSON.stringify() удаляет свойства, которые установлены как неопределенные , и поэтому сравнения с использованием этой формы будут игнорировать свойства, установленные для значения undefined .

Функции должны считаться равными, только если они используют одну и ту же ссылку, а не только тот же код, потому что это не будет учитывать прототип этих функций. Поэтому сравнение строки кода не работает, чтобы гарантировать, что у них есть один и тот же объект-прототип.

Оба объекта должны иметь одну и ту же цепочку прототипов , а не одни и те же свойства. Это может быть проверено только кросс-браузером, сравнивая конструктор обоих объектов для строгого равенства. ECMAScript 5 позволит проверить их фактический прототип с помощью Object.getPrototypeOf() . Некоторые веб-браузеры также предлагают свойство __proto__, которое делает то же самое. Возможное улучшение вышеуказанного кода позволит использовать один из этих методов всякий раз, когда это возможно.

Использование строгих сравнений здесь имеет первостепенное значение, потому что 2 не следует считать равным "2.0000" , а false должно считаться равным нулю , неопределенным или 0 .

Соображения эффективности приводят к тому, что я как можно скорее сравню для равенства свойств. Затем, только если это не удалось, найдите тип этих свойств. Повышение скорости может быть значительным для больших объектов с большим количеством скалярных свойств.

Не более двух циклов требуется, первый для проверки свойств из левого объекта, второй для проверки свойств справа и проверки только существования (не значения), чтобы поймать эти свойства, которые определены с неопределенным значением.

В целом этот код обрабатывает большинство угловых случаев только в 16 строках кода (без комментариев).

Обновление (8/13/2015) . Я реализовал более эффективную версию, так как функция value_equals() работает быстрее, обрабатывает правильные угловые случаи, такие как NaN и 0, отличные от -0, необязательно применяя порядок и тестирование свойств объектов для циклических ссылок, поддерживаемых более чем 100 автоматическими тесты как часть тестового набора проектов