es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Región facial extraída utilizando DLIB contiene ruido.

Saludos,
He estado intentando extraer algunas regiones de la cara.
En este caso (labio superior) utilizando Dlib, la cosa es que después de extraer el ROI (que parece perfecto) me di cuenta de que hay algo de ruido alrededor del ROI.
No puedo entender qué estoy haciendo mal y cómo resolver este problema.
Este es el código Python utilizado:

import cv2
import numpy as np
import dlib
import os
from scipy import ndimage, misc
import time

def extract_index_nparray(nparray):
index = None
for num in nparray[0]:
index = num
break
return index
img = cv2.imread(‘input_facial_image.jpg’)
img = cv2.resize(img, (512, 512))
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
mask = np.zeros_like(img_gray)
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(‘/facial-landmarks-recognition/shape_predictor_68_face_landmarks.dat’)

Cara 1

faces = detector(img_gray)
for face in faces:
landmarks = predictor(img_gray, face)
landmarks_points = []
for n in [48,49,50,51,52,53,54,64,63,62,61,60]:
x = landmarks.part(n).x
y = landmarks.part(n).y
landmarks_points.append((x, y))
points = np.array(landmarks_points, np.int32)
convexhull = cv2.convexHull(points)
# cv2.polylines(img, [convexhull], True, (255, 0, 0), 3)
cv2.fillConvexPoly(mask, convexhull, 255)

face_image_1 = cv2.bitwise_or(img, img, mask=mask)
cv2.imwrite(‘extracted_lips.jpg’, face_image_1)

La imagen extraída se ve así:
upper lips extracted image
Pero en los siguientes pasos de mi trabajo, me di cuenta de un ruido alrededor del labio superior, así que lo examiné y encontré unclean_upperlip.
¿Existe alguna forma de deshacerse del ruido durante la extracción del ROI o alguna técnica de procesamiento de imágenes para solucionar este problema?
Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hola,

    Gracias por compartir tu código y las imágenes resultantes. El ruido alrededor del labio superior extraído puede deberse al hecho de que el casco convexo no se ajusta perfectamente al contorno del labio. Una solución potencial es utilizar operaciones morfológicas para refinar la región del labio extraído y eliminar el ruido.

    Aquí tienes cómo puedes modificar tu código para aplicar la operación de cierre morfológico en la máscara y suavizar los bordes de la región del labio extraído:

    import cv2
    import numpy as np
    import dlib
    import os 
    from scipy import ndimage, misc
    import time
    
    def extract_index_nparray(nparray):
        index = None
        for num in nparray[0]:
            index = num
            break
        return index
    
    img = cv2.imread('input_facial_image.jpg')
    img = cv2.resize(img, (512, 512))
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    mask = np.zeros_like(img_gray)
    detector = dlib.get_frontal_face_detector()
    predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
    
    # Cara 1
    faces = detector(img_gray)
    for face in faces:
        landmarks = predictor(img_gray, face)
        landmarks_points = []
        for n in [48, 49, 50, 51, 52, 53, 54, 64, 63, 62, 61, 60]:
            x = landmarks.part(n).x
            y = landmarks.part(n).y
            landmarks_points.append((x, y))
       points = np.array(landmarks_points, np.int32)
       convexhull = cv2.convexHull(points)
       # cv2.polylines(img, [convexhull], True, (255, 0, 0), 3)
       cv2.fillConvexPoly(mask, convexhull, 255)
    
       # Aplicar operación morfológica de cierre para suavizar los bordes
       kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
       mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
    
       face_image_1 = cv2.bitwise_or(img, img, mask=mask)
       cv2.imwrite('extracted_lips.jpg', face_image_1)
    

    Puedes ajustar el tamaño del kernel utilizado para el cierre morfológico y experimentar con otras operaciones morfológicas para mejorar aún más los resultados.

    ¡Espero que esto sea útil! Avísame si tienes alguna otra pregunta.

Comments are closed.