Trouver une ligne spécifique dans une image

9

Je veux trouver la ligne entre la couleur bleue et la couleur grise dans l'image suivante:

entrez la description de l'image ici

Plus exactement, les points finaux de cette ligne.

La transformation de Hough est-elle un choix? Si oui, comment dois-je configurer l'image avant d'utiliser Hough?

Tout moyen de résoudre ce problème serait utile.


la source
Faites une détection de bord avant la transformation de Hough. Il transformera cette transition en une ligne lumineuse avec du noir des deux côtés
endolith

Réponses:

10

En général, vous voulez un détecteur de bord, comme le détecteur de bord Canny, pour ce genre de problème. La transformation Hough est utile pour extraire des lignes plutôt que des bords.

Cependant, dans ce cas spécifique, il vaut mieux faire quelque chose comme:

imdata = imread('grayblue.jpg');
colidx = find(diff(imdata(1,:) ~= 0);

car c'est une image si simple.

Nzbuu
la source
0

Pour une image aussi simple qu'un noyau de convolution comme le suivant trouvera bien des bords:

[-1 2 - 1]

Cela donne un pixel de bord unique à chaque point de bord. Pas de bruit, pas de bruit. Canny est trop impliqué pour ce problème. Si vous souhaitez trouver des points de bord pour des lignes sous n'importe quel angle, vous pouvez utiliser un laplacien simple, un laplacien de gaussien (LoG) ou une différence de gaussien (DoG). Sobel et Prewitt sont également simples mais inappropriés car ils donnent une ligne de "double épaisseur".

Il y a une implémentation rapide méchante de Hough décrite ici: http://www.ic.uff.br/~laffernandes/projects/kht/index.html

Il existe également des algorithmes "Hough sans paramètre" qui sont très rapides, mais un peu délicats à mettre en œuvre et à déboguer.

Repenser
la source