资源简介
本程序代码是通过Matlab编写完成的,里面有用高清相机拍摄的图片提取的二值化直线图像,每一幅图像都有几个MB;虽压缩包只有几十kb,但功能完善,没有任何问题。通过记录二值化图像像素点,利用设定的距离阈值参数,然后利用距离阈值参数通过最小二乘法迭代来剔除偏差较大的像素点,进而实现直线拟合,并在原二值化图像上面画上直线,记录直线方程(包括斜率和截距这两个参数)。请放心下载,资源没有任何问题。
代码片段和文件信息
clc;
clear;
close all;
%CPath = pwd;
%% 针对第二幅图拟合直线
image2 = logical(imread(‘1111.bmp‘));
figureimshow(image2);
% 获得保留图
[M2N2] = size(image2);
%% 直线拟合
[yx] = find(image2 == 1); %图像行对应的是y,列对应的是x
Dis_Treshold =1000;
kkk = 1;
while(kkk==1)
Num = length(x);
p = polyfit(xy1); %polyfit自带的拟合直线的函数
% 点到直线的距离 A*x+B*y+C=0; 距离:abs(A*x1+B*y1+C)/sqrt(A^2+B^2)
A = p(1); B = -1; C =p(2);
absdis = abs(A.*x + B.*y + repmat(C[length(x)1]))/sqrt(A^2+B^2); %求点到直线的距离
L = find(absdis < Dis_Treshold);
Num1 = length(L); %Num1与Num原理同上
x = x(L);
y = y(L);
if Num1 == Num
kkk = 0;
end
end
%% 画出拟合直线
disp([‘This line is: ‘num2str(A)‘*x‘num2str(B)‘*y+‘num2str(C)‘=0‘])
figureimshow(image2)title(‘拟合直线图‘);
hold on;
x1= linspace(min(x)max(x));
y1= polyval(px1);
plot(x1y1‘r‘‘linewidth‘0.5);
hold off;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2819894 2018-02-01 16:23 最小二乘法迭代直线拟合\111.bmp
文件 2819894 2017-12-28 21:25 最小二乘法迭代直线拟合\1111 - 副本.bmp
文件 2819894 2017-12-28 21:25 最小二乘法迭代直线拟合\1111.bmp
文件 2819894 2017-12-30 21:40 最小二乘法迭代直线拟合\2222.bmp
文件 1448758 2017-12-30 22:17 最小二乘法迭代直线拟合\3333.bmp
文件 1152 2018-02-01 15:37 最小二乘法迭代直线拟合\LineIiterfit.m
目录 0 2018-02-01 16:23 最小二乘法迭代直线拟合\
评论
共有 条评论