Пример #1
0
print("... loading used configuration")
config = json.load(open(os.path.join(outfolder, "dnn_configuration.json"), "r"))

# loading test data
x_test, y_test = load_data("dataSauvola/test/", patch_size=patch_size, nb_random_patchs=5)

x_test = np.asarray(x_test, dtype=theano.config.floatX)  # We convert to float32 to
y_test = np.asarray(y_test, dtype=theano.config.floatX)  # compute on GPUs with CUDA


nTest = x_test.shape[0]  # number of test examples
nFeats = x_test.shape[1]  # number of features per input image
nLabels = y_test.shape[1]  # number of labels per groundtruth

nn = MultiLayerPerceptron([nFeats] + config["hidden_geometry"] + [nLabels], outputActivation=crino.module.Sigmoid)

nn.setInputs(T.matrix("x"), nFeats)
nn.prepare()
nn.setParameters(pickle.load(open("./results/learned_params.pck")))


for i in xrange(0, nTest):
    image = x_test[i].reshape(sqrt(nFeats), sqrt(nFeats))
    estimated_binarisation = nn.forward(x_test[i : i + 1])
    estimated_binarisation = threshold(estimated_binarisation)
    estimated_image = estimated_binarisation.reshape(sqrt(nFeats), sqrt(nFeats))
    gt = y_test[i].reshape(sqrt(nFeats), sqrt(nFeats))

    plt.subplot(2, 2, 1)
    plt.imshow(image, interpolation="nearest", cmap=plt.get_cmap("gray"), vmin=0.0, vmax=1.0)
def segmentation_ioda(imageHU):
	"""
		Effectue la segmentation à partir d'une image en HU.
	"""


	model_mat=sio.loadmat('./ioda_256/mean_model_256.mat')
	modele=model_mat['model']
	donnees_modele=modele[0,0]
	

	image=imageHU.__deepcopy__(imageHU)

	image=retirer_peau(image) #on retire la peau de la coupe

	masque_muscle=get_masque(image,-29,150)
	masque_muscle_resize=cv2.resize(masque_muscle,dsize=(256,256)) #interpolation des valeurs entre 0 et 1
	masque_muscle_resize[masque_muscle_resize>0.5]=1
	masque_muscle_resize[masque_muscle_resize<=0.5]=0



	image=humuscle(image) #on ne garde que ce qui se trouve dans la plage des muscles

	image=normalise(image) #on la normalise

	image=scipy.misc.imresize(image,0.5) #reduction en image 256*256
	image=normalise(image) 






	# --------------- recalage ----------------------
	#/
	#|

	imageTemp = cv2.resize(imageHU,dsize=(256,256))
	centre_lombaire_image_a_recaler=find_lumbar_center(imageTemp)
	range_param=np.array([[-15,15],[0,1]])

	m=image.shape[0]
	n=image.shape[1]

	matrice_recalage=recaler(image,donnees_modele,masque_muscle_resize,centre_lombaire_image_a_recaler[0:2],range_param,0,handle=False)


	matrice_recalage_inverse=np.linalg.inv(matrice_recalage)

	image=cv2.warpAffine(image,matrice_recalage_inverse[0:2,:],(n,m))


	#|
	#\

	boxMat=sio.loadmat('./ioda_256/box_256.mat')
	box=boxMat['infos']['box'][0][0]

	minY=box[0][0]-1
	maxY=box[0][1]
	minX=box[1][0]-1
	maxX=box[1][1]

	image=image[minX:maxX,minY:maxY] 

	#--------------- initialisation du réseau --------------------------


	print('Initialisation du réseau ...')
	theano.config.floatX='float64' #initialisation
	trained_weights = pickle.load(open('./ioda_256/learned_params_256.pck'))
	nFeats=trained_weights['geometry'][0]
	feats=nFeats
	nLabels=nFeats
	nHidden=trained_weights['geometry'][1]
	geometry=[nFeats, nHidden, nHidden, nFeats] # on utilise la géométrie du fichier qui contient les learned_params
	nn = MultiLayerPerceptron(geometry,outputActivation=crino.module.Sigmoid)
	nn.linkInputs(theano.tensor.matrix('x'), nFeats)
	nn.prepare(aPreparer=False) 
	nn.setParameters(trained_weights) 
	print('fin de l initialisation')

	# --------------------- segmentation ---------------------------
	print('Debut de la segmentation ...')

	x_test = np.zeros((1,nFeats))
	y_sortie = np.zeros((1,nFeats))
	x_test = np.asarray(x_test, dtype=theano.config.floatX) 
	x_test=image.reshape((1,feats),order='F')


	#---------------------------------forward---------------------------------

	y_sortie = nn.forward(x_test[0:1]) 
	y_sortie=normalise(y_sortie) 

	y_estim=np.zeros((157,229))
	y_estim=y_sortie.reshape((157,229),order='F') 


	y_256=np.zeros((256,256))
	y_256[45:202,17:246]=y_estim 

	
	sortie_recalee=cv2.warpAffine(y_256,matrice_recalage[0:2,:],(n,m))

	y_512=scipy.misc.imresize(sortie_recalee,2.) 

	y_512=normalise(y_512)


	
	masque=np.zeros((512,512))
	masque=np.asarray(masque,dtype=int)
	masque[y_512<0.2183]=0
	masque[y_512>=0.2183]=1
	

	print('Fin de la segmentation')


	return masque