2015-04-15 5 views
5

मैं ऑसीलोस्कोप आउटपुट के साथ कुछ सामानों की गणना करने के लिए एक प्रोग्राम डाल रहा हूं, लेकिन जैसे ही प्रोग्राम काम करता है, मैं बस छवि को MATLAB में आयात करता हूं और फिर विभिन्न क्षेत्रों के निर्देशांक खोजने के लिए जीनपुट का उपयोग करता हूं उत्पन्न वक्र।एक छवि में एक पंक्ति का पता लगाएं MATLAB

sine wave] (http://imgur.com/IlSDDLK) ![sine wave

और ginput या इसी तरह स्वचालित रूप से चमकीले हरे रंग की अवस्था के साथ पता लगाने और एक्स की दुकान कुछ है, वाई सरणियों अलग करने के लिए निर्देशांक:

वहाँ एक रास्ता है कि मैं, ले जा सकते हैं कहते हैं, इस छवि है (शायद वक्र और पृष्ठभूमि रंग के रंग के बीच भेदभाव करने में सक्षम होने के द्वारा)? इस तरह मैं वास्तव में डेटा विश्लेषण में छवि का उपयोग करने की आवश्यकता के बजाय तस्वीर में वक्र के एक्स, वाई निर्देशांक की वास्तविक साजिश का उपयोग कर सकता हूं।

सबसे नज़दीक मैं प्राप्त करने में सक्षम हूं, बस वक्र के साथ माउस बटन मैश करने के लिए [x,y]=ginput का उपयोग कर रहा है और एक विशाल सरणी उत्पन्न करता है, लेकिन मेरी उंगलियों को आराम की ज़रूरत है!

धन्यवाद!

+0

एक नाबालिग सवाल है, लेकिन बहुत महत्वपूर्ण: क्या 'एक्स उत्पन्न वक्र की, y' निर्देशांक आस्टसीलस्कप के समन्वय प्रणाली के साथ संबंध स्थापित करने की आवश्यकता है ? – rayryeng

+0

वास्तव में नहीं, बस एक्स, वाई पिक्सल के निर्देशांक जहां वक्र के बिंदु स्थित हैं। ऐसा लगता है कि नीचे दिया गया सुझाव ठीक वही हो सकता है जो मैं खोज रहा हूं - एक बार जब मैं कंप्यूटर पर पहुंचने के लिए आपको लोगों को अपडेट कर दूंगा। – bieberman

+0

अच्छा लगता है! बस उत्सुक था। – rayryeng

उत्तर

11

इस

img = imread('http://i.stack.imgur.com/3GH1x.jpg'); %// read the image 
bw = img(:,:,2) > 128; %// pick only green points (2nd RGB channel) 
bw(275:end,:) = false; %// discard the lower flat line 
[yy xx]=find(bw); %// get the x-y coordinates of green pixels 

पर एक नजर डालें अब आप अंक प्लॉट कर सकते हैं:

figure;plot(xx,yy, '.'); 

enter image description here

साथ परिणामस्वरूप आप तथ्य यह है कि लाइन मोटी है से परेशान रहे हैं (अर्थात, प्रत्येक x के लिए कई y मान) आप बस मतलब

uy = accumarray(xx, yy, [], @mean); 
ux = 1:max(xx); 

तो ले जा सकते हैं लाइन

figure;imshow(img);hold on; plot(ux,uy,'r','LineWidth',1.5); 

enter image description here


आप रूप में अच्छी तरह ग्रिड के बाद कर रहे हैं विज्युअलाइजिंग,

[gy gx] = find(max(img,[],3) < 60); %// get the darkest points 

ग्रिड अंक हम तलाश कई ग्रिड अंक gy ही gx

nx = hist(gx,1:size(img,2)); %// count how many gx per x location 
gxx = find(nx > 100); %// only those with more than 100 are grid X 

y के लिए एक ही है x ऐसी है कि निर्धारित करने के लिए:

ny = hist(gy,1:334); 
gyy = find(ny > 100); 

निकालें डुप्लिकेट:

gxx(diff([0 gxx]) == 1) = []; 
gyy(diff([0 gyy]) == 1) = []; 

ग्रिड बनाएं अंक

[GX GY] = meshgrid(gxx, gyy); 

अब पूरी तस्वीर:

figure('Name','I MUST award Shai a FAT Bounty for this'); 
imshow(img);hold on; 
plot(ux,uy,'r','LineWidth',1.5); %// the curve 
scatter(GX(:), GY(:), 150, '+c'); %// the grid 

enter image description here

+0

हे! नौकरी करने के लिए कुछ सरल थ्रेसहोल्डिंग की तरह कुछ भी नहीं। +1। – rayryeng

+1

ठीक है, अब मैं इसे 'accumarray' के साथ देखता हूं। अति उत्कृष्ट। – rayryeng

+0

क्या यह ग्रिड भी शामिल करने के लिए एक समान प्रक्रिया होगी? – bieberman

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