сравнивая два векторных изображения - PullRequest
10 голосов
/ 24 сентября 2011

Я хочу сравнить два векторных изображения (скажем, SVG) и посмотреть, насколько они близки. По сути, я хочу проверить правильность алгоритма трассировки, который преобразует растровые изображения в векторный формат.

Я думаю проверить этот алгоритм:

- возьмите несколько векторных изображений.

-Растеризация векторного изображения в png.

-Скормите вышеупомянутый png алгоритм трассировки.

-Сравнить выходные данные программы трассировки (которая является SVG) с исходной.

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

1 Ответ

4 голосов
/ 05 октября 2011

Мне не известны стандартные метрики для этого, но у меня есть указатель, который, я надеюсь, будет полезен.

В проекте Batik используется набор инструментов для проверки того, что рендеринг SVG-документов не слишком отличается от набора эталонных изображений. Насколько я понимаю, он по существу растеризует SVG и выполняет разность двух изображений на основе пикселей, чтобы увидеть, как они отличаются. Он должен быть достаточно умным, чтобы игнорировать неизбежные различия, которые могут возникнуть, например, из-за тонких различий в сглаживании.

Подробнее об этом можно прочитать (особенно раздел SVGRenderingAccuracyTest) по адресу: http://jpfop.sourceforge.net/jaxml-batik/html-docs/test.html.

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

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

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