cup1_1.bmp
pos.txt:
cup1_1.bmp 2 145 143 49 70 192 132 49 70
neg.txt:
cup1_1.bmp 1 0 0 49 70
cup1_1.bmp 1 0 132 49 70
cup1_1.bmp 1 10 0 49 70
cup1_1.bmp 1 10 132 49 70
cup1_1.bmp 1 50 50 49 70
cup1_1.bmp 1 20 122 49 70
cup1_1.bmp 1 100 0 49 70
cup1_1.bmp 1 300 132 49 70
cup1_1.bmp 1 200 200 49 70
cup1_1.bmp 1 250 132 49 70
Haartraining 的命令行参数如下:
-data<dir_name>存放训练好的分类器的路径名。
-vec<vec_file_name>正样本文件名(由trainingssamples 程序或者由其他的方法创建的)
-bg<background_file_name>背景描述文件。
-npos<number_of_positive_samples>,
-nneg<number_of_negative_samples>用来训练每一个分类器阶段的正/负样本。合理的值是:
-nPos = 7000;nNeg = 3000-nstages<number_of_stages>训练的阶段数。
-nsplits<number_of_splits>决定用于阶段分类器的弱分类器。
如果1,则一个简单的stump classifier 被使用。如果是2 或者更多,则带有number_of_splits 个内部节点的CART 分类器被使用。
-mem<memory_in_MB>预先计算的以MB 为单位的可用内存。内存越大则训练的速度越快。
-sym(default)-nonsym指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。
-minhitrate《min_hit_rate》每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate 的number_of_stages 次方。
-maxfalsealarm<max_false_alarm_rate>没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate 的number_of_stages 次方。
-weighttrimming<weight_trimming>指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9-eqw
-mode<basic(default)|core|all>选择用来训练的haar 特征集的种类。basic 仅仅使用垂直特征。all 使用垂直和45 度角旋转特征。-w《sample_width》-h《sample_height》训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同
neg1.txt is
cup1_1.bmp 10 0 0 49 70 0 132 49 70 10 0 49 70 10 132 49 70 50 50 49 70 20 122 49 70 100 0 49 70 300 132 49 70 200 200 49 70 250 132 49 70
but still has error
convert cup1_1.bmg to cup1_2.jpg as a gray-level image and try to resample again
Self-Quotient Image c++ code http://www.koders.com/cpp/fid709A923A4FE9D33DC7FDE4F176C53728C42AE659.aspx?s=Raman#L3
## log_open_IVF2.py : find the image's IVF
import cv
import os
# CvMat : cv.CV_8UC1
def log_image(CvMat):
(min_value, max_value, min_loc, max_loc) = cv.MinMaxLoc(CvMat)
log_mat = cv.CreateMat(32,32,cv.CV_32FC1)
mat1 = cv.CreateMat(32,32,cv.CV_8UC1)
mat2 = cv.CreateMat(32,32,cv.CV_32FC1)
mat3 = cv.CreateMat(32,32,cv.CV_32FC1) # final log matrix
tmp_mat = cv.CreateMat(32,32,cv.CV_32FC1)
cv.AddS(CvMat, 1.0, mat1)
cv.Convert(mat1, tmp_mat)
cv.Log(tmp_mat, log_mat)
cv.Set(mat2, 255.0/ max_value)
cv.Mul(log_mat, mat2, mat3)
return mat3
# CvMat : cv.CV_32FC1
def open_image(CvMat):
open_mat = cv.CreateMat(32,32,cv.CV_32FC1) # opening image
tmp_mat = cv.CreateMat(32,32,cv.CV_32FC1)
element = cv.CreateStructuringElementEx(3,3,0,0,cv.CV_SHAPE_RECT)
cv.MorphologyEx(CvMat, open_mat,tmp_mat ,element,cv.CV_MOP_OPEN)
return open_mat
# CvMat : cv.CV_32FC1
class Calculate_IVF():
def __init__(self,CvMat):
Counter=0
Sum_Intensity=0
AVG=0
IVF=0
for x in range(CvMat.rows-1):
for y in range(CvMat.cols-1):
Sum_Intensity +=CvMat[x,y]
Counter+=1
AVG=Sum_Intensity/Counter
for x in range(CvMat.rows-1):
for y in range(CvMat.cols-1):
IVF+=abs(CvMat[x,y]-AVG)
self.IVF=IVF
IVF_list=[]
dirname = os.getcwd() + "\\correct_face32"
for filename in os.listdir(dirname):
root, ext = os.path.splitext(filename)
im = cv.LoadImageM('correct_face32\\'+filename, cv.CV_LOAD_IMAGE_GRAYSCALE)
mat1 = cv.CreateMat(32,32,cv.CV_8UC1)
cv.Copy(im, mat1)
log_mat = cv.CreateMat(32,32,cv.CV_32FC1)
log_mat = log_image(mat1)
open_mat = cv.CreateMat(32,32,cv.CV_32FC1)
open_mat = open_image(log_mat)
(minVal, maxVal,minLOc, maxLoc) = cv.MinMaxLoc(open_mat)
open_mat_scale = cv.CreateMat(32,32,cv.CV_8UC1)
for x in range(32):
for y in range(32):
open_mat_scale[x,y] = round((open_mat[x,y]-minVal)/(maxVal-minVal)*255)
cv.SaveImage('log_open32\\'+root+'_open.JPG', open_mat_scale)
Reg = Calculate_IVF(open_mat)
IVF_list.append(Reg.IVF)
print max(IVF_list), min(IVF_list) #13947.2491802 355.002434
http://www.evernote.com/shard/s87/sh/9a0b7933-a6c8-45b1-8e25-ce49194c66dc/32ba2e6192bc385bc53f85d91338606a