我有几个户外路径的二进制图像,我需要得到一个精细的道路轮廓,但是,由于仍然存在噪声像素,我无法追踪准确的道路轮廓.我在Matlab中计算了houghlines函数的起点和终点之间的中点,并且能够分离道路的左右点.因此,我的想法是拟合左和右点的线性近似,这样我就能够去除两侧的噪声像素并干净地分离出道路区域.
问题:正如您在图片中看到的那样,拟合的直线不是沿着散射(x,y)点(红色)的最长轴,因此不合适.道路的某些侧面非常合适. polyfitn或polyfit函数的输出近似沿着较短的散射区域开始.我找到了几个带约束(开始和结束)的最小二乘逼近的代码示例,但只找到了1D自变量类型问题的例子.
这是我用来生成输出的Matlab代码.
imshow(binarizedimage320x240); % Binary 320x240 image
rightPoints % show rightPoint (x,y) coordinates from Hough Transform lines
sizeRt = size(rightPoints, 1);
x = zeros(sizeRt, 1);
y = zeros(sizeRt, 1);
for k = 1:sizeRt
x(k) = rightPoints(k,1);
y(k) = rightPoints(k,2);
end
x % show x values
y % show y values
% Linear fitting
p = polyfitn(x,y,'constant x+y') % show p
xi = 1:2:300;
yi = polyvaln(p, xi);
plot(x, y, 'ro', xi, yi, 'b-', 'LineWidth', 3);
变量:
rightPoints =
205.0000 108.0000
205.0000 162.5000
205.0000 276.0000
229.0000 123.5000
229.0000 254.5000
204.0000 87.5000
215.0000 265.0000
216.0000 121.0000
216.0000 255.0000
x =
205
215
216
229
205
229
216
205
204
y =
276.0000
265.0000
255.0000
254.5000
162.5000
123.5000
121.0000
108.0000
87.5000
p =
ModelTerms: [2x1 double]
Coefficients: [-152.6022 1.5730]
ParameterVar: [3.7729e+05 8.2396]
ParameterStd: [614.2421 2.8705]
R2: 0.0411
AdjustedR2: -0.0958
RMSE: 71.6719
VarNames: {'x+y'}
任何帮助将受到高度赞赏.谢谢.
最佳答案 看起来您可能会发现Isack和Boykov的
PEaRL适用于您的问题.
本文提出的算法制定了一种能量最小化方法,用于在嘈杂的场景中同时拟合几个几何模型(理论上优于Hough或Ransac).
我也相信他们有代码
here.