Пример #1
0
def genStim(lesion=False):
    # initialize imgDict and labelDict
    imgDict={}
    labelDict={}
    
    commandVect=['line','triangle','quadrilateral','circle','twoLines','lineCircle']
    #
    commandDict={'line': 'util.genLineFig(16,16)',
 #                'rectangle':'util.genRectangleFig(8,3,3)',
                 'triangle':'util.genTriangleFig(16,3,3,5)',# last arg is always equal to 4k+5,the 5 are -sqrt(3) -sqrt(3)/2, 0, sqrt(3)/2, sqrt(3), which corresponds to the obtuse triangel, right triangle, isosceles triangle, right triangle, obtuse triangel. the 4n: between 0 to sqrt(3)/2, uniformly draw n points to be position of X, so you got some acute triangle and obtuse triangles.
                 'twoLines':'util.genTwoLines(16, 3, 3, 3)',
                 'circle':'util.genCircle(16)',
                 'lineCircle':'util.genLineCircle(16,5,5)',# last arg is always equal to 2k+1, these indicate the distance between the line and circle center. E.g., if k=1, it would be [0.5r, r, 1.5r].
                 'quadrilateral':'util.genQuadrilateralFig(16,3,3,3)'} # last arg is always equal to 2k+1,these are xOffset compare to the original rectangle, the 1 is 0, k is +- offset. E.g., if k=1, the offset factor is -0.5,0, +0.5 times the original horizontal half length.   
    sampleFig=util.geomFig()
    sizeN=sampleFig.sizeN
    lesionRange=range((sizeN+1)/2-3,(sizeN+1)/2+3)
    lesionVect=[(i,j) for i in lesionRange for j in lesionRange]
    inputStatsDict={}
    for command in commandVect:
        labelDictCurr,imgDictCurr=eval(commandDict[command])
        if lesion==True:
            for key in imgDictCurr.keys():
               imgDictCurr[key][zip(*lesionVect)[0],zip(*lesionVect)[1]]=0
            
        imgDict.update(imgDictCurr)
        labelDict.update(labelDictCurr)
        
        mySubType=[str(v['subType']) for k, v in labelDictCurr.iteritems()]
        inputStatsDict[command]=[len(labelDictCurr),collections.Counter(mySubType)]
    inputStatsDict['all']=sum([i[0]  for i in inputStatsDict.values()])
    print inputStatsDict
    # generate grandIndex
    i=0
    for item in labelDict:
        labelDict[item]['grandIndex']=i
        i +=1
    # save py dict    
    pickle.dump( imgDict, open( "imgDict.p", "wb" ) )
    pickle.dump( labelDict, open( "labelDict.p", "wb" ) )
    pickle.dump( inputStatsDict, open( "inputStatsDict.p", "wb" ) )
    # save mat for matlab
    scipy.io.savemat('imgDict.mat', {'imgDict': imgDict})
    scipy.io.savemat('labelDict.mat', { 'labelDict': labelDict})
