2011-09-24 6 views
8

두 벡터 이미지 (예 : SVG)를 비교하고이 두 벡터 이미지의 근접 정도를 확인하고 싶습니다. 기본적으로 래스터 이미지를 벡터 형식으로 변환하는 추적 알고리즘의 정확성을 테스트하고 싶습니다.두 벡터 이미지 비교

나는이 알고리즘을 테스트하기 위해 생각하고 방법은 다음과 같습니다 일부 벡터 이미지 -Take

.

- 벡터 이미지를 png로 래스터 화합니다.

- 위의 png to tracing 알고리즘을 전달했습니다.

- 원본 프로그램과 추적 프로그램 (SVG)의 출력을 비교하십시오.

RMSE (imagemagick)와 같은 래스터 이미지에 대한 몇 가지 메트릭스가 있음을 알고 있지만 벡터 포맷에 대한 몇 가지 표준 메트릭스가 있다면 익숙하지 않습니다. 나는 호, 선, 곡선 등의 수와 같은 간단한 것들을 생각할 수 있습니다.하지만 이것들은 기하학과 색의 편차를 감지 할 수 없습니다. 누군가가이 문제에 대한 좋은 표준 메트릭이나 다른 접근법을 제시 할 수 있습니까?

답변

4

표준 메트릭에 대해서는 알지 못하지만 도움이 될만한 포인터가 있습니다.

Batik 프로젝트는 일련의 도구를 사용하여 SVG 문서의 렌더링이 참조 이미지 세트에서 지나치게 벗어나지 않는지 테스트합니다. 내 이해는 기본적으로 SVG를 래스터 화하고 두 이미지의 픽셀 기반 diff를 수행하여 차이점을 확인합니다. 예를 들어 앤티 알리아싱의 미묘한 차이에서 비롯 될 수있는 피할 수없는 차이점을 간과 할 정도로 똑똑해야합니다.

자세한 내용 (특히 SVGRenderingAccuracyTest 섹션)은 http://jpfop.sourceforge.net/jaxml-batik/html-docs/test.html입니다.

물론 벡터 비교가 아닌 래스터 비교를 수행한다는 의미입니다. 완전히 다른 곡선이 매우 유사한 렌더링을 생성 할 수 있기 때문에 귀하의 경우에 벡터 비교는 매우 어려울 것입니다. 더 중요한 것은, 입력이 다른 것 뒤에 숨겨진 모양을 가질 수 있으므로 결과물이 무엇인지 추측 할 수 없게됩니다. 따라서 출력은 픽셀 완전 동등 렌더링을 생성 할 수 있지만 완전히 잘못된 것으로 표시됩니다.

그러나 벡터 비교를 수행하려는 경우 (데이터가 더 실용적인 방식으로 제한 될 수 있음) 가장 간단한 방법은 먼저 두 SVG를 모두 정규화 (모든 모양을 경로로 변환, 모든 메타 데이터 제거, 상속 적용 값을 정규화하고, 경로 데이터가 항상 같은 양식을 사용하도록 정규화하는 등)를 두 가지 용도로 사용합니다. 먼저 정규화 된 트리 구조에서 diff를 봅니다. 이미 유용한 정보가 있습니다. 둘째, 용감하다고 느끼면 개별 곡선 간의 차이점을 측정하십시오. 나는 후자에 착수하는 것에 대해 두 번 생각할 것입니다. 왜냐하면 그것은 당신에게 많은 위음성을 줄 가능성이 있기 때문입니다.

+0

참고로 도면의 "숨겨진"부분에주의해야합니다. 일부 레이저 절단기는 SVD를 입력 형식으로 사용합니다. 선은 컷을 나타내며, 채우기는 조각 (또는 무시) 될 수 있습니다. 나중에 새겨진 각인은 여전히 ​​중요합니다. (보통 공정한 것으로서 내부의 도형이 먼저 자르도록하고, 일반적으로는자를 새기지 않습니다. 그러나 그것은 일어날 수 있습니다. 특히 "상처"는 실제로 완전히 뚫어지지 않는 난민 권력에있다) – Stripes