📄 s4p.m
字号:
%=========================================s4.m===========================================
%估算水管直径
I = imread('pipe_out.jpg'); %读入已经标记出边界的图像
x = 1:L(2)+2;
d = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; %记录直径的数组
%求出直径的斜率
k1 = -cos(th1)/sin(th1);
k2 = -cos(th2)/sin(th2);
k3 = 1/2*(k1+k2);
k = -1/k3;
%绘制出20条直径,用于估算水管的直径长度
for i = 1:20,
y = round(1000-1000*i + k*x); %直径的直线方程,相邻的直线截距相差1000个像素
%求出该直径的长度,存放到数组里
x1 = (r1/sin(th1) - 1000*(1-i))/(k + cos(th1)/sin(th1));
x2 = (r2/sin(th2) - 1000*(1-i))/(k + cos(th2)/sin(th2));
d(i) = sqrt((x1-x2)^2 + ((1000*(1-i)+k*x1) - (1000*(1-i)+k*x2))^2);
%绘制这条直径在水管边缘内的部分,为了显示清楚,使用红色并对x方向和y方向各画3个像素
for j = 2:L(2)+1,
if (y(j)>((r2 - j*cos(th2))/sin(th2))) && (y(j)<((r1 - j*cos(th1))/sin(th1))),
I(y(j)-1,j-1,1) = 255;
I(y(j)-1,j-1,2) = 0;
I(y(j)-1,j-1,3) = 0;
I(y(j)-1,j,1) = 255;
I(y(j)-1,j,2) = 0;
I(y(j)-1,j,3) = 0;
I(y(j)-1,j+1,1) = 255;
I(y(j)-1,j+1,2) = 0;
I(y(j)-1,j+1,3) = 0;
I(y(j),j-1,1) = 255;
I(y(j),j-1,2) = 0;
I(y(j),j-1,3) = 0;
I(y(j),j,1) = 255;
I(y(j),j,2) = 0;
I(y(j),j,3) = 0;
I(y(j),j+1,1) = 255;
I(y(j),j+1,2) = 0;
I(y(j),j+1,3) = 0;
I(y(j)+1,j-1,1) = 255;
I(y(j)+1,j-1,2) = 0;
I(y(j)+1,j-1,3) = 0;
I(y(j)+1,j,1) = 255;
I(y(j)+1,j,2) = 0;
I(y(j)+1,j,3) = 0;
I(y(j)+1,j+1,1) = 255;
I(y(j)+1,j+1,2) = 0;
I(y(j)+1,j+1,3) = 0;
end
end
end
di = sum(d) / length(d) %求出直径数组的均值,即估算出来的水管直径
imwrite(I,'result.jpg','jpg'); %将处理后的图像输出到result.jpg
%=======================================s4.m(end)=========================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -