Je suis en train d'implémenter l'algorithme de Canny en utilisant Tensorflow (ceci est nécessaire pour utiliser les bordures comme une métrique d'évaluation, mais c'est hors sujet). L'une des étapes consiste à calculer la "Suppression non maximale", qui consiste à mettre à zéro l'élément central dans une région 3x3, à moins que deux voisins spécifiques ne soient plus petits. Plus de détails here. Comment puis-je réaliser cette opération en utilisant Tensorflow?Valeur conditionnelle sur le tenseur par rapport aux éléments voisins
Je suis en fait en utilisant Keras, mais la solution tensorflow fonctionnera aussi bien, pour référence, mon code afin ressemble beaucoup à ceci:
def canny(img):
'''Canny border detection. The input should be a grayscale image.'''
gauss_kernel = np.array([[2, 4, 5, 4, 2],
[4, 9, 12, 9, 4],
[5, 12, 15, 12, 5],
[4, 9, 12, 9, 4],
[2, 4, 5, 4, 2]]).reshape(5, 5, 1, 1)
gauss_kernel = K.variable(1./159 * gauss_kernel)
Gx = K.variable(np.array([[-1., 0. ,1.],
[-2., 0., 2.],
[-1., 0., 1.]]).reshape(3, 3, 1, 1))
Gy = K.variable(np.array([[-1., -2., -1.],
[ 0., 0., 0.],
[ 1., 2., 1.]]).reshape(3, 3, 1, 1))
# Smooth image
smoothed = K.conv2d(img, gauss_kernel, padding='same')
# Derivative in x
Dx = K.conv2d(smoothed, Gx, padding='same')
# Derivative in y
Dy = K.conv2d(smoothed, Gy, padding='same')
# Take gradient strength
G = K.sqrt(K.square(Dx) + K.square(Dy))
# TODO: Non-maximum Suppression & Hysteresis Thresholding
return G
J'essayais avec une approche différente, mais cette idée était parfaite! Je vous remercie! –