2012-06-28 17 views
5

धुरी निर्देशांक से परिवर्तित करने का पसंदीदा तरीका क्या है (उदाहरण के लिए plot द्वारा लिया गया 0 या point1 और point2houghlines में से एक आउटपुट) छवि में पिक्सेल निर्देशांक करने के लिए?MATLAB अक्ष समन्वय को पिक्सेल निर्देशांक में कैसे परिवर्तित करें?

मैथवर्क दस्तावेज में मैं axes2pix फ़ंक्शन देखता हूं, लेकिन यह स्पष्ट नहीं है कि यह कैसे काम करता है। विशेष रूप से, तीसरा तर्क क्या है? उदाहरण सिर्फ 30 में गुजरते हैं, लेकिन यह स्पष्ट नहीं है कि यह मान कहां से आता है। स्पष्टीकरण कई अन्य कार्यों के ज्ञान पर निर्भर करता है, जिन्हें मैं नहीं जानता।

संबंधित प्रश्न: Axis coordinates to pixel coordinates?poly2mask का उपयोग करने का सुझाव देता है, जो बहुभुज के लिए काम करेगा, लेकिन मैं एक बिंदु या बिंदुओं की एक सूची के लिए एक ही चीज़ कैसे करूं?

यही सवाल भी Scripts to Convert Image to and from Graph Coordinates से जोड़ता है, लेकिन यह कोड एक अपवाद दिए:

Error using/
Matrix dimensions must agree. 

उत्तर

0

वहाँ एक अंतर्निहित तरीका है कि मैं के बारे में सुना नहीं किया है, लेकिन हो सकता यह करने के लिए मुश्किल नहीं होना चाहिए स्क्रैच से ...

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

इन मानों का उपयोग करके, आप axes coordinates से आसानी से पिक्सल में परिवर्तित कर सकते हैं।

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

ऊपर का उपयोग करता है pos(1) आंकड़ा भीतर कुल्हाड़ियों की एक्स-ऑफसेट के रूप में। यदि आपको इसकी परवाह नहीं है, तो इसका उपयोग न करें। इसी प्रकार, यदि आप इसे स्क्रीन निर्देशांक में चाहते हैं, तो get(figure_handle,'position')

+0

इस होनहार लग रहा है। हालांकि, अगर मेरे पास धुरी हैंडल नहीं है तो क्या होगा? उदाहरण के लिए, 'houghlines' http://www.mathworks.com/help/toolbox/images/ref/houghlines.html एक बाइनरी छवि लेता है और (x, y) के साथ लाइनों वाली संरचनाएं लौटाता है। यह वह विशिष्ट मामला है जिसे मैं संभालने की कोशिश कर रहा हूं। वह यह कैसे करते हैं? – dsg

+0

चूंकि 'हौफलाइन' मूल रूप से एक छवि (2 डी मैट्रिक्स) पर चलती है, इसलिए मुझे लगता है कि 'एक्स, वाई' जोड़ी शायद पहले ही पिक्सेल स्पेस में है, क्योंकि कोई आंकड़ा/अक्ष वस्तु नहीं है (और इस प्रकार स्क्रीन स्पेस में कोई बदलाव नहीं है) पता लगाने के लिए। – tmpearce

1

द्वारा प्राप्त स्थिति के एक्स-ऑफसेट को निम्न कोड पर विचार करें। यह दिखाता है कि axes coordinates से छवि पिक्सेल निर्देशांक में कैसे परिवर्तित करें।

यह विशेष रूप से उपयोगी है यदि आप कस्टम 0Dऔर 1:height के अलावा कस्टम XData/YData स्थानों का उपयोग करके छवि को प्लॉट करते हैं। मैं नीचे दिए गए उदाहरण में x/y दिशाओं में 100 और 200 पिक्सल स्थानांतरित कर रहा हूं।

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

(ध्यान दें कैसे अक्ष सीमा (1,1) पर शुरू नहीं करते हैं, इस प्रकार axes2pix की जरुरत)

संबंधित मुद्दे

 संबंधित मुद्दे