Je suis en train d'extraire un plan particulier d'une parcelle Matlab pcolor
(généré à partir d'une matrice nommée M
qui est téléchargé ici aussi) comme le montre cette image.Comment détecter un contour particulier dans un graphe MATLAB?
Cependant, je voudrais extraire le seul contour , comme indiqué ici:
La ligne de couleur jaune est celui que je voudrais extraire et est mis en évidence ici à des fins d'illustration.
Mais je reçois le résultat comme suit:.
Je ne nécessitent pas d'autres bits/encombrement en dehors de la courbe.
J'applique le code suivant sur le matrix M
pour obtenir le résultat erroné.
[~, threshold] = edge(M, 'sobel');
fudgeFactor = 0.6;
BWs = edge(M,'sobel', threshold * fudgeFactor);
se90 = strel('line',6,70);
se0 = strel('line',3,90);
BWsdil = imdilate(BWs, [se90 se0]);
BWnobord = imclearborder(BWsdil,18);
seD = strel('cube',3);
BWfinal = imerode(BWnobord,seD);
BWfinal = imerode(BWfinal,seD);
pcolor(BWfinal);colormap(jet); shading interp; colorbar;
Comment obtenir le contour uniquement si nécessaire? Dois-je utiliser des filtres de détection de bord ou dois-je effectuer un lissage avant d'appliquer des filtres? MISE À JOUR: J'ai appliqué un filtre de guassian et j'ai obtenu l'image suivante:
Le bruit dans les parties supérieures existe toujours. Je veux seulement que la courbe soit extraite. Image after applying a Gaussian filter
sigma = 30;
smoothImage = imgaussfilt(M,sigma);
smoothGradient = imgradient(smoothImage,'CentralDifference');
pcolor(smoothGradient);colormap(jet); shading interp; colorbar;
Ce n'est pas un contour des données, est-il? Cette ligne n'est pas vraiment dans les données, c'est quelque chose que vous voulez calculer à partir de vos données. Quel est votre critère pour choisir cette ligne? Vous devez trouver une manière pseudo-mathématique de le décrire, par ex. Le point où il n'y a plus de "rouge" ci-dessous –
Merci pour la clarification. Oui, la ligne n'est pas à l'origine dans les données et je l'ai marqué en jaune pour l'illustration. (Quelle est la partie que j'ai besoin d'extraire). Je n'ai besoin que des valeurs matricielles correspondant à la ligne courbe, c'est-à-dire les premières valeurs rouges du bas et après cela je n'ai pas besoin du fouillis. – Sack11
Oui, mais comme c'est, c'est trop large.Il n'y a pas de solution générale à ceci, sauf si vous essayez de définir en termes plus spécifiques comment cette ligne est décrite –