Calculate percentage of similarities in two polygons

8 visualizaciones (últimos 30 días)
Amaral
Amaral el 9 de Nov. de 2015
Editada: Amaral el 10 de Nov. de 2015
Hello friends.
Is there any framework in Matlab that can calculate the percentage of similarities between two polygons?
If not, how can i implement one?
Googling i found out a formula to calculate the similarities of two polygons R and P2 using this formula:
But i don't know how to calculate the union and intersection polygons.
Any help please? :)
Thanks in advance!

Respuesta aceptada

Kelly Kearney
Kelly Kearney el 10 de Nov. de 2015
If you have the Mapping Toolbox and want a more exact answer:
% Some example polygons
theta = linspace(0, 2*pi, 100);
x1 = cos(theta) - 0.5;
y1 = -sin(theta);
x2 = x1 + 1;
y2 = y1;
% Calculate
[xint, yint] = polybool('&', x1, y1, x2, y2);
[xun, yun] = polybool('|', x1, y1, x2, y2);
a1 = polyarea(xun, yun);
a2 = polyarea(xint, yint);
sim = 1 - (a1- a2)./a1;
  1 comentario
Amaral
Amaral el 10 de Nov. de 2015
Editada: Amaral el 10 de Nov. de 2015
It worked very well. It gives accurate results which is exactly what i'm looking for. Thanks :)

Iniciar sesión para comentar.

Más respuestas (1)

Image Analyst
Image Analyst el 9 de Nov. de 2015
If that definition works for you, then that's fine. One could think of others, but whatever works for what you need it to, is fine. I think the easiest way to solve the formula is to convert the polygons to images with poly2mask().
rows = 1920; % Whatever is needed to contain your points.
columns = 1600;
image1 = poly2mask(x1,y1, rows, columns);
image2 = poly2mask(x2,y2, rows, columns);
unionImage = image1 & image2;
intersectionImage = xor(image1, image2)
similarity - 1 - (sum(unionImage(:) - intersectionImage(:)) / sum(unionImage(:));
If your x and y are too small, then multiply them by some scaling factor beforehand, like 100 or 1000 or whatever so that your image is big and not too pixelated.
  2 comentarios
Amaral
Amaral el 9 de Nov. de 2015
Thanks for the answer. :) I'll try it out :)
Amaral
Amaral el 9 de Nov. de 2015
Editada: Amaral el 9 de Nov. de 2015
Your approach worked. But had to do some adjustments because i think the way you calculated the union and intersection is wrong. This way it gives the results i want, at least i think so according to the results in the tests :P
unionImage = image1 | image2;
intersectionImage = image1 & image2;
similarity = (1 - (sum(unionImage(:) - intersectionImage(:)) / sum(unionImage(:)))) * 100

Iniciar sesión para comentar.

Categorías

Más información sobre Images en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by