人脸肤色相似度检测——程序及运行结果

来源:互联网 发布:淘宝客推广专区在哪里 编辑:程序博客网 时间:2024/06/04 18:05


代码部分:


# -*- coding: utf-8 -*-# the limitimport cv2import mathfrom numpy import matimport numpy as npfrom skimage import data,filtersimport matplotlib.pyplot as plotfrom skimage.morphology import diskimport scipy.signal as signal                        img = cv2.imread("image/text.jpg")cv2.imshow('zhao',img)#转图片 RGB  到YCrCb 颜色空间image_YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)cv2.imshow('YCrCb',image_YCrCb)#肤色模型Cb_Mean = 117.4361Cr_Mean = 156.5599Cov00 = 160.1301Cov01 = 12.1430Cov10 = 12.1430Cov11 = 299.4574img_h = image_YCrCb.shape[0]img_w = image_YCrCb.shape[1]#创造矩阵#Sim = mat(zeros(img_h,img_w))Sim = []for i in range(img_h):    tmp = []    for j in range(img_w):        tmp.append(0)    Sim.append(tmp)        #计算肤色相似度print(Sim[3][1])for i in range(img_h):    for j in range(img_w):        Cr = image_YCrCb[i,j][1]  #Cr        Cb = image_YCrCb[i,j][2]  #Cb        tt = (Cb-Cb_Mean)*((Cb-Cb_Mean)*Cov11 - (Cr-Cr_Mean)*Cov10) + (Cr-Cr_Mean)*(-(Cb-Cb_Mean)*Cov01 + (Cr-Cr_Mean)*Cov00)        tt = (-0.5*tt)/(Cov00*Cov11-Cov01*Cov10)        Sim[i][j] = math.exp(tt)print(Sim[3][1])#中值滤波Sim = np.float32(Sim)   Sim = signal.medfilt2d(Sim,(3,3))  #MATLAB,haha #统计所有像素点的最大肤色相似度max = 0for i in range(img_h):    for j in range(img_w):        if(Sim[i][j]>max):            max = Sim[i][j]#各像素点的肤色相似度值归一化for i in range(img_h):    for j in range(img_w):        Sim[i][j] = Sim[i][j]/max#相似度值变换到[0,255]上,以灰度图像显示for i in range(img_h):    for j in range(img_w):        Sim[i][j] *= 255cv2.imshow('Sim',Sim)cv2.imwrite('grayface.jpg',Sim)    

 
运行结果:


原图:


程序处理:




偷笑可怜颖宝

原创粉丝点击