なぜ使用しないのpolyfit
ですか?
[y x] = find( bw ); %// get x y coordinates of all curve points
ここで使用する必要がある 2 つの小さな「トリック」があります。
曲線が 2 つあるため、データ ポイントを左右の曲線に分割する必要があります。
right = x<300;
xr = x(right);
yr = y(right);
xl = x(~right);
yl = y(~right);
曲線は垂直に近いためx=f(y)
、「クラシック」よりもフィットする方がよいでしょうy=f(x)
:
pr = polyfit( yr, xr, 3 ); %// fit 3rd deg poly
pl = polyfit( yl, xl, 3 );
これで、それらをプロットできます
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 );
そして、あなたは得る:
推定された曲線から新しい洗練されたマスクを作成する場合は、次の操作を実行できます。
yy = 1:size(bw,1); %// single value per row
xxr=polyval(pr,yy); %// corresponding column values
xxl=polyval(pl,yy);
同じサイズの新しいマスクを設定します
nbw = false(size(bw));
nbw( sub2ind(size(bw),yy,round(xxr)) )=true;
nbw( sub2ind(size(bw), yy, round(xxl) )) = true;
そして結果
figure;imshow(nbw,'border','tight');