在特征提取后使用SVM进行裸露检测算法

时间:2013-10-26 16:03:49

标签: opencv image-processing svm scikit-learn libsvm

裸露检测算法

  • 归一化
  • 分区
  • 特征提取
  • 使用SVM分类

使用以下方法

1.Normalization :第一张图片转换为.jpg格式,大小为256X256。然后将其转换为YCbCr色彩空间,为此我使用OpenCV python.Here是代码

2.Zoning :归一化图像然后分为三个区域。因为假设是“图像的裸体主要在中心区域中找到”。

3.特征提取:在此模块中,图像位于YCbCr中,皮肤像素通过阈值(0,133,77),(255,173,127)进行过滤,并分为然后为每个区域特征计算2个颜色特征(连接的皮肤像素的数量和皮肤像素与总像素的比例)和2个纹理特征(同质性和相关性)。纹理特征使用glcm计算(skimage.features模块) )。代码

import os
import numpy as np
import cv2
from cv2 import cv
import skimage.feature as sf
total_pixels=256.0*256.0

class normalize:
    def __init__(self,src,dst):
        self.src=src
        self.dst=dst+"_1.jpg"
    def resize(self):
        x,y=256,256
        src=cv2.imread(self.src,1)
        src=cv2.resize(src,(x,y))
        cv2.imwrite(self.dst,src)
        dst=cv2.imread(self.dst,1)
        return dst
"""Segmentation module is used to segment out skin pixels in YCrCb color space"""

def segmentation(src):
    img=src.copy()
    img=cv2.cvtColor(src,cv.CV_BGR2YCrCb)
    dst=cv2.inRange(img,(0,133,77),(255,173,127))
    return dst

"""Image Zoning and feature extraction module"""

class features:
    def __init__(self,src):
        self.zone1=src
        self.zone2=src[30:226,30:226]
        self.zone3=src[60:196,60:196]

    def createglcm(self,zone):
        return sf.greycomatrix(zone,[1],[0,np.pi/4,np.pi/2,-np.pi/2,-np.pi/4,np.pi*25/12],normed=True)

    def getCorrelation(self,glcm):
        return sf.greycoprops(glcm,'correlation')

    def getHomogeneity(self,glcm):
        return sf.greycoprops(glcm,'homogeneity')

    def getcolorfeatures(self,zone):
        contours, hierarchy = cv2.findContours(zone,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

        skin_pixel_connected=0 

        for i in range(len(contours)):
            skin_pixel_connected=skin_pixel_connected+cv2.contourArea(contours[i])

        return [skin_pixel_connected,skin_pixel_connected/total_pixels]

现在我已经检索了代码中给出的各种功能的列表。如何从python列表中为svm制作特征向量。如何使用SVM进行训练,使用裸体和非裸体图像(我有5000张图像),然后进行检测。任何人都可以建议我。

2 个答案:

答案 0 :(得分:1)

  1. 您创建了一个SVM objekt。
  2. 使用适合您训练图片的方法训练您的SVM。
  3. 使用预测方法预测您的测试/数据。
  4. 代码:

    from sklearn import svm
    clf = svm.SVC()
    clf.fit(X,y)
    clf.predict(X_test)
    

    对于功能Vector X,只需将每个列车数据的功能合并为一个np数组。

答案 1 :(得分:1)

交叉验证策略后,C = 100.00,gamma = 0.07

这是我的代码所看到的:

from sklearn.svm import SVC
classifier=SVC(kernel='rbf',C=100.0,gamma=0.07,cache_size=800)
classifier.fit(np.array(featurespace),np.array(classes))
classifier.predict(X_test)