2010-08-20 38 views
17

Tôi có hai điểm cho phép nói:Làm thế nào để vẽ một đường trên một hình ảnh trong MATLAB?

  • P (x, y) [điểm nằm ở phía trên cùng của hình ảnh]
  • P '(x', y ') [điểm nằm ở phía dưới của hình ảnh]

Bây giờ tôi muốn vẽ một đường thẳng giữa hai điểm này .... và dòng sẽ xuất hiện trên hình ảnh có nghĩa là sẽ hiển thị.

cách thực hiện việc này ????

+1

Tôi tin rằng những gì bạn đang yêu cầu đã được đề cập trước đây: 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

Đó là gần như một bản sao chính xác, nhưng không hoàn toàn. – Jonas

+0

http: // stackoverflow.com/questions/2464637/matlab-drawing-a-line-over-a-đen-và-trắng-hình ảnh liên kết này bạn chỉ cung cấp tác phẩm cho hình ảnh nhị phân ... và hình ảnh của tôi không phải là nhị phân. và phần còn lại của liên kết không dành cho mục đích sử dụng của tôi. Tôi cần một thứ khác. – chee

Trả lời

14

Cách đơn giản nhất để vẽ một đường thẳng lên hình ảnh là sử dụng 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) 

Nếu bạn muốn có một màu khác nhau, hoặc là thay đổi ký tự bất kỳ rgbcmykw, hoặc sử dụng ba RGB (đỏ là [1 0 0]). Hãy xem lineseries properties để biết thêm các tùy chọn định dạng.

+0

và nếu tôi muốn tìm độ dốc của đường này thì sao ???? – chee

+1

chee: a) đó là một câu hỏi khác, b) sử dụng công thức điểm dốc cho một dòng. – neuronet

0

Bạn có thể tải xuống và sử dụng hline and vline kết hợp với hold on, sử dụng các kỹ thuật truy cập Steve on Image Processing. Hoặc chỉ sử dụng kỹ thuật của mình. Dù bằng cách nào nó hoạt động.

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

Nếu nó là một hình ảnh màu, bạn nên sử dụng 'X (:, mid, :) = [1 1 1];'. –

+0

và nếu tôi muốn tìm độ dốc của đường này hơn ???????? – chee

+0

Nó là một đường thẳng đứng. Độ dốc là vô hạn. – MatlabDoug

5

Như thế này:

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

đâu y là "xuống" chỉ đạo, x là "đúng" hướng trong hình ảnh. Thay đổi màu sắc và chiều rộng khi cần thiết để hiển thị.

1

Nếu bạn có hộp công cụ Computer Vision. Bạn chỉ có thể sử dụng shapeInserter.

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

Để xác định dòng, bạn phải sử dụng dòng dưới đây. Nếu không, bạn có thể nhận được một hình chữ nhật

Ví dụ:

%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); 

Hãy nhìn vào các thuộc tính để xem những gì bạn có thể chỉnh sửa.

8

Bắt đầu với phiên bản R2014a bạn có thể sử dụng insertShape như sau:

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

Bạn cũng có thể rút ra nhiều dòng với cùng lệnh, nhưng x1, x2, y2, y3 phải vectơ cột với mỗi hàng đại diện cho một dòng mới.

insertShape cũng cho phép bạn vẽ hình chữ nhật, hình tròn và đa giác.

+0

Điều này chỉ hoạt động nếu bạn có Hộp công cụ Máy tính Tầm nhìn. Bạn có thể đề xuất một phương pháp mà không sử dụng nó? – rayryeng

+0

Cách sử dụng các đường chấm chấm? –

Các vấn đề liên quan