4. Desarrollo de la propuesta
4.2 Descripci ´on del algoritmo propuesto
4.2.1 Primera propuesta
El dise ˜no de la primera versi ´on del algoritmo propuesto consta a grandes rasgos de dos pasos: una estimaci ´on previa del flujo ´optico y posteriormente la generaci ´on autom ´atica de operadores para la correcci ´on del flujo. Para la primera parte se realiza una estimaci ´on previa de flujo ´optico utilizando la secuencia en escala de grises, para ´esto se emplea el m ´etodo propuesto por Lukas- Kanade en su enfoque piramidal; se eligi ´o este m ´etodo debido a la simplicidad de implementaci ´on. Por otro lado, la generaci ´on autom ´atica de los operadores se realiza a trav ´es del proceso evolu- tivo, los cuales aplicados a la estimaci ´on previamente obtenida se busca que brinden un mejor desempe ˜no en cuanto a la precisi ´on en la estimaci ´on de los vectores de flujo.
De acuerdo a la Figura 10, el primer paso en un algoritmo evolutivo es la generaci ´on de la poblaci ´on. En este trabajo se utiliz ´o una estrategia conocida comoprogramaci ´on cerebral (Dozal, 2014). En esta t ´ecnica los individuos o posibles soluciones son definidos por arreglos con diversos ´arboles y no con uno solo, a diferencia de los algoritmos de GP. Dichos individuos son formados por conjuntos de operaciones b ´asicas definidos en el cap´ıtulo 3 como conjunto defunciones y terminales.
Para este caso en particular cada posible soluci ´on puede tener como m ´aximo una cantidad de seis ´arboles, donde cada ´arbol representa un operador el cual actuar ´a sobre la estimaci ´on previa del flujo ´optico con la finalidad de mejorar su precisi ´on. Este n ´umero es generado de manera aleatoria para cada uno de los individuos de la poblaci ´on durante el proceso de inicializaci ´on. En el Algoritmo 8 se describe de manera general esta primera versi ´on del algoritmo propuesto.
Algoritmo 8Algoritmo de GP - proceso evolutivo
Descripci ´on: Algoritmo que describe el proceso evolutivo.
Entrada:
• Im1, Im2: Dos im ´agenes subsecuentes en escala de grises.
• nGen: Numero de generaci ´ones.
• popSize: Tama ˜no de la poblaci ´on
• maxT rees: N ´umero m ´aximo de ´arboles para cada individuo.
Variables:
• U V : Arreglo que representa el flujo ´optico para la secuencia de entrada.
• maxLevel: N ´umero m ´aximo de niveles que un ´arbol puede tener.
• n: Contador de iteraciones para el n ´umero de generaciones.
• pChromCross: Probabilidad de cruce a nivel cromosoma.
• pGenCross: Probabilidad de cruce a nivel gen.
• pChromM ut: Probabilidad de mutaci ´on a nivel cromosoma.
• pGenM ut: Probablilidad de mutaci ´on a nivel gen.
• newGen: Arreglo que almacenar ´a a la nueva poblaci ´on.
• parents : Arreglo que contiene los individuos seleccionados a los que se le aplicar ´a algun operador gen ´etico.
• of f Spring: Arreglo que almacena el resultado de aplicar un operador gen ´etico.
Salida:bestInd: Arreglo que representa al individuo con mejor desempe ˜no.
Inicio
1: U V ← calcOpF low(Im1, Im2) /*Realiza la estimaci ´on de flujo ´optico para la secuencia de entrada*/
2: pop ← initP op(popSize, maxT rees, maxLevel, setF unctions, setT erminals)/*Inicializa la po- blaci ´on*/
3: whilen < nGendo
4: evalP opF itness(pop, U V)/*Evaluaci ´on de la aptitud*/
5: newP op.clear()
6: whilenewGen.length < popSizedo
7: parents←roulette(pop)
8: operator ←rouletteOp(pChromCross, pGenCross, pChromeM ut, pGenM ut)
9: of f Spring←applyOpe(operator, parents)/*Aplica operadores gen ´eticos*/
10: newP op.add(of f Spring)
11: of f Spring.clear()
12: end while
13: pop.replace(newP op) /*Reemplaza los individuos de la nueva poblaci ´on en la poblaci ´on original*/
14: bestInd←getBest(pop)/*Obtiene el mejor individuo de la poblaci ´on*/
15: n=n+ 1
16: end while 17: returnbestInd
El algoritmo anterior que va de la linea (1) a la (17), inicia con la asignaci ´on de la variableU V, que representa una estimaci ´on previa del flujo ´optico para la secuencia de entrada utilizando el m ´etodo de Lukas-Kanade en su variante piramidal abordado en el Cap´ıtulo 2. Adem ´as,initP opes el m ´etodo de inicializaci ´on de la poblaci ´on que en este caso corresponde al m ´etodomitad y mitad, requiere como par ´ametros de entrada el tama ˜no de la poblaci ´on (popSize), el n ´umero m ´aximo de ´arboles que puede conformar a un individuo(maxTrees) as´ı como el tama ˜no m ´aximo de estos (maxLevel) .
A continuaci ´on, se eval ´ua el desempe ˜no para cada individuo de la poblaci ´on inicial (4) y pos- teriormente se seleccionan aquellos que entrar ´an al proceso de s´ıntesis por medio del m ´etodo de la ruleta (7), basandos ´e en los valores de la aptitud obtenidos en el paso anterior: mientras este valor sea mayor entonces tendr ´a mayor probabilidad de ser seleccionado. Mediante el mismo m ´etodo de selecci ´on por ruleta, se elige uno de los cuatro operadores gen ´eticos para la etapa de variaci ´on (8), estos operadores son: cruce a nivel gen, cruce a nivel cromosoma, mutaci ´on a nivel gen y mutaci ´on a nivel cromosoma. Una vez elegido el operador, ´este es aplicado (9) y despu ´es el resultado es a ˜nadido al arreglonewP op. Posteriormente este arreglo reemplaza a la generaci ´on anterior (13) y se almacena el mejor individuo de la generaci ´on enbestInd, este proceso se repite hasta alcanzar el n ´umero de generaciones previamente definido.
Algoritmo 9initPop()
Descripci ´on: Algoritmo que describe el proceso de inicializaci ´on de la poblaci ´on.
Entrada:
• popSize: Tama ˜no de la poblaci ´on
• maxT rees: N ´umero m ´aximo de ´arboles para cada individuo.
• maxLevel: N ´umero m ´aximo de niveles que un ´arbol puede tener.
• setF unctions: Arreglo que contiene el conjunto de funciones para generar los ´arboles
• setT erminals: Arreglo que contiene el conjunto de terminales para generar los ´arboles
Variables:
• trees: N ´umero de ´arboles generado aleatoriamente.
Salida:pop: Poblaci ´on generada aleatoriamente
Inicio
1: fori←1topopSizestep1do
2: trees←random(2, maxT rees)/*Genera un n ´umero aleatorio entre 2 ymaxTrees*/
4: fort←1totreesstep1do
5: newInd.tree(t)←makeT ree(setF unctions, setT erminals, maxLevel)
6: end for
7: pop(i)←newInd
8: end for
9: returnpop
El algoritmo crea una poblaci ´on basado en los par ´ametros de entrada. Se genera de manera aleatoria para cada individuo un n ´umero que representa la cantidad de ´arboles que lo compondr ´an, este var´ıa entre dos ymaxT rees.
Despu ´es cada ´arbol es generado de manera autom ´atica utilizando los arreglos setTerminals
ysetFunctions, que representan a los conjuntos de terminales y de funciones que son definidos
previamente. Dichos conjuntos establecen elEspacio de b ´usquedapara el algoritmo evolutivo.
4.2.1.1. Funciones y terminales
En la Tabla 1, se muestran los conjuntos de funciones y terminales. El objetivo de los elementos que componen a estos dos conjuntos es que de manera autom ´atica construyan operadores que al ser sometidos al proceso de evoluci ´on y aplicados a la estimaci ´on del flujo ´optico se mejore la precisi ´on de ´esta. A continuaci ´on se somete a evaluaci ´on el resultado obtenido usando la base de datos de Middlebury para flujo ´optico cuyas m ´etricas de evaluaci ´on se han descrito en la Secci ´on 2.4.
Tabla 1.Funciones y terminales
F ={+,−,×,÷, M F3, M F5, M F7, log2(), Dx(), Dy(), kT imes, kM inus, kP lus, kDiv}
T ={uv, Dx(uv), Dy(uv), Dxx(uv), Dyy(uv), M F3, M F5, M F7}
En la Tabla 1,uvrepresenta una estimaci ´on del flujo ´optico. M Fses un filtro de medianas ys
indica el tama ˜no de este.Durepresenta la derivada en la direcci ´on deu∈x, y, xx, yy. Las primiti-
vaskT imes, kM inus, kP lus, kDiv, realizan la operaci ´on que su nombre indica por una constante
4.2.1.2. Evaluaci ´on de aptitud
La aptitud de cada posible soluci ´on generada durante el proceso evolutivo se asigna evaluando la ecuaci ´on siguiente, dondeM es el tama ˜no de la imagen,I(x, y, t)la funci ´on de intensidad de la imagen en el punto(x, y)al tiempot, las componentes del flujo ´optico sonuyv.
f itness=min 1
MΣ
M
i=1|Iref(xi, yi)−I(xi+vi, yi+vi)|
En el algoritmo propuesto se utiliza una estrategia de mapeo hacia atr ´as, mapeando los puntos de la imagen acorde al arreglouv que corresponde a la estimaci ´on del flujo ´optico a la que le han sido aplicados los operadores generados autom ´aticamente por el algoritmo evolutivo. Se aplica la funci ´on de transformaci ´on al cuadro correspondiente at1de la secuencia de entrada dando como
resultado un nuevo cuadro en el que cada punto (x, y) del cuadro t1 ha sido desplazado lo que
indica las componentesuyv. Posteriormente se calcula la diferencia entre el cuadro de referencia
t2 de la secuencia de entrada y el cuadro obtenido en el paso anterior. Se considera mejor la
aptitud del individuo evaluado mientras menor sea esta diferencia. A continuaci ´on se muestra el algoritmo de la funci ´on de evaluaci ´on.
Algoritmo 10Proceso de evaluaci ´on de aptitud
Descripci ´on: Algoritmo del proceso de evaluaci ´on de aptitud.
Entrada:
• ind: Arreglo que representa un individuo de la poblaci ´on.
• uv : Arreglo que representa la estimaci ´on previa del flujo.
Variables:
• im1: Arreglo que reprenta el cuadro ent1.
• im2: Arreglo que reprenta el cuadro ent2.
• nU V : Arreglo que almacena la nueva estimaci ´on del flujo.
Salida:
• f itness: Aptitud del individuo evaluado.
Inicio
1: for eachtreeinind.treesdo
2: nU V ←nU V +eval(tree(uv))
3: end for each
4: remappedImg←inverseM apping(im1, nU V)
5: f itness←mean(abs(im2−remappedImg))
4.2.1.3. Operadores gen ´eticos
Aplicando el Algoritmo 8 despu ´es de creada la poblaci ´on inicial y evaluado el rendimiento de cada individuo, el siguiente paso corresponde a la selecci ´on y variaci ´on aplicando los correspon- dientes operadores gen ´eticos como lo sonselecci ´on, cruce y mutaci ´on.
Figura 16.Estructura de un individuo
En la Figura 16 puede observarse un ejemplo de como est ´a compuesto cada individuo de la poblaci ´on. Cada ´arbolt que forma parte de la estructura del inviduo est ´a a su vez conformado por otras estructuras b ´asicas conocidas comonodos. Debido a que un individuo consiste de un arreglo de ´arboles, los operadores gen ´eticos definidos en el Cap´ıtulo 4 no pueden ser aplicados sin realizar antes algunas moficaciones.
Los operadores gen ´eticos aplicables para el tipo de estructura que se tiene podemos clasifi- carlos como: nivel gen y nivel cromosoma. En las operaciones a nivel gen, tanto el cruce como la mutaci ´on se llevan a cabo dentro de la estructura de cada ´arbol que compone al individuo. El ope- rador de cruce requiere un par de arreglos que representan a dos individuos padres necesarios para llevar a cabo el proceso de combinaci ´on y generar as´ı dos nuevos individuos. Se genera de manera aleatoria un punto de cruce en cada uno de los ´arboles y es a partir de estos en los que se realiza el intercambio de informaci ´on.
Figura 17.Cruce a nivel gen
Mientras que para la mutaci ´on es necesario solo un individuo, para cada ´arbol que lo compone se elige de manera aleatoria un nodo a partir del cual se aplicar ´a el operador.
Figura 18.Cruce a nivel gen
Por otro lado, el cruce a nivel cromosoma consiste en el intercambio parcial de ´arboles de un individo padre a otro basado en unpunto de cruce generado de manera aleatoria dando como resultado dos nuevos individuos.
Figura 19.Cruce a nivel cromosoma
La mutaci ´on a nivel cromosoma consiste en cambiar por completo cada ´arbol que compone al individuo seleccionado dando como resultado uno nuevo, este operador solo requiere como en- trada un solo individuo.
Figura 20.Mutaci ´on a nivel cromosoma
El algoritmo que describe el operador de cruce a nivel Gen, recibe como entrada dos arreglos que representan a dos individuos de la poblaci ´on(p1, p2), que fueron elegidos previamente para entrar al proceso de combinaci ´on a nivel gen. En la l´ınea (1) de entre los dos cromosomas de entrada se obtiene el tama ˜no del menor de ellos, esto con la finalidad de que elpunto de cruceno exceda los l´ımites de la estructura de menor tama ˜no.
El punto de cruce se genera de manera aleatoria (l´ıneas 5 y 6) para cada uno de los cromo- somas que conforma al individuo, este punto hace referencia a un gen (nodo) a partir del cual se realiza el intercambio de informaci ´on (l´ıneas 7 y 8) llevando consigo a los nodos que tenga como descendencia.
Algoritmo 11Cruce a nivel Gen
Descripci ´on: Algoritmo que describe el proceso cruce a nivel gen.
Entrada:
• p1, p2: Arreglos que representan a los cromosomas.
Variables:
• minLen: Indica el menor tama ˜no de entre los cromosomas de entrada.
• cp1, cp2: Puntos de cruce.
Salida:c1, c2: Arreglos resultantes del proceso de combinaci ´on a nivel gen.
Inicio
1: minLen←min(p1.length, p2.length)
2: c1←p1
3: c2←p2
4: fori←1tominLenstep1do
5: cp1←random(p1[i]) 6: cp2←random(p2[i]) 7: c1[i]←swap(p1[i], p2[i], cp1, cp2) 8: c2[i]←swap(p2[i], p1[i], cp2, cp1) 9: end for 10: returnc1, c2
Algoritmo 12Cruce de cromosoma
Descripci ´on: Algoritmo que describe el proceso de cruce a nivel cromosoma.
Entrada:
• p1, p2: Arreglos que representan a los cromosomas.
Variables:
• minLen: Indica el menor tama ˜no de entre los cromosmas de entrada.
• cp: Punto de cruce.
Salida:c1, c2: Arreglos resultantes del proceso de combinaci ´on a nivel cromosoma.
Inicio
1: minLen←min(p1.length, p2.length)
2: c1←p1
3: c2←p2
4: ifp1.length==p2.lengththen
5: minLen←minLen−1 6: end if 7: cp←random(1, minLen) 8: fori←1tocpstep1do 9: c1[i]←p1[i] 10: c2[i]←p2[i] 11: end for 12: returnc1, c2
Al igual que el cruce a nivel gen, este algoritmo recibe como par ´ametro de entrada dos arreglos los cuales representan a los cromosomas. Se comienza por obtener de entre ´estos el tama ˜no del menor de ellos (l´ınea 1) y en caso de que ambos sean del mismo tama ˜no esta cantidad se disminuye en uno, ya que de lo contrario cuando se obtenga de manera aleatoria el punto de cruce existe la posibilidad de que ´este sea igual a la longitud del cromosoma. As´ı se obtendr´ıa como resultado para este procedimiento un intercambio total de ´arboles es decir, la salida consistir´ıa en una r ´eplica de los arreglos de entrada. Una vez obtenido el punto de cruce se procede a realizar el intercambio de ´arboles que componen al individuo, desde la primera posici ´on y teniendo como l´ımite este punto (l´ıneas 8-11). Por ´ultimo los nuevos cromosomas son retornados.
Algoritmo 13Mutaci ´on a nivel gen
Descripci ´on: Algoritmo que describe el proceso mutaci ´on a nivel gen.
Entrada:
• p: Arreglo que representa un cromosoma al que ser ´a aplicado el operador.
• maxLevel: Tama ˜no m ´aximo que puede tener el cromosoma.
Variables:
• mp: N ´umero aleatorio que indica el nodo a partir del cual el operador ser ´a aplicado.
• mpLvl: Indica el nivel en el cual se encuentra el nodo al que apuntamp • new: Arreglo que almacena la nueva rama.
Salida:c: Arreglo resultante del proceso de mutaci ´on a nivel gen.
Inicio
1: fori←1top.lengthstep1do
2: mp←random(p[i])
3: mpLlv←getN odeLvl(mp)
4: new←makeT ree(setF unctions, setT erminals, maxLevel−mpLvl+ 1)
5: c[i]←joinT rees(p[i], new, mp)
6: end for 7: returnc
El algoritmo recibe como entrada un arreglo que representa un individuo. Para cada ´arbol que compone al individuo se selecciona de manera aleatoria un nodo a partir del cual se aplicar ´a el operador (l´ınea 2). Despu ´es se obtiene el nivel en el cual se encuentra dicho nodo, con la fina- lidad de que al a ˜nadir nueva informaci ´on al ´arbol a partir de este nodo (l´ınea 4) no se supere el tama ˜no m ´aximo que puede tener cada ´arbol definido en la variablemaxLevel. Por ´ultimo, se a ˜nade esta nueva informaci ´on al ´arbol (l´ınea 5) y se repite el procedimiento con todos los ´arboles que componen al individuo.
Algoritmo 14Mutaci ´on de cromosoma
Descripci ´on: Algoritmo que describe el proceso mutaci ´on de cromosoma.
Entrada:
• p: Arreglo que representa un cromosoma al que ser ´a aplicado el operador.
• maxLevel: Tama ˜no m ´aximo que puede tener el cromosoma.
Variables:
• new: Arreglo que almacena el nuevo cromosoma.
Salida:c: Arreglo resultante del proceso de mutaci ´on a nivel cromosoma.
Inicio
1: fori←1top.lengthstep1do
2: new←makeT ree(setF uncions, setT erminals, maxLevel)
3: c[i]←new
4: end for
5: returnc
Este algoritmo es b ´asico en su funcionamiento, ya que recibe como entrada un arreglo que representa a un individuo y cada uno de los ´arboles que lo componen son reemplazados por unos nuevos que son generados de manera aleatoria dado el conjunto de funciones y terminales, respetando los l´ımites de tama ˜no m ´aximo definidos enmaxLevel.
4.2.2. Segunda propuesta
En esta segunda versi ´on del m ´etodo propuesto se integra la informaci ´on que proveen las secuencias de im ´agenes a color. Para esto se defini ´o una nueva estructura para los individuos que ahora se componen de cinco ´arboles. El primero se conforma de operaciones que act ´uan sobre el espacio de color para la secuencia evaluada, con el fin de resaltar caracter´ısticas que ayuden realizar una mejor estimaci ´on del flujo. Los tres siguientes ´arboles act ´uan sobre la estimaci ´on previa del flujo ´optico con la finalidad de realizar correciones en la estimaci ´on. La funci ´on del ´arbol restante es integrar de alguna manera los tres ´arboles anteriores que forman los operadores que act ´uan sobre el flujo. Se definieron nuevos conjuntos de funciones y terminales que forman la nueva estructura de los individuos.
Tabla 2.Funciones y terminales para la dimensi ´on de color
F ={+,−,×,÷, M F3, M F5, M F7, GaussFσ=1, GaussFσ=2}
T ={R, G, B, H, S, V, SHSI, I, Y, U, VY U V}
en dondeM Fnes un filtro de medianas de tama ˜non,GaussFσ=iun filtro Gaussiano con valor
de sigmai. El conjunto de terminales est ´a integrado por bandas que componen cada secuencia en los modelos de colorRGB, HSV, HSI, Y U V.
Tabla 3.Funciones y terminales para la correcci ´on de flujo
F ={+,−,×,÷, M F3, M F5, M F7, GaussFσ=1, GaussFσ=2, Dx(), Dy()
kT imes, kM inus, kP lus, kDiv}
T ={uv, Dx(uv), Dy(uv), M F3(uv), M F5(uv), M F7(uv), GaussFσ=1(uv), GaussFσ=2(uv)}
Dx, Dy son las derivadas parciales de la imagen en la direcci ´on de x y y respectivamente. kT imes, kM inus, kP lus, kDiv son operaciones de multiplicaci ´on, resta, suma y divisi ´on por una constantek.
Tabla 4.Funciones y terminales para la funci ´on de integraci ´on de operadores
F ={+,−,×,÷, M F3, M F5, M F7, GaussFσ=1, GaussFσ=2, Dx(), Dy()
kT imes, kM inus, kP lus, kDiv}
T ={Op1, Op2, Op3}
Op1, Op2, Op3 representan a los operadores generados de manera autom ´atica para la corre- ci ´on del flujo, los cuales son combinados de acuerdo a la estructura generada por este ´arbol. Debido a la nueva estructura de los individuos el proceso de inicializaci ´on de la poblaci ´on as´ı co- mo la evaluaci ´on cambia. Estos se describen a continuaci ´on en el Algoritmo 15 y Algoritmo 16 respectivamente.
Algoritmo 15initPop() — B
Descripci ´on: Algoritmo que describe el proceso de inicializaci ´on de la poblaci ´on.
Entrada:
• popSize: Tama ˜no de la poblaci ´on
• maxT rees= 5: N ´umero m ´aximo de ´arboles para cada individuo.
• maxLevel: N ´umero m ´aximo de niveles que un ´arbol puede tener.
• setF unctionsCol: Arreglo que contiene el conjunto de funciones para la dimensi ´on de color.
• setT erminalsCol : Arreglo que contiene el conjunto de terminales para la dimensi ´on de color.
• setF unctionsF lw : Arreglo que contiene el conjunto de funciones para generar operadores de correcci ´on de flujo.
• setT erminalsF lw: Arreglo que contiene el conjunto de terminales para generar operadores de correcci ´on de flujo.
• setF unctionsF I : Arreglo que contiene el conjunto de funciones para la integraci ´on de ope- radores de correcci ´on de flujo.
• setT erminalsF I : Arreglo que contiene el conjunto de terminales parala integraci ´on de ope- radores de correcci ´on de flujo.
Variables:
• trees: N ´umero de ´arboles que componen al individuo.
Salida:pop: Poblaci ´on generada aleatoriamente
Inicio
1: fori←1topopSizestep1do
2: trees←5
3: newInd←0
4: newInd.tree(1)←makeT ree(setF unctionsCol, setT erminalsCol, maxLevel)
5: fort←2to4step1do
6: newInd.tree(t)←makeT ree(setF unctionsF lw, setT erminalsF lw, maxLevel)
7: end for
8: newInd.tree(5)←makeT ree(setF unctionsF I, setT erminalsF I, maxLevel)
9: pop(i)←newInd
10: end for 11: returnpop
Algoritmo 16Evaluaci ´on de aptitud — B
Descripci ´on: Algoritmo del proceso de evaluaci ´on de aptitud.
Entrada:
• ind: Arreglo que representa un individuo de la poblaci ´on.
Variables:
• im: Arreglo que almacena la secuencia de im ´agenes.