2015-04-15 21 views
5

Osiloskop çıktıları ile bazı şeyleri hesaplamak için bir program hazırlıyorum, ancak program şimdi çalıştıkça, görüntüyü MATLAB içine aldım ve ardından çeşitli bölgelerin koordinatlarını bulmak için ginput kullanıyorum oluşturulan eğri.Bir resimdeki çizgiyi izleme MATLAB

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

ve GInput veya otomatik olarak parlak yeşil eğri boyunca iz ve x depolamak benzer bir şey var, y diziler ayırmak için koordinatları:

Ben, diyelim ki, bu resim alabilir bir yolu var mı (belki de eğrinin rengi ve arka plan rengi arasında ayrım yapabilmek suretiyle)? Bu şekilde görüntüdeki eğriyi x, y koordinatlarının gerçek bir grafiğini kullanabilmekteyim.

Sadece eğri boyunca fare düğmesini püre ve büyük bir dizi oluşturmak için [x,y]=ginput kullanıyor almak mümkün oldum yakın ama parmaklarım dinlenmeye ihtiyacın!

Teşekkürler! Satır kalın duydukları rahatsızlığın varsa

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

enter image description here

ile Ortaya:

+0

Bir küçük soru, ama çok önemli: y' koordinatlar oluşturulan eğrinin 'x osiloskopun koordinat sistemi ile ilişkili gerekiyor Do ? – rayryeng

+0

Gerçekten değil, sadece eğrinin noktalarının bulunduğu piksellerin x, y koordinatları. Aşağıdaki öneri tam olarak aradığım şey olabilir gibi görünüyor - bir bilgisayara ulaşmayı başardığımda sizi uyarıyorum. – bieberman

+0

Kulağa hoş geliyor! Sadece merak ettim. – rayryeng

cevap

11

Artık puan çizebilirsiniz bu

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 

bir göz atın (yaniHer x için birden y değerleri) sadece daha sonra, hat sizin de ızgara sonra ise

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

enter image description here


görselleştirme

ortalama

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

sunar

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

birçok ızgara noktaları gy y için aynı 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 

aynı vardır x şekilde aramak ızgara noktaları belirlemek için:

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

kaldır çiftleri:

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

ızgara oluşturun noktalar

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

Şimdi bütün resmi:

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

Heh! İşi yapmak için bazı basit eşikler gibi bir şey yok. +1. – rayryeng

+1

Tamam, şimdi "accumarray" ile görüyorum. Mükemmel. – rayryeng

+0

Aynı zamanda ızgarayı da içeren benzer bir işlem mi? – bieberman