2016-04-11 27 views
3

Bu İkili görüntü bw var. Ama önce her iki kenar için eğri uydurma yapmak zorundayım. Sonuç, kenarları temsil eden iki düzgün eğri olmalıdır.Eğri, MATLAB

Her kenar için dizinlerim var ancak bunları x-y verilerinin bir ekleme işlevine giriş verileri olarak yapamaması için kullanamıyorum. Yani, x ve f(x) değiller, hepsi farklı pozisyonlarda aynı değere (1) sahipler. [x y]=find(BW) demek doğru değildir; y burada x'daki değer değil, fakat emin olmak için bunları ikili görüntüde bir çeşit ölçek kullanmanın bir yolu olmalı. Kafam karıştı ve burada sıkışıp kaldım.

Herhangi bir öneriniz var mı?

+0

bir çizgiye, ve sonra bir fonksiyona sığdırdı [x; y] = f (t) ' – Jonas

cevap

4

Neden polyfit kullanamazsınız?

[y x] = find(bw); %// get x y coordinates of all curve points 

iki küçük "hileler" Eğer burada kullanmak gerekir vardır:

  1. Böylece sol ve sağ eğriler için veri noktalarını bölmek gerekir, iki eğri var

    right = x<300; 
    xr = x(right); 
    yr = y(right); 
    xl = x(~right); 
    yl = y(~right); 
    
    senin eğriler dikey yakın olduğundan
  2. , y=f(x) "klasik" yerine x=f(y) uyacak şekilde daha iyi olurdu:

    Şimdi
    pr = polyfit(yr, xr, 3); %// fit 3rd deg poly 
    pl = polyfit(yl, xl, 3); 
    

onlara

yy = linspace(1, size(bw,1), 50); 

figure; imshow(bw, 'border', 'tight'); 
hold all 
plot(polyval(pr, yy), yy, '.-', 'LineWidth', 1); 
plot(polyval(pl, yy), yy, '.-', 'LineWidth', 1); 

çizebilirsiniz Ve elde edersiniz: enter image description here

tahmini eğrileri yeni rafine maske oluşturmak istiyorsanız

yapabilirsiniz aşağıdakileri yapın:

yy = 1:size(bw,1); %// single value per row 
xxr=polyval(pr,yy); %// corresponding column values 
xxl=polyval(pl,yy); 

Seti aynı boyutta

nbw = false(size(bw)); 
nbw(sub2ind(size(bw),yy,round(xxr)))=true; 
nbw(sub2ind(size(bw), yy, round(xxl))) = true; 

Ve sonucun yeni bir maske Her pikselin koordinatları ait `` (x, y) almak istiyorum

figure;imshow(nbw,'border','tight'); 

enter image description here

+0

Sadece çalıştı, ama sadece çizim için, yeni eğriler indisleri ikili görüntüde" mantıksal "(Ones) yapmak zorundayım. sadece bir arsa değil. Denedim ama sanki bir şey kaçırıyor gibiyim, bu son adımda bana yardım eder misin? –

+0

@MohamedSayed her satır değeri (y) için sütun değeri (X) alabilir, daha sonra indeksler – Shai

+0

almak için X değerlerini yuvarlarsınız. Dürüst olmak gerekirse, denemelerimden sonra hala yapamıyorum. Ve sanırım, noktalar ikili görüntüde "sürekli" eğri olmayan ayrık veya ayrı olacak! –