Comment puis-je créer une image de la matrice avec une ligne tracée dans MATLAB?
Je veux tracer une ligne à partir d'un point défini à l'autre et ensuite de le transformer en une image de la matrice d'utiliser un filtre Gaussien sur elle pour le lissage. Pour cela, j'utilise les fonctions line
et getframe
de tracer une ligne de capture et de la figure de la fenêtre dans une image, mais getframe
est très lent et pas très fiable. J'ai remarqué qu'il ne capte rien lorsque l'ordinateur est verrouillé et j'ai eu un out of memory
erreur après 170 exécutions.
Mes questions sont:
- Est-il un substitut à
getframe
que je peux utiliser? - Est-il un moyen de créer la matrice de l'image et de tracer la ligne directement?
Voici un code minimal de l'échantillon:
figure1=line([30 35] ,[200 60]);
F= getframe;
hsize=40; sigma=20;
h = fspecial('gaussian',hsize,sigma);
filteredImg = imfilter(double(F.cdata), h,256);
imshow(uint8(filteredImg));
[mise à jour]
Haute Performance de Marque de l'idée avec linspace
semble très prometteur, mais comment puis-je accéder à la matrice des coordonnées calculées avec linspace
? J'ai essayé le code suivant, mais il ne fonctionne pas comme je pense qu'il devrait. Je suppose que c'est un très simple et de base de MATLAB chose, mais j'ai juste ne peut pas envelopper la tête autour de lui:
matrix=zeros(200,60);
diagonal=round([linspace(30,200,numSteps); linspace(35,60,numSteps)]);
matrix(diagonal(1,:), diagonal(2,:))=1;
imshow(matrix);
Je sais, mais j'essaie toujours d'utiliser Matlab propres fonctions. Je ne suis pas en apprendre autant, mais ils sont plus rapides et je n'ai pas passé du temps à débugger comme mon propre code.
OriginalL'auteur Framester | 2009-12-21
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de dessin d'une ligne directement dans une matrice. Tout d'abord, nous allons créer une matrice de zéros pour une image vide:
Alors, disons que nous voulons tracer une ligne de
(30, 35)
à(200, 60)
. Nous allons d'abord calculer le nombre de pixels de long de la ligne devra être:Ensuite, on calcule les indices de ligne et de colonne de la ligne de pixels à l'aide de
linspace
, de les convertir en indice les indices linéaire des indices à l'aide desub2ind
, puis les utiliser pour modifier lesmat
:Vous pouvez ensuite visualiser la ligne et la version filtrée par le suivant:
Aidé, merci!!!
OriginalL'auteur gnovice
Si vous avez un Ordinateur, un Système de Vision boîte à outils il y a un ShapeInserter objet disponible. Ceci peut être utilisé pour dessiner des lignes, des cercles, des rectangles et des polygones sur l'image.
http://www.mathworks.com/help/vision/ref/vision.shapeinserterclass.html
OriginalL'auteur Navan
Quelque chose comme ceci:
[linspace(30,200,numSteps); linspace(35,60,numSteps)]
Cela fonctionne pour vous ?
Marque
OriginalL'auteur High Performance Mark
Vous pouvez vérifier ma réponse ici. Il est robuste pour obtenir ce que vous demandez. L'avantage de cette approche est qu'il n'a pas besoin de paramètres supplémentaires pour le contrôle densité de la ligne tracée.
OriginalL'auteur plesiv