2

ヌード検出アルゴリズム

  • 正規化
  • ゾーニング
  • 特徴抽出
  • SVM を使用した分類

以下の方法が使用されます

1.正規化: 最初の画像は .jpg 形式と256X256のサイズに変換されます。次に、YCbCr 色空間に変換されます。このために OpenCV python を使用します。コードは次のとおりです。

2.ゾーニング: 正規化された画像を3つのゾーンに分割します。これは、「画像のヌードは主に中央ゾーンにある」という仮定によるものです。

3.特徴抽出: このモジュールでは、画像は YCbCr であり、スキン ピクセルは範囲(0,133,77)、(255,173,127) のしきい値処理によってフィルター処理され、3 つのゾーンに分割されます。接続されたスキン ピクセルと合計ピクセルに対するスキン ピクセルの比率) および 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の特徴ベクトルを作成する方法.ヌードおよび非ヌード画像(私は5000枚の画像があります)を使用してトレーニングにSVMを使用し、次に検出に使用する方法.? どんな体でも私を提案できますか.

4

2 に答える 2

1
  1. オブジェクトである SVM を作成します。
  2. トレーニング画像で fit メソッドを使用して、SVM をトレーニングします。
  3. テスト/データを予測するには、predict メソッドを使用します。

コード:

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

機能 Vector X の場合、すべてのトレーニング データに対して機能を 1 つの np 配列にマージするだけです。

于 2013-11-05T08:47:34.413 に答える