Пример #2
0
def genStim_test_train(testSize=0.25, lesion=False):
    # initialize imgDict and labelDict
    imgDict_train         = {}
    imgDict_test          = {}
    labelDict_train       = {}
    labelDict_test        = {}
    inputStatsDict_train  = {}
    inputStatsDict_test   = {}

    commandVect=['line','triangle','quadrilateral','circle','twoLines','lineCircle']
    #
    commandDict={'line': 'util.genLineFig(16,16)',
 #                'rectangle':'util.genRectangleFig(8,3,3)',
                 'triangle':'util.genTriangleFig(16,3,3,5)',# last arg is always equal to 4k+5,the 5 are -sqrt(3) -sqrt(3)/2, 0, sqrt(3)/2, sqrt(3), which corresponds to the obtuse triangel, right triangle, isosceles triangle, right triangle, obtuse triangel. the 4n: between 0 to sqrt(3)/2, uniformly draw n points to be position of X, so you got some acute triangle and obtuse triangles.
                 'twoLines':'util.genTwoLines(16, 3, 3, 3)',
                 'circle':'util.genCircle(16)',
                 'lineCircle':'util.genLineCircle(16,5,5)',# last arg is always equal to 2k+1, these indicate the distance between the line and circle center. E.g., if k=1, it would be [0.5r, r, 1.5r].
                 'quadrilateral':'util.genQuadrilateralFig(16,3,3,3)'} # last arg is always equal to 2k+1,these are xOffset compare to the original rectangle, the 1 is 0, k is +- offset. E.g., if k=1, the offset factor is -0.5,0, +0.5 times the original horizontal half length.   
    
    sampleFig=util.geomFig()
    total_len = 0
    sizeN=sampleFig.sizeN
    lesionRange=range((sizeN+1)/2-3,(sizeN+1)/2+3)
    lesionVect=[(i,j) for i in lesionRange for j in lesionRange]    

    for command in commandVect:
        labelDictCurr, imgDictCurr=eval(commandDict[command])
        if lesion == True:
            for key in imgDictCurr.keys():
                imgDictCurr[key][zip(*lesionVect)[0],zip(*lesionVect)[1]] = 0

        # train test split, for evenly splitting among each category
        # Splitting the data into training and testing
        imgDict_train_keys, imgDict_test_keys, labelDict_train_keys, labelDict_test_keys = train_test_split(imgDictCurr.keys(),
                                                                                                            labelDictCurr.keys(),
                                                                                                            test_size=testSize,
                                                                                                            random_state=42)
        print len(imgDict_train_keys), len(imgDictCurr.keys()), len(labelDict_train_keys), len(labelDictCurr.keys())
        train_len = len(imgDict_train_keys)
        total_len += train_len
        # Re insert the splitted keys to train and test dicts
        imgDict_train_curr   = {}
        imgDict_test_curr    = {}
        labelDict_train_curr = {}
        labelDict_test_curr  = {}
        for key in imgDict_train_keys:
            imgDict_train_curr[key] = imgDictCurr[key]
        for key in imgDict_test_keys:
            imgDict_test_curr[key] = imgDictCurr[key]
        for key in labelDict_train_keys:
            labelDict_train_curr[key] = labelDictCurr[key]
        for key in labelDict_test_keys:
            labelDict_test_curr[key] = labelDictCurr[key]

        imgDict_train.update(imgDict_train_curr)
        labelDict_train.update(labelDict_train_curr)
        imgDict_test.update(imgDict_test_curr)
        labelDict_test.update(labelDict_test_curr)

        mySubType_train = [str(v['subType']) for k, v in labelDict_train_curr.iteritems()]
        mySubType_test  = [str(v['subType']) for k, v in labelDict_test_curr.iteritems()]
        inputStatsDict_train[command] = [len(labelDict_train_curr), collections.Counter(mySubType_train)]
        inputStatsDict_test[command]  = [len(labelDict_test_curr), collections.Counter(mySubType_test)]

    inputStatsDict_train['all'] = sum([i[0]  for i in inputStatsDict_train.values()])
    inputStatsDict_test['all']  = sum([i[0]  for i in inputStatsDict_test.values()])

    # generate grandIndex
    i=0
    for item in labelDict_train:
        labelDict_train[item]['grandIndex'] = i
        i +=1
    i=0
    for item in labelDict_test:
        labelDict_test[item]['grandIndex'] = i
        i += 1
    # save py dict
    pickle.dump(imgDict_train, open("imgDict_train.p", "wb"))
    pickle.dump(labelDict_train, open("labelDict_train.p", "wb"))
    pickle.dump(imgDict_test, open("imgDict_test.p", "wb"))
    pickle.dump(labelDict_test, open("labelDict_test.p", "wb"))
    pickle.dump(inputStatsDict_train, open("inputStatsDict_train.p", "wb"))
    pickle.dump(inputStatsDict_test, open("inputStatsDict_test.p", "wb"))
    # save mat for matlab
    scipy.io.savemat('imgDict_train.mat', {'imgDict_train': imgDict_train})
    scipy.io.savemat('imgDict_test.mat', {'imgDict_test': imgDict_test})
    scipy.io.savemat('labelDict_train.mat', { 'labelDict_train': labelDict_train})
    scipy.io.savemat('labelDict_test.mat', { 'labelDict_test': labelDict_test})
    print "Total Length =", total_len
    return total_len