假如現在有如下一張灰階圖(圖檔名為001.jpg),現在要拟合圖中的那條白線

代碼如下(Matlab2017):
im=imread('001.jpg'); %讀取圖檔
%im=rgb2gray(im); %如果是rgb圖檔則轉為灰階圖
[h,w]=size(im); %擷取圖檔高(h)、寬(w)
%掃描每一個像素,并記錄白點(值為1)坐标及個數
n=0;
for y0=1:1:h
for x0=1:1:w
if(im(y0,x0)==255)
n=n+1;
y(n)=y0;
x(n)=x0;
end
end
end
%最小二乘法拟合直線
A = 0.0;
B = 0.0;
C = 0.0;
D = 0.0;
for i=1:1:n
A=A+x(i)*x(i);
B=B+x(i);
C=C+x(i)*y(i);
D=D+y(i);
end
a = (C*n - B*D) / (A*n - B*B);
b = (A*D - C*B) / (A*n - B*B);
%灰階圖轉rgb彩色圖檔
imrgb=repmat(im,[1,1,3]);
%畫線,線寬3,紅色
for i=1:1:w
y=a*i+b;
y2=int32(y); %把y轉換成整數
%把線上的通道1(紅色)置為255
imrgb(y2-1,i,1)=255;
imrgb(y2,i,1)=255;
imrgb(y2+1,i,1)=255;
%把線上的其他通道(綠色和藍色)置為0
imrgb(y2-1,i,2)=0;
imrgb(y2,i,2)=0;
imrgb(y2+1,i,2)=0;
imrgb(y2-1,i,3)=0;
imrgb(y2,i,3)=0;
imrgb(y2+1,i,3)=0;
end
%顯示圖檔
imshow(imrgb);
運作結果如下: