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})
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