J'ai des images comme les suivantes (ce sont les résultats d'un UNET sur l'image originale) :
Je pensais que la segmentation de l'image originale était la tâche la plus difficile, mais j'ai eu du mal avec la tâche suivante : pour chaque image, je dois calculer la largeur de la zone verte en correspondance avec la zone rouge, comme suit :
Ce que j'ai essayé de faire :
La détection des bords de la zone verte a été simple. J'ai ensuite trouvé les lignes en coordonnées polaires grâce à la transformation de Hough :
image = cv2.imread("../../../../example_1.png")
image[:, :, 2] = 0
canny = cv2.Canny(image, 150, 250, 3)
lines = cv2.HoughLinesP(canny, cv2.HOUGH_PROBABILISTIC, np.pi/180, 20)
for line in lines:
for x0, y0, x1, y1 in line:
cv2.line(image, (x0,y0), (x1,y1), (255, 255, 255), 1)
fig = plt.figure(figsize = (15, 10))
fig.add_subplot(1, 2, 1).set_title("canny")
plt.imshow(canny, cmap = "gray")
fig.add_subplot(1, 2, 2).set_title("lines")
plt.imshow(image)
Ce qui donne :
Comme vous pouvez le voir, il y a beaucoup de lignes de candidats (beaucoup de faux positifs) et j'ai du mal à garder celles dont j'ai besoin. De plus : Comment calculeriez-vous la largeur ?
En utilisant les houghlines en coordonnées polaires, j'ai pu retrouver l'angle que chaque ligne a avec l'origine de l'axe, donc pour calculer la largeur je devrais trouver une paire de lignes parallèles (même angle ou presque même angle) avec une distance différente de l'origine. Je ne suis pas sûr que ce soit la meilleure approche.
Merci de votre aide