二值图像的曲线拟合,MATLAB
我有这个二进制图像二值图像的曲线拟合,MATLAB,matlab,image-processing,curve-fitting,binary-image,Matlab,Image Processing,Curve Fitting,Binary Image,我有这个二进制图像bw: 对物体的边缘进行一些测量。但首先我必须对两条边进行曲线拟合。结果应该是两条表示边的平滑曲线 我有每条边的索引,但我不能将它们用于将x-y数据作为拟合函数的输入数据。我的意思是它们不是x和f(x),实际上,它们在不同的位置都有相同的值(1)。说[xy]=find(BW)是不对的y这里不是x处的值,但可以肯定的是,应该有一种方法可以使用它们来对二进制图像进行某种缩放。我看起来很困惑,我被困在这里了 有什么建议吗?为什么不使用 这里需要使用两个小“技巧”: 您有两条曲线,因
bw
:
对物体的边缘进行一些测量。但首先我必须对两条边进行曲线拟合。结果应该是两条表示边的平滑曲线
我有每条边的索引,但我不能将它们用于将x-y数据作为拟合函数的输入数据。我的意思是它们不是x
和f(x)
,实际上,它们在不同的位置都有相同的值(1)。说[xy]=find(BW)
是不对的y
这里不是x
处的值,但可以肯定的是,应该有一种方法可以使用它们来对二进制图像进行某种缩放。我看起来很困惑,我被困在这里了
有什么建议吗?为什么不使用
这里需要使用两个小“技巧”:
right = x<300;
xr = x(right);
yr = y(right);
xl = x(~right);
yl = y(~right);
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');
你想得到属于一条直线的每个像素的坐标,然后拟合一个函数
[x;y]=f(t)
这是可行的,但只是为了绘图,我实际上需要在二值图像本身中,而不仅仅是绘图中,使新的曲线索引“逻辑”(one)。我试过了,但似乎我遗漏了什么,你能在最后一步帮我吗?@MohamedSayed你可以得到每行值(y)的列值(X),然后对X值进行四舍五入以获得指示。我感谢你的帮助,但说实话,在我试过之后,我仍然做不到。我认为这些点在二值图像中是离散的或分离的,而不是平滑的“连续”曲线@根据定义,二值图像中的点是离散的。你不能在非整数位置设置像素我知道,我不是这个意思。我的意思是,我需要为每一行设置一个“逻辑值”。换句话说,曲线中应该没有间隙……无论如何,当我尝试你的建议时,相同的旧边出现了,因为每一行都有多个列值,而不仅仅是一个。
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');