📄 abovepolyfit.m
字号:
function st=AbovePolyfit(AboveL,aboveLabel)
for(iLabel=1:aboveLabel)
[r,c] = find(AboveL==iLabel);
cNum=numel(c);
cMax=0;
cMin=300;
for(iSort=1:cNum)
if(c(iSort)>cMax)
cMax=c(iSort);
end
if(c(iSort)<cMin)
cMin=c(iSort);
end
end
if(cNum<12)%若少于11个像素点,则用直线拟合
LineStruct(iLabel).fn = polyfit(c,r,1);
y1=LineStruct(iLabel).fn(1)*cMin + LineStruct(iLabel).fn(2);
y2=LineStruct(iLabel).fn(1)*cMax + LineStruct(iLabel).fn(2);
if(y1>y2)
LineStruct(iLabel).top.y=y2;
LineStruct(iLabel).top.x=cMax;
LineStruct(iLabel).low.y=y1;
LineStruct(iLabel).low.x=cMin;
else
LineStruct(iLabel).top.y=y1;
LineStruct(iLabel).top.x=cMin;
LineStruct(iLabel).low.y=y2;
LineStruct(iLabel).low.x=cMax;
end
yDelt=LineStruct(iLabel).top.y-LineStruct(iLabel).low.y;
xDelt=LineStruct(iLabel).top.x-LineStruct(iLabel).low.x;
LineStruct(iLabel).length = yDelt*yDelt+xDelt*xDelt;
LineStruct(iLabel).StyleFlag=1;
LineStruct(iLabel).flag=1;
else%曲线拟合
LineStruct(iLabel).fn = polyfit(c,r,2);
y3=LineStruct(iLabel).fn(1)*cMin*cMin+LineStruct(iLabel).fn(2)*cMin+LineStruct(iLabel).fn(3);
y4=LineStruct(iLabel).fn(1)*cMax*cMax+LineStruct(iLabel).fn(2)*cMax+LineStruct(iLabel).fn(3);
if(y3>y4)
LineStruct(iLabel).top.y=y4;
LineStruct(iLabel).top.x=cMax;
LineStruct(iLabel).low.y=y3;
LineStruct(iLabel).low.x=cMin;
else
LineStruct(iLabel).top.y=y3;
LineStruct(iLabel).top.x=cMin;
LineStruct(iLabel).low.y=y4;
LineStruct(iLabel).low.x=cMax;
end
yDelt=LineStruct(iLabel).top.y-LineStruct(iLabel).low.y;
xDelt=LineStruct(iLabel).top.x-LineStruct(iLabel).low.x;
LineStruct(iLabel).length = yDelt*yDelt+xDelt*xDelt;
LineStruct(iLabel).StyleFlag=2;
LineStruct(iLabel).flag=1;
end
end
st=LineStruct;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -