DETECCIÓN CARA - MATLAB CÓDIGO Vamos a ver la forma de detectar la cara, la nariz, la boca y los ojos utilizando el MATLAB clase incorporada y función. Sobre la base de Viola-Jones algoritmo de detección de rostros, la caja de herramientas del sistema de visión por computador contiene Sistema vision.CascadeObjectDetector objeto que detecta objetos basados en el algoritmo antes mencionado. Requisito: Visión por computador System Toolbox
CARA DE DETECCIÓN: borrar todo clc % Detectar objetos usando Viola-Jones Algoritmo % Para detectar Face FDetect = vision.CascadeObjectDetector; % Lee la imagen de entrada I = imread ( 'HarryPotter.jpg' ); % Devuelve valores Cuadro delimitador basados en el número de objetos BB = paso (FDetect, I); figura, imshow (I); mantenga el para i = 1: tamaño (BB, 1) rectángulo ( 'Position' , BB (i, :), 'LineWidth' , 5, 'LineStyle' , '-' , 'EdgeColor' , 'r' ); final título ( 'Detección de caras' ); mantener fuera ;
El paso (Detector, I) devuelve el valor de cuadro delimitador que contiene [x, y, alto, ancho] de los objetos de interés. = BB 52 38 73 73 379 84 71 71 198 57 72 72
NARIZ DE DETECCIÓN: % Para detectar la nariz NoseDetect = vision.CascadeObjectDetector ( 'nariz' , 'MergeThreshold' , 16);
BB = paso (NoseDetect, I); figura, imshow (I); mantenga el para i = 1: tamaño (BB, 1) rectángulo ( 'Position' , BB (i, :), 'LineWidth' , 4, 'LineStyle' , '-' , 'EdgeColor' , 'b' ); final título ( 'Detección Nose' ); mantener fuera ;
EXPLICACIÓN:
Para denotar el objeto de interés como "nariz", el argumento de "nariz" se pasa. vision.CascadeObjectDetector ( 'nariz' , 'MergeThreshold' , 16);
La sintaxis predeterminada para la detección de la nariz: vision.CascadeObjectDetector ( 'nariz' ); Sobre la base de la imagen de entrada, podemos modificar los valores por defecto de los parámetros pasados a vision.CascaseObjectDetector. Aquí el valor por defecto para ' MergeThreshold 'es 4. Cuando el valor por defecto para ' MergeThreshold se usa ', el resultado no es el correcto. Aquí hay más de una detección en H ermione.
Para evitar la detección múltiple alrededor de un objeto, el 'MergeThreshold valor "se puede anular.
BOCA DE DETECCIÓN: % Para detectar la boca MouthDetect = vision.CascadeObjectDetector ( 'Boca' , 'MergeThreshold' , 16); BB = paso (MouthDetect, I); figura, imshow (I); mantenga el para i = 1: tamaño (BB, 1) rectángulo ( 'Position' , BB (i, :), 'LineWidth' , 4, 'LineStyle' , '-' ,'EdgeColor' , 'r' ); final título ( 'Detección boca " ); mantener fuera ;
OJO DE DETECCIÓN: % Para detectar Ojos EyeDetect = vision.CascadeObjectDetector ( 'EyePairBig' ); % Leer la imagen de entrada I = imread ( 'harry_potter.jpg' ); BB = paso (EyeDetect, I);
figura, imshow (I); rectángulo ( 'Position' , BB, 'LineWidth' , 4, 'LineStyle' , '' ,'EdgeColor' , 'b' ); título ( 'Detección Eyes' ); Ojos = imcrop (I, BB); figura, imshow (Ojos);
Imagen cosechada
Voy a discutir más sobre la detección de objetos y cómo entrenar detectores para identificar objeto de nuestro interés en mis próximas entradas. Sigue leyendo para obtener actualizaciones. También te recomendamos: TENIS DE MESA BOLA DE DETECCIÓN-MATLAB CÓDIGO:
Calculadora GUI simple en MATLAB Pintar Aplicación que utiliza el concepto bwlabel LinkWithin
Al igual que la página "PROCESAMIENTO DE IMAGEN" Etiquetas: Sistema de Visión por Computador Sus reacciones:
12 comentarios: Rohini Bhargava dijo ... Tengo MATLAB de la versión R2010a que no tiene el sistema de visión por ordenador toolbox.How para detectar los ojos, la boca, la nariz, en ese caso?
16 de septiembre 2013 a las 18:58
Aaron Ángel dijo ... @ Rohini Bhargava
Necesita instalar 'caja de herramientas de sistema de visión por ordenador'. Para obtener más información, visite http://www.mathworks.in/products/computervision/. 22 de septiembre 2013 en 12:14a.m.
Praga Deesan dijo ... @ AaronAngel_ hi ... estoy haciendo un mini proyecto sobre matlab .... pls que me ayude ... i necesidad de capturar una imagen, reconocer el cliente, mostrar sus nombres.
30 de septiembre 2013 a las 13:32
Mitesh Ochaney dijo ... i hav versión matlab 7. ¿Cómo se realiza el reconocimiento de rostros en eso .. por favor ayuda ..
02 de octubre 2013 a las 14:36
Gul Sayyar Ali dijo ... some0ne puede decirme cómo instalar la caja de herramientas vivsion equipo
04 de octubre 2013 a las 11:00 AM
nishant agrawal dijo ... Estoy haciendo un projct importante en matlab ... PLZ me dicen cómo campare o reconocer la imagen capturada con la imagen almacenada en la base de datos y se mostrará el nombre
16 de octubre 2013 a las 22:43
nishant agrawal dijo ... estoy haciendo mi proyecto importante en matlab .. PLZ me dicen cómo campare o reconocer la imagen capturada con la imagen almacenada en la base de datos y se mostrará el nombre después de la adaptación exitosa ...
16 de octubre 2013 a las 22:48
Saxena Hidangmayum dijo ... thnk u mucho .... me preguntaba cómo detectar los rasgos faciales ..... es interesante.
31 de octubre 2013 a las 18:42
pallavi Sharma dijo ... @ nishant agrawal haan año ye él humein samajh nhe aa tujhe rhe pta chale para responder Zarur karna Yaad sí bhoolna estera .....
07 de noviembre 2013 a las 13:14
^ ^ dijo ...
Estimado amigo cuál es su principio en el ur boca y la detección de los ojos? 13 de noviembre 2013 a las 15:32
^ ^ dijo ...
Estimado amigo Qué teoría o principio en su boca y los ojos? Me quieren hacer la investigación en esta área gracias más ^ ^ 13 de noviembre 2013 a las 15:36
mae nak dijo ... cómo separar el ojo izquierdo y el ojo derecho?
14 de noviembre 2013 a las 9:28 AM
Captura y guarda Frames utilizando Webcam Código matlab
clc;% despejar la ventana de comandos n = input ('Introduzca el número de fotos que se deben tomar:'); intervel = input ('Introduzca el tiempo (segundos) entre fotos succeessive:'); PhotoSave = input ('¿Te que desee guardar los archivos (y / n): ',' s '); disp ('Por favor, espere ...'); outputFolder = fullfile (cd, "bastidores"); si ~ existir (outputFolder, 'dir') mkdir (outputFolder); finales obj = videoinput ('WinVideo', 1); vista previa (obj); disp ('Presione Enter para iniciar después de la inicialización de la webcam.'); pausa; disp ('El primer disparo se adoptado después de 1 segundo') ; pause (1); para i = 1: n = img getsnapshot (obj); imagen (img); if (PhotoSave == 'y') outputBaseFileName = sprintf ('fr% d.png', i); outputFullFileName = fullfile (outputFolder, programa haya pasado con éxito las fotos ');disp ('Hecho').;
disculpas por retraso, intentó que el código puede entender lo que el cultivo no pero conseguir los errores en la salida del reproductor de vídeo (no puede cambiar el tamaño de la entrada 1) clc;% ventana de comando Borrar. claro;% Borrar todas las variables. cerrar todos;% Cierre todas las ventanas de figuras excepto las creadas por imtool. área de trabajo; % Crear un objeto detector en cascada. Esta ustilises Visión por Computador Herramientas faceDetector = vision.CascadeObjectDetector (); % Leer un fotograma de vídeo y ejecutar el detector de caras. Encuentra procedimiento para interrogar al lado % Fram en directo desde una cámara web. BBOX = cuadro de límite que se puede utilizar como % Cordinates a imgcrop videoFileReader = vision.VideoFileReader ('tilted_face.avi'); VideoFrame = paso (videoFileReader); BBOX = paso (faceDetector, VideoFrame); % Reducción de la superficie roi sólo a los ojos eyeDetector = vision.CascadeObjectDetector ('EyePairSmall'); faceImage = imcrop (VideoFrame BBOX); eyebbox = paso (eyeDetector, faceImage); % Make relavant a enmarcar para BBOX originales eyebbox (1,1:2) = eyebbox (1,1:2) + BBOX (1,1:2); Imagen% refferrenced de arriba cruzando positiva izquierda y hacia abajo x = eyebbox (1); y = eyebbox (2); W = eyebbox (3); h = eyebbox (4); bboxPolygon = [x, y, x + w, y, x + w, y 2 * h, x, y 2 * h]; eyebbox = [x-1, y-1, eyebbox (3), 2 * (eyebbox (4))]; % Establece eyebbox original a nuevas dimensiones bbobPolygon incluir en esquina % Detectar % Dibuja el cuadro delimitador devuelto alrededor del rostro detectado. todas las pantallas % Puede ser comentado, pero para la licencia de prueba en shapeInserter = vision.ShapeInserter ('Forma', 'Polígonos', 'BorderColor', 'Custom', ... 'CustomBorderColor', [255 255 0]); VideoFrame = paso (shapeInserter, VideoFrame bboxPolygon); figura; imshow (imcrop (VideoFrame (eyebbox))); título ('Eyes detectados'); % Recortar la región de la imagen que contiene la cara, y detectar la % Puntos de función dentro de él. tener esto en algoritmos roi BBOX dividido en ???% Rgb rframe = (:,:, 1); gframe = (:,:, 2); bframe =?????? (:,:, 3); cornerDetector = vision.CornerDetector ('El método', ... 'Valor propio mínimo (Shi y Tomasi)'); puntos = paso (cornerDetector, rgb2gray (imcrop (VideoFrame eyebbox)));% Nombre, Valor BBOX cambiado de eyebox % Las coordenadas de los puntos de característica son con respecto a la recortada % Región. Tienen que ser traducido de nuevo en la imagen original % Sistema de coordenadas. = puntos dobles (puntos); puntos (:, 1) = puntos (:, 1) + doble (eyebbox (1)); puntos (:, 2) = puntos (:, 2) + doble (eyebbox (2)); % Muestra los puntos detectados. markerInserter = vision.MarkerInserter ('Forma', 'Plus', ... 'BorderColor', 'Blanco'); VideoFrame = paso (markerInserter, VideoFrame puntos); % Figura, imshow (VideoFrame), título ("características detectadas ');
% Crear un seguidor del punto y habilitar la restricción de error bidireccional para % Hacerlo más robusto en presencia de ruido y el desorden. pointTracker = vision.PointTracker ('MaxBidirectionalError', 6); % Inicializar el rastreador con las ubicaciones de los puntos iniciales y la inicial Fotograma de vídeo%. inicializar (pointTracker, dobles (puntos), rgb2gray (VideoFrame)); VideoInfo = info (videoFileReader); videoPlayer1 = vision.VideoPlayer ('Position', ... [100 100 videoInfo.VideoSize (01:02) 30]); geometricTransformEstimator = vision.GeometricTransformEstimator (... 'PixelDistanceThreshold', 4 'Transformar', 'similitud no reflexiva'); % Realizar una copia de los puntos que se utilizará para el cálculo de la media geométrica Transformación% entre los puntos de la anterior y de los marcos actuales oldPoints = doble (puntos); mientras que ~ isDone (videoFileReader) % Obtener el siguiente marco VideoFrame = paso (videoFileReader); % Seguimiento de los puntos. Tenga en cuenta que algunos puntos se pueden perder. [Puntos, isFound] = paso (pointTracker, rgb2gray (VideoFrame)); visiblePoints = puntos (isFound, :); oldInliers = oldPoints (isFound, :); si ~ IsEmpty (visiblePoints) % Calcula la transformación geométrica entre los antiguos puntos % Y los nuevos puntos. [Xform, geometricInlierIdx] = paso (geometricTransformEstimator, ... dobles (oldInliers), dobles (visiblePoints)); % Elimina los valores atípicos visiblePoints = visiblePoints (geometricInlierIdx, :); oldInliers = oldInliers (geometricInlierIdx, :); % Aplicar la transformación de la caja de contorno boxPoints = [remodelar (bboxPolygon, 2, 4) ', los (4, 1)]; boxPoints = boxPoints * xform; bboxPolygon = Reformar (boxPoints ', 1, Numel (boxPoints)); % Inserte un cuadro de límite alrededor del objeto rastreado VideoFrame = paso (shapeInserter, VideoFrame bboxPolygon); tempx = bboxPolygon; Tempy = bboxPolygon; tempx (01:02: fin) = [];% extrae los valores de x Tempy (02:02: fin) = [];% extraacts los valores de y % MaxDiffX = rango (tempx); rightColumn = max (tempx); leftcolumn = min (tempx); % MaxDiffY = rango (Tempy); Bottomline = max (Tempy); TOPLINE = min (Tempy); width = (línea de fondo - Topline + 1);% Altura en píxeles. conmutada éstos alrededor y funciona Altura = (rightColumn - leftcolumn + 1); Ancho% en píxeles % Pantalla rastreado puntos VideoFrame = paso (markerInserter, VideoFrame visiblePoints); VideoFrame = (imcrop (VideoFrame [Topline, leftcolumn, anchura, altura])); % Figura, imshow (subimagen), título ("características detectadas '); % Restablecer los puntos oldPoints = visiblePoints; consignas (pointTracker, oldPoints); final
% Muestra el cuadro de video con anotaciones utilizando el objeto de reproductor de video el paso (videoPlayer1, VideoFrame); % Paso (videoPlayer1, cutvideoFrame); final % Limpie liberación (videoFileReader); liberar (videoPlayer1); liberación (geometricTransformEstimator); liberación (pointTracker); Daniel el 27 de enero 2013 Enlace
así que estoy detectando los ojos y el dibujo cuadro delimitador alrededor de los ojos y la nariz, que es el área que estoy interesado pulg Tengo que recortar cada fotograma (de entrada de vídeo / cámara web en vivo) a esta caja para depurar el siguiente nivel de mi código. Porque yo estoy usando la transformación geométrica entre los puntos seguidos de un fotograma a otro es posible el uso de estos datos y hacer una transformada inversa en la región recuadro de delimitación de interés solamente. Este se envía entonces a un objeto de reproductor de vídeo. lo siento por ser un novato tal, lo que tengo que hacer con los datos después de esto es la parte principal de la obra que estoy haciendo y puedo entender esa parte es precisamente este seguimiento y de recorte que me está causando el dolor de cabeza. Gracias por vosotros los pacientes y cualquier ayuda es muy apreciada Dan
Detección de rostros parte humana usando MATLAB Publicado por SkHacker , 23 de abril 2013 · 1943 visitas
humano rostro detección matlab
Código de detección de rostros Matlab La
siguiente exampes matlab muestra cómo implementar la detección de rostros en Matlab.
Descarga los códigos fuente del apego lbp_new
urnas el local de la imagen patrón binario o LBP histograma de una imagen .% J = LBP ( I , R , N , CARTOGRAFÍA , MODO ) devuelve un local de patrón binario % de imagen codificada o el local de patrón binario histograma de una intensidad % imagen que yo . Los códigos de LBP se calculan utilizando los puntos de muestreo N en un % circunferencia de radio R y el uso de tabla de asignación definida por CARTOGRAFÍA .% Ver el Getmapping función para diferentes asignaciones y usar 0 para % sin mapeo . Posibles valores para MODO son % 'h' o 'hist' para obtener un histograma de códigos LBP % 'nh' para obtener un histograma normalizado % De lo contrario una imagen de código de LBP se volvió .%% J = LBP ( I ) devuelve el original ( básico ) histograma LBP de la imagen I %% J = LBP ( I , SP , CARTOGRAFÍA , MODO ) calcula los códigos LBP utilizando n de muestreo % puntos definidos en ( n * 2 ) matriz SP . Los puntos de muestreo deberán % definido en torno a la histograma en ( 8 , 1 ) vecindad % % usando uniforme código de la imagen utilizando los puntos de muestreo en SP % % y no la cartografía . Ahora H2 es igual al histograma % % de de entrada dimensiones de la imagen de entrada . [ YSIZE Código de LBP
cada código de LBP cada código de LBP se computa dentro de un bloque de tamaño origen ( 0 , 0 ) en el blockorigy = 1 suelo ( min ( miny , 0 )); origx = 1 - suelo ( min ( descarada , 0 ));% mínimo tamaño permitido para la imagen de entrada depende % del radio de la LBP utilizado operador . si ( xsize < bsizex | | ysize < bsizey ) error ( "Demasiado pequeña imagen de entrada debe ser de al menos (2 * radio 1) x (2 * Radio 1). ' ); finales % Calcular dx y dy , dx = xsize - bsizex ; dy = ysize - bsizey ;% Llenar la matriz de píxeles central C . C = imagen ( origy : origy + dy , origx : origx + dx ); d_C = doble ( C ); papeleras = 2 ^ vecinos ;% Inicializar la matriz resultado con ceros . resultado = ceros ( dy + 1 , dx + 1 );% Calcular el código LBP imagefor i = 1 : neighborsy = spoints ( i , 1 ) + origy ; x = spoints ( i , 2 ) + origx ;% Calcular pisos , ceils y rondas para la datatypesN = imagen ( ry : ry + dy , rx : rx + dx ); D = N > = C ; más % interpolación necesaria , use doble tipo imagesty = y - fy ; tx = x - fx ;% Calcular los pesos de interpolación . w1 = ( 1 - tx ) * ( 1 - ty ); w2 = tx * ( 1 - ty ); w3 = ( 1 - tx ) * ty ; w4 = tx * ty ;% Compute interpolado pixel matriz de resultados . v = 2 ^ ( i - 1 ); resultado = resultado + v * D ; fines % Aplicar mapeado si lo es definedif histograma si el modo matriz
GetMultiscaleLBP
Histograma LBP % de entrada de imagen : Imagen de la extracción de características % BlockSize : el tamaño de cada bloque % patternMapping : el mapeo de los patrones LBP % Rs : el radio de multiescala % Sal : los barrios de multiescala % BoundaryFlag : dos tipos de selección para lidiar con nargin effectif límite < 2BlockSize = [ 32 , 32 ]; endif nargin < 3 Rs = [ 4 , 3 , 2 ]; % La radio es desde pequeño para bigendif nargin < 4P = [ 8 , 8 , 8 ]; endif nargin < 5for i = 1 : longitud ( Sal ) patternMapping { i } = Getmapping ( Sal ( i ), 'u2' ); % Obtener mapeo LBP para diferentes radiusesendendfor i = 1 : longitud ( Sal ) patternNum ( i ) = max ( patternMapping { i } ); nargin endif < 6BoundaryFlag = 1 ; % Como el tamaño efectivo del mapa LBP es differrent para radios differernt , algunas regiones de contorno podrían no proporcionan LBP para radio grande .% BoundaryFlag = 1 para mantener región límite , BoundaryFlag = 0 para la eliminación de límite mapeo de diferente radiusesfor mapa de gran radio , y
definir el patrón de estos límites píxeles % como no patrones uniformes para más Mapa LBP y hacer todos los píxeles como no - uniforme patrón de la central de mapeo para diferentes radios y eliminar regionsfor límite
Getmapping
% Getmapping devuelve una tabla de asignación de códigos de LBP .% MAPEO = Getmapping ( MUESTRAS , MappingType ) devuelve un mapeo para % códigos LBP en un barrio de muestreo MUESTRAS % puntos . Posibles valores para MappingType son % 'u2' para LBP uniforme % 'ri ' para la rotación - LBP invariante % 'riu2' de rotación uniforme - invariante contiene una rotación - uniforme invariante de los patrones en la LBP resultante leftnumt = suma ( bitget ( BITXOR ( i , j ), 1 : muestras )); % número de 1 -> 0 y % 0 -> 1 transiciones % en binario string % x es igual al % el número r < rmrm = r ; endendif tmpMap ( rm + 1 ) < 0tmpMap ( rm + 1 ) = Newmax ; Newmax = Newmax + 1 ; endmapping ( i + 1 ) = tmpMap ( rm + 1 ); endendif
distMATChiSquare
% distMATChiSquare calcula la disimilitud entre muestras de entrenamiento y una muestra de ensayo % DV = distMATChiSquare ( tren , prueba ) devuelve el vector distancia entre muestras de entrenamiento y una muestra de prueba .% La entrada de "tren" es un * matriz d , y cada fila de la misma representan uno % muestra de entrenamiento . La "prueba" es un 1 * d
Democode
% Muestra códigos para cara
TLDA_single
PolyU Palmprint
función del Vector Propio = TLDA_single ( A , opciones , Dim )% Una matriz de la imagen , el tamaño es m * n * N % N indica el número de imágenes y es igual al número de clases % m y n tienen el significado fila y columna de la imagen , respectivamente .% Opciones - Struct valor en Matlab . Los campos de opciones % que pueden ser establecidos :% k ---determins cómo construir el Con_A utilizando el correspondiente % imagen , el predeterminado valor es 3 ;% Dim --- La dimensionalidad de la reducida = Gb + (class_mean - GLOBAL_MEAN) ' * ( class_mean GLOBAL_MEAN ); final [ vector propio , Eigenvalue ] = AIE ( inv ( Gw ) * Gb , Dim );
Léame
% de cómo utilizar las demodataoptions codeload . k = 3 ;% predeterminado valueDim = 25 ; % manualmente ajustado de acuerdo a la imagen que utilizó [ Eigenvector ] = TLDA_single ( tr_dat , opciones , Dim ), para i = 1 : 38A (:, :, i ) = tr_dat (:,:, i ) * Eigenvector ; final
construct_image
función [ Con_A ] = construct_image ( A , opciones );% A denota la matriz de la imagen , el tamaño es m * n * N % N indica el número de imágenes % m y n son la fila y la columna de = A;
Archivos Adjuntos
matlab código de detección de rostros v1.rar (58.12KB) descargas: 270
matlab código de detección de rostros v2.rar (60.67KB) descargas: 306