K

kosimac

Usuario (México)

Primer post: 30 jul 2017Último post: 5 ago 2017
2
Posts
692
Puntos totales
29
Comentarios
U
Utilizando MATLAB para ubicar rostros en 5 lineas de código
Ciencia EducacionporAnónimo7/30/2017

Bienvenidos Hoy aprenderemos a como ubicar rostros en una imagen utilizando Matlab La plataforma de MATLAB está optimizada para resolver problemas de ingeniería y científicos. El lenguaje de MATLAB, basado en matrices, es la forma más natural del mundo para expresar las matemáticas computacionales. en este caso visión por computadora. Matlab se basa en Toolbox's los cuales son agregados que contiene funciones ya hechas para diferentes áreas de la ciencia, desde bioinformática, procesamiento de señales, hasta visión por computadora y redes neuronales. En este post usaremos el Toolbox de vision por computadora, este nos da diferentes herramientas para el procesamiento de imágenes . El programar en MATLAB es bastante facil para las personas que están familiarizados con scripts, solamente tenemos que crear un nuevo archivo .m asociarle un nombre y ya podremos realizar nuestros scripts fácilmente. Para ubicar un rostro necesitaremos primero una imagen de un rostro en este caso utilizare esta la imagen anterior es parte de una base de datos facial conocida como PAL Para iniciar crearemos un nuevo archivo .m lo llamare FaceBasic y escribiremos el siguiente código FDetect = vision.CascadeObjectDetector('FrontalFaceCART'); B = imread('TMWfemale21-2neutral.bmp'); bboxesface = step(FDetect,B); RGB = insertObjectAnnotation(B,'rectangle',bboxesface,'Rostro-Taringa','FontSize',18); imshow(RGB) En la primera linea de código creamos el clasificador de rostros , este nos devuelve un objeto que será útil posteriormente.Después leemos la imagen en la que queremos ubicar el rostro. En la linea numero 3 ubicamos en la imagen B el rostro o posibles rostros que contenga la imagen, este método step devuelve una matriz de M x N donde M es el numero de filas (caras) y N son 4 datos (x,y,anchura y altura de la imagen),como dos últimos pasos agregamos una anotación ala imagen , la anotación es rectangular es donde marcaremos el rostro , le asignamos un titulo y por ultimo mostramos la imagen con imshow. como producto final obtendremos la siguiente imagen Y eso es todo, facilmente podemos adentrarnos al mundo de la visión por computadora utilizando MATLAB , cualquier duda envíeme un MP o en los comentarios Fin del post espero que les sirva y compartan TARINGA Inteligencia Colectiva No olviden dejar sus puntos

89
0
Programe un algoritmo genetico en MATLAB
Programe un algoritmo genetico en MATLAB
Ciencia EducacionporAnónimo8/5/2017

