Saltar al contenido principal
Cuando el programa empareja un FlexiLayout con una imagen, intenta encontrar en la imagen los objetos que corresponden a los elementos del FlexiLayout. A continuación, el programa estima en qué medida un objeto concreto coincide con su elemento. Una estimación es un número de 0 a 1. Una calidad de 1 significa que el objeto detectado coincide al 100 %. Si la calidad no es 0, el emparejamiento del FlexiLayout da lugar a la creación de regiones para los bloques. El programa busca los elementos consecutivamente, en el orden en que aparecen en el árbol de FlexiLayout, de arriba abajo. Para cada elemento, el programa puede encontrar varios objetos coincidentes (o conjuntos de objetos) en el área de búsqueda. El programa formula una hipótesis para cada objeto del área de búsqueda y estima su calidad: cuanto mejor sea la coincidencia, mayor será la calidad de la hipótesis. La ubicación del objeto detectado determina la ubicación de los objetos situados más abajo en el árbol de FlexiLayout. El programa utiliza cada una de las hipótesis del elemento actual como punto de partida para buscar los elementos siguientes situados debajo del elemento actual. Así, las hipótesis de los elementos se ramifican, lo que da como resultado un árbol de hipótesis que contiene muchas más ramas que el árbol de elementos. Si varios elementos se agrupan en un elemento de grupo, todo el grupo se considera un solo elemento para el que se formulan varias hipótesis. La calidad de un elemento de grupo se calcula multiplicando las hipótesis de los elementos que lo componen. Todo el FlexiLayout puede considerarse un elemento de grupo cuya calidad puede calcularse multiplicando las calidades de las hipótesis de todos sus elementos. Al emparejar un FlexiLayout con imágenes, el programa necesita encontrar la mejor rama completa de hipótesis. Una rama es completa si incluye todos los elementos, desde el elemento superior hasta el elemento inferior. Una solución genérica sería considerar todas las combinaciones posibles de hipótesis para todos los elementos, construir un conjunto completo de posibles ramas completas y seleccionar la rama con la mayor calidad. Esto no es práctico, ya que llevaría demasiado tiempo. Además, si el número de elementos es bastante grande y sus áreas de búsqueda son solo aproximadas, puede producirse una explosión combinatoria, lo que da lugar a un crecimiento incontrolado del número de hipótesis. El programa utiliza varios métodos para optimizar la búsqueda y mantener al mínimo el número de hipótesis.”

Optimización de la búsqueda

Cada elemento del FlexiLayout tiene un parámetro importante llamado Number of surviving hypotheses. El usuario puede usar este parámetro para limitar la cantidad de hipótesis que el programa puede utilizar al buscar el siguiente elemento. De forma predeterminada, este parámetro se establece en 5 para los elementos simples y en 1 para los elementos de grupo. Esto significa que, si el programa encuentra 15 hipótesis para un elemento determinado, seleccionará las cinco mejores y dejará incompletas las otras 10 cadenas de hipótesis. Por regla general, los elementos de grupo se detectan con mayor fiabilidad que los elementos simples. Por lo tanto, la mejor hipótesis de un elemento de grupo suele ser la correcta. En la mayoría de los casos, el programa tiene varias cadenas de hipótesis incompletas y, en consecuencia, varias direcciones de búsqueda posibles. El programa busca la mejor hipótesis mediante el algoritmo clásico de “búsqueda amplia”. Esto significa que el programa siempre intenta completar la cadena que en ese momento tiene la mejor calidad, independientemente de su longitud. Supongamos que tenemos un FlexiLayout que describe 30 elementos para los que se han creado dos cadenas de hipótesis: una cadena de 29 elementos con una calidad estimada de 0.89 y una cadena de 2 elementos con una calidad estimada de 0.92. El programa intentará completar la cadena más corta, que tiene mejor calidad, hasta que la calidad de todas sus extensiones pase a ser inferior a la de la primera cadena. En el caso de un elemento de grupo, el programa utiliza la denominada optimización de calidad. Cuando el programa encuentra una cadena de hipótesis completa ideal para un elemento de grupo determinado (es decir, la calidad de esta cadena es 1), ignora todas las demás variantes. El número total de hipótesis para cada elemento está limitado a 10,000.

Más información:

Cómo se generan y evalúan las hipótesis