2010-08-20 5 views
17

Ho due punti Diciamo:Come disegnare una linea su un'immagine in matlab?

  • P (x, y) [punto giace nella parte superiore dell'immagine]
  • P '(x', y ') [punto si trova nella parte inferiore dell'immagine]

Ora voglio disegnare una linea tra questi due punti .... e la linea dovrebbe apparire sui mezzi dell'immagine dovrebbe essere visibile.

come fare questo ????

+1

Credo che quello che stai chiedendo sia stato trattato prima: http://stackoverflow.com/questions/1940833/how-do-i-create-an-image-matrix-with-a-line-drawn-in -it-in-matlab, http://stackoverflow.com/questions/2464637/matlab-drawing-a-line-over-a-black-and-white-image, http://stackoverflow.com/questions/3178336/matlab-how-to-plot-xy-on-image-and-save, http://stackoverflow.com/questions/575475/how-can-i-save-an-altered-image-in-matlab – gnovice

+0

È quasi un duplicato esatto, ma non del tutto. – Jonas

+0

http: // stackoverflow.it/questions/2464637/matlab-drawing-a-line-over-a-black-and-white-image questo link hai dato opere solo per immagini binarie ... e la mia immagine non è binaria. e il resto dei collegamenti non sono per il mio uso. Quindi ho bisogno di qualcosa di diverso. – chee

risposta

14

Il modo più semplice per tracciare una linea su un'immagine è utilizzare PLOT.

%# read and display image 
img = imread('autumn.tif'); 
figure,imshow(img) 

%# make sure the image doesn't disappear if we plot something else 
hold on 

%# define points (in matrix coordinates) 
p1 = [10,100]; 
p2 = [100,20]; 

%# plot the points. 
%# Note that depending on the definition of the points, 
%# you may have to swap x and y 
plot([p1(2),p2(2)],[p1(1),p2(1)],'Color','r','LineWidth',2) 

Se si desidera un colore diverso, modificare la lettera a uno qualsiasi dei rgbcmykw oppure usa triplette RGB (rosso è [1 0 0]). Dai uno sguardo allo lineseries properties per ulteriori opzioni di formattazione.

+0

e cosa succede se voglio trovare la pendenza di questa linea ???? – chee

+1

chee: a) questa è una domanda diversa, b) utilizzare la formula di pendenza del punto per una linea. – neuronet

1
load clown 
image(X) 
colormap(map) 
c = size(X,2) 
mid = round(c/2) 
X(:,mid) = 1 
image(X) 
+0

Se è un'immagine a colori, dovresti usare 'X (:, mid, :) = [1 1 1];'. –

+0

e se voglio trovare la pendenza di questa linea rispetto a ???????? – chee

+0

È una linea verticale. La pendenza è infinita. – MatlabDoug

5

Così:

figure; 
hold on; 
imagesc(img); 
line([x1,x2],[y1,y2],'Color','r','LineWidth',2) 
hold off 

dove y è la direzione "down" ed x è la direzione "destra" nell'immagine. Cambia il colore e la larghezza come necessario per essere visibile.

1

Se si dispone della casella degli strumenti di Computer Vision. Puoi semplicemente usare shapeInserter.

Partenza http://www.mathworks.com/help/vision/ref/vision.shapeinserter-class.html

Per specificare le linee, è necessario utilizzare la riga sotto. In caso contrario, si può ottenere un rettangolo

Esempio:

%draw a line from point (100,100) to (200,200) on an image saved as nextFrame 

line = int32([100 100 200 200]); 
shapeInserter = vision.ShapeInserter('Shape', 'Lines'); 
nextFrame = step(shapeInserter, nextFrame, line); 

Date un'occhiata a delle proprietà per vedere cosa si può modificare.

8

A partire dalla versione R2014a è possibile utilizzare insertShape come segue:

img = insertShape(img,'Line',[x1 y1 x2 y2],'LineWidth',2,'Color','blue');

È possibile anche disegnare linee multiple con lo stesso comando, ma x1, x2, y2, y3 deve essere vettori colonna con ogni riga rappresenta una nuova linea.

insertShape consente inoltre di disegnare rettangoli, cerchi e poligoni.

+0

Questo funziona solo se si dispone della casella degli strumenti di Computer Vision. Puoi suggerire un metodo senza usarlo? – rayryeng

+0

Come utilizzare le linee tratteggiate? –