2012-06-28 19 views
5

Cách ưa thích để chuyển đổi từ tọa độ trục (ví dụ: cách được điều chỉnh bởi plot hoặc kết quả đầu ra trong point1point2 của houghlines) đến tọa độ pixel trong hình ảnh?MATLAB Làm cách nào để chuyển đổi tọa độ trục thành tọa độ pixel?

Tôi thấy hàm axes2pix trong tài liệu Mathworks, nhưng không rõ cách hoạt động. Cụ thể, đối số thứ ba là gì? Các ví dụ chỉ cần chuyển vào 30, nhưng không rõ giá trị này đến từ đâu. Các giải thích phụ thuộc vào kiến ​​thức về một số chức năng khác mà tôi không biết.

Câu hỏi liên quan: Axis coordinates to pixel coordinates? đề xuất sử dụng poly2mask, sẽ hoạt động đối với đa giác, nhưng làm cách nào để làm điều tương tự cho một điểm hoặc danh sách điểm?

Câu hỏi đó cũng liên kết tới Scripts to Convert Image to and from Graph Coordinates, nhưng mã mà ném một ngoại lệ:

Error using/
Matrix dimensions must agree. 

Trả lời

0

Có thể có một cách tích hợp mà tôi chưa nghe nói đến, nhưng điều này không nên khó có thể làm từ đầu ...

set(axes_handle,'units','pixels'); 
pos = get(axes_handle,'position'); 
xlim = get(axes_handle,'xlim'); 
ylim = get(axes_handle,'ylim'); 

Sử dụng các giá trị này, bạn có thể chuyển đổi từ tọa độ trục thành pixel dễ dàng.

x_in_pixels = pos(1) + pos(3) * (x_in_axes-xlim(1))/(xlim(2)-xlim(1)); 
%# etc... 

Sử dụng ở trên pos(1) làm x-offset của các trục trong hình. Nếu bạn không quan tâm về điều này, không sử dụng nó. Tương tự, nếu bạn muốn nó trong tọa độ màn hình, thêm x-offset của vị trí thu được bằng cách get(figure_handle,'position')

+0

này trông đầy hứa hẹn. Tuy nhiên, nếu tôi không có tay cầm trục thì sao? Ví dụ: 'houghlines' http://www.mathworks.com/help/toolbox/images/ref/houghlines.html đưa vào một hình ảnh nhị phân và trả về các cấu trúc chứa các dòng có (x, y). Đây là trường hợp cụ thể mà tôi đang cố xử lý. Họ làm nó như thế nào? – dsg

+0

Vì 'houghlines' tự động hoạt động trên một hình ảnh (ma trận 2D), tôi có thể tưởng tượng rằng cặp' X, Y' có lẽ đã ở trong không gian pixel, vì không có đối tượng hình/trục (và do đó không chuyển đổi thành không gian màn hình) để giải thích. – tmpearce

1

Hãy xem xét mã sau đây. Nó cho thấy làm thế nào để chuyển đổi từ trục tọa độ để tọa độ điểm ảnh.

Điều này đặc biệt hữu ích nếu bạn vẽ hình ảnh bằng cách sử dụng các vị trí XData/YData tùy chỉnh khác với mặc định 1:width1:height. Tôi đang dịch chuyển 100 và 200 pixel theo hướng x/y trong ví dụ bên dưới.

function imageExample() 
    %# RGB image 
    img = imread('peppers.png'); 
    sz = size(img); 

    %# show image 
    hFig = figure(); 
    hAx = axes(); 
    image([1 sz(2)]+100, [1 sz(1)]+200, img) %# shifted XData/YData 

    %# hook-up mouse button-down event 
    set(hFig, 'WindowButtonDownFcn',@mouseDown) 

    function mouseDown(o,e) 
     %# get current point 
     p = get(hAx,'CurrentPoint'); 
     p = p(1,1:2); 

     %# convert axes coordinates to image pixel coordinates 
     %# I am also rounding to integers 
     x = round(axes2pix(sz(2), [1 sz(2)], p(1))); 
     y = round(axes2pix(sz(1), [1 sz(1)], p(2))); 

     %# show (x,y) pixel in title 
     title(sprintf('image pixel = (%d,%d)',x,y)) 
    end 
end 

screenshot

(lưu ý cách giới hạn trục không bắt đầu từ (1,1), do đó nhu cầu về axes2pix)