10
votes

Comment créer une matrice d'image avec une ligne dessinée à Matlab?

Je veux tracer une ligne d'un point bien défini à un autre, puis la transformer en une matrice d'image pour utiliser un filtre gaussien pour le lissage. Pour cela, j'utilise les fonctions ligne et getFrame pour tracer une ligne et capturer la fenêtre Figure dans une image, mais getframe est très lent et non lent et non très fiable. J'ai remarqué que cela ne capture rien lorsque l'ordinateur est verrouillé et j'ai obtenu une erreur de mémoire après 170 exécutions.

Mes questions sont les suivantes:

  • Y a-t-il un substitut à getframe que je peux utiliser?
  • Y a-t-il un moyen de créer la matrice d'image et de dessiner la ligne directement dans celle-ci?

    Voici un échantillon de code minimal: xxx

    [update]

    marque haute performance Idée avec linspace est très prometteuse, mais comment accéder aux coordonnées matricielles calculées avec linspace ? J'ai essayé le code suivant, mais cela ne fonctionne pas comme je pense que cela devrait. Je suppose que c'est une chose très simple et basique matlab, mais je ne peux tout simplement pas envelopper ma tête autour de lui: xxx


2 commentaires

Donc, ce que vous faites est la rasâtretisation d'une image vectorielle. Beaucoup de bonnes références sur ce sujet, Wikipedia, comme toujours, est un bon endroit pour commencer.


Je sais, mais j'essaie toujours d'utiliser des fonctions de Matlab. Je n'apprençais pas autant, mais ils sont plus rapides et je n'ai pas à passer du temps à les déboguer comme mon propre code.


4 Réponses :


-1
votes

quelque chose comme ceci:

[LINSPACE (30 200, NUMSTEPS); LINSPACE (35,60, NUMSTEPS)]

Est-ce que cela fonctionne pour vous?

marque


1 commentaires

Linspace a l'air très prometteuse, mais comment accéder aux coordonnées de la matrice est-elle calculée avec Linspace? J'ai essayé les derniers 30 minutes, mais le code suivant ne fonctionne pas, car je pense que cela devrait .. (Scnr) Je suppose, c'est une chose très simple et basique matlab, mais je ne peux tout simplement pas envelopper ma tête autour de lui. matrice = zéros (200,60); diagonale = rond ([LINSPACE (30 200, NUMSTEPS); LINSPACE (35,60, NUMSTEPS)]); matrice (diagonale (1, :), diagonale (2, :)) = 1; imshow (matrice);



17
votes

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: xxx pré>

puis, disons que nous voulons dessiner une ligne à partir de (30, 35) code> à (200, 60) code>. Nous calculerons d'abord combien de pixels longs la ligne devront être: p> xxx pré>

suivant, nous calculons des indices de ligne et de colonne pour les pixels de ligne utilisant linspace code> , convertissez-les des indices souscriptés en indices linéaires en utilisant Sub2ind code> , puis utilisez-les pour modifier MAT CODE>: P>

subplot(1, 2, 1);
image(mat);        % Show original line image
colormap(gray);    % Change colormap
title('Line');

subplot(1, 2, 2);
h = fspecial('gaussian', 20, 10);  % Create filter
filteredImg = imfilter(mat, h);    % Filter image
image(filteredImg);                % Show filtered line image
title('Filtered line');


1 commentaires

Merci Gnovice pour votre réponse complète!



0
votes

Vous pouvez vérifier ma réponse ici . C'est une façon robuste d'atteindre ce que vous demandez. Avantage de mon approche est qu'il n'a pas besoin de paramètres supplémentaires pour contrôler densité de la ligne dessinée.


0 commentaires

5
votes

Si vous avez une boîte à outils système de vision d'ordinateur, un objet ShapeInserter est disponible. Ceci peut être utilisé pour dessiner des lignes, des cercles, des rectangles et des polygones sur l'image. xxx

http: // www. mathworks.com/help/vision/ref/vision.shapeinserterclass.html


0 commentaires