def __init__(self,fileName): self.mask = imread(fileName) > 0 self.notMask = logical_not(self.mask) self.positives = count_nonzero(self.mask)*1.0 self.negatives = (self.mask.size - self.positives)*1.0
tp = count_nonzero(logical_and(self.mask,binary)) return fp,tp def getBlackWhiteFromBinary(img): return dstack((img,img,img)) if __name__ == '__main__': seterr(all='warn') skindata, nonskindata = loadmat('data/skin.mat')['sdata'].reshape((-1, 3)).astype(float128), loadmat('data/nonskin.mat')['ndata'].reshape((-1, 3)).astype(float128) iters = 10 show = False usekmeans = False gmmskin, gmmnonskin = gmmEM(skindata, 2, iters,show,usekmeans), gmmEM(nonskindata, 2, iters,show,usekmeans) img = imread('data/image.png').astype(float128) / 255.0 imshape = img.shape img = img.reshape((-1, 3)) skinp, nonskinp = gmmskin.getP(img), gmmnonskin.getP(img) res = skinp > nonskinp res = res.reshape((imshape[0],imshape[1])) res = logical_not(res) gt = GroundTruth('data/mask.png') fp, tp = gt.checkClassification(res) print "false positive ratio: ", fp*1.0/gt.negatives print "true positive ratio: ", tp*1.0/gt.positives res = getBlackWhiteFromBinary(res) pylab.figure() pylab.imshow(res) pylab.show()