Bienvenidos hoy hablaremos sobre algoritmos genéticos Cuando hablamos de algoritmos genéticos, hay que hablar de John Holland que en 1962 asienta las bases para sus posteriores desarrollos hasta llegar a lo que se conoce hoy por algoritmos genéticos. Un algoritmo genético es un método de búsqueda que imita la teoría de la evolución biológica de Darwin para la resolución de problemas. Para ello, se parte de una población inicial de la cual se seleccionan los individuos más capacitados para luego reproducirlos y mutarlos para finalmente obtener la siguiente generación de individuos que estarán más adaptados que la anterior generación. CodificacióndelasVariables Los cromosomas de alguna manera deberán contener información acerca de la solución que representa. La codificación se puede realizar de varias formas. La más utilizada es mediante una cadena de números binarios (1s o 0s). Pero también se puede realizar la codificación mediante números enteros o incluso cadenas de palabras. La elección de la codificación dependerá también del problema a resolver pues puede darse la situación en la que la resolución de un caso sea más óptimo el uso de una codificación basada en números reales mientras que esa codificación complique la solución en otro caso. Así pues hay que estudiar la codificación más óptima según el caso que se esté estudiando. Algoritmo basico para un algoritmo genético Inicio (1) t = 0; inicializar P(t); evaluar P(t); Mientras (no se cumpla la condición de parada) hacer Inicio(2) t= t+1 seleccionar P(t) desde P(t-1) recombinar P(t) mutación P(t) evaluar P(t) Final(2) Final(1) Ejemplo resolviendo la ruta mas corta que cruze todas las ciudades Como se vio en el algoritmo el primer paso es inicializar una población de individuos, en este caso son genes, traducidos a la computación vectores en este caso, la representación del gen será mediante números, cada numero debería representar una ciudad, las ciudades hipoteticamente hablando están relacionadas en un grafo cada arista tiene un valor que es el coste de ir de tal ciudad a tal ciudad , no lo puse por que no se vería en la imagen. un grafo anterior es la representación de una matriz de adyacencia en este caso de la siguiente matriz k=[ 0 29 20 21 16 31 100 12 4 31 18; 29 0 15 29 28 40 72 21 29 41 12; 20 15 0 15 14 25 81 9 23 27 13; 21 29 15 0 4 12 92 12 25 13 25; 16 28 14 4 0 16 94 9 20 16 22; 31 40 25 12 16 0 95 24 36 3 37; 100 72 81 92 94 95 0 90 101 99 84; 12 21 9 12 9 24 90 0 15 25 13; 4 29 23 25 20 36 101 15 0 35 18; 31 41 27 13 16 3 99 25 35 0 38; 18 12 13 25 22 37 84 13 18 38 0]; Una matriz de adyacencia describe la relación que existe entre cada nodo de un grado con otro nodo cada columna siendo los nodos por eso en la diagonal tiende a cero pues el nodo en relación con si mismo no tiene un costo. Empezamos con el código primero la generación de la población inicial pl=zeros(1,1); %creamos un arreglo del tamaño de las ciudades en este caso 11. [1,2,3,4,5,6,7,8,9,10,11] seed=[1:size]; % creacion de nuetra poblacion permutada %este ciclo nos genera una matriz de 11x150 donde serán 150 cromosomas diferentes que son %combinaciones del vector de 11 ciudades, en pocas palabras simples combinaciones for i=1:150 pob(i,:)= seed(randperm(length(seed))); end pobsize=length(pob); x=zeros(1,pobsize); %iniciamos a los padres que generaran otra población padres=zeros(10,size); después se realiza el proceso que replica el comportamiento de la evolución , los padres se van cruzando (fallan mas que los taringeros ) con otros cromosomas (padres igual aquí creo no vale el genero :V), posterior a esto, se realiza una mutación de un porcentaje pequeño de la población que resulto de la cruza , la mutación cambia en este caso algún cromosoma del gen (en este problema la mutación hace algún cambio entre posiciones ) , ya teniendo esto se realiza la agregación de los hijos resultantes de la cruza si como los mutados(deformes o genios jaja) y se procede a evaluar cada gen de la población utilizando una función fitness esta es la siguiente : %recibe c que es el cromosoma o gen y g que es la matriz de adyacencia y nos regresa un valor del coste total que recorre esa combinación de ciudades recordemos que queremos buscar la combinación o ruta que pase por todas las ciudades que cueste menos, entonces entre menos nos cueste es mejor la solucion. function=fitness(c,g) sigma=0; for i=1:length(c)-1 sigma=sigma+g(c(i),c(i+1)); end fit=sigma; end finalmente de evaluar la población se escogen los mejores y se procede a matar a los demás jajaja, se eliminan los cromosomas mas débiles y se dejan los mejores para que las próximas generaciones tengan mejores hijos y así sucesivamente hasta que el resultado del fitness sea el mejor. for k=1:alp for i=1:pobsize x(i)=fitness(pob(i,:),matrixAdj); end %seleccion por ruleta; x=x/sum(x); for i=1:pobsize*.50 a=rand; sig=0; for j=1:pobsize sig=sig+x(j); if sig>a padres(i,:)=pob(j,:); break; end end end sons=zeros(10,size); %cruza for i=1:2:pobsize*.50 ar1=randi([1,pobsize*.50],1,1); ar2=randi([1,pobsize*.50],1,1); [ch1,ch2]=OX(padres(ar1,:),padres(ar2,:)); sons(i,:)=ch1; sons(i+1,:)=ch2; end %mutacion len=length(sons); for j=1:4 a=randi([1,pobsize*.50],1,1); v=padres(a,:); sons(len+j,:)=v(randperm(length(v))); end len=length(pob); %add hujos to poblation for j=1:length(sons) pob(len+j,:)=sons(j,:); end temp=pob; %evaluacion for i=1:length(pob(:,1)) pob(i,size+1)=fitness(temp(i,:),matrixAdj); end temp=zeros(10,size); %sort poblation sortPop=sortrows(pob,size+1); for i=1:pobsize temp(i,:)=sortPop(i,1:size); end pob=temp; pl(k)=sortPop(1,size+1); end pob=pob(1,:); end Para finalizar utilizando la matriz de adyacencia que mencionamos al principio y aplicando el algoritmo mencionado nos devuelve una ruta siguiente 7 2 11 9 1 8 3 5 4 10 6 nos quiere decir que empezar por la ciudad 7 pasar las ciudades mencionadas 2,11,9 etc y finalizar en la ciudad 6 nos da la combinación mas optima, se puede ver en la siguiente figura la ruta. las lineas rojas marcan la ruta que debe seguir para realizar el recorrido. Les comparto el código completo en Github https://github.com/Cosijopiii/AlgoritmoGeneticoTSP también si quieren pueden pasarse por mis anteriores post's https://www.taringa.net/posts/ciencia-educacion/19966221/Utilizando-MATLAB-para-ubicar-rostros-en-5-lineas-de-codigo.html https://www.taringa.net/posts/ciencia-educacion/19970010/Programe-un-red-autoasociativa-Hopfield-en-JAVA.html Cualquier duda o comentario escríbanlo abajo, con gusto repondere no olvides dejarme unos puntos y recomendarme , seguiré con esta serie de post un poco técnicos pero interesantes.

603
50
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.