二值图像中的线路

3次观点(过去30天)
Jan Kubicek.
Jan Kubicek. 2021年6月6日
评论: 马特J. 2021年6月7日
亲爱的同事们,
我想请问你在二进制图像中的计算角度。我有这个二进制图像(和许多类似),包含三个二进制对象。我需要用行拟合这样的二进制(白色)对象,主要是每个对象的这条线的计算角度由一个角度表示。
我试图通过我不成功。我只知道MATLAB包含内置函数polyfit(),它应该是近似诸如此类二进制对象的方式,但我无法实现该方法。我需要在某些变量中存储这些角度。例如,当我具有具有三个二进制对象的这样的二进制图像时,该变量如此包含三个角度。
非常感谢你的帮助。
1条评论
马特J.
马特J. 2021年6月7日
我只知道MATLAB包含内置函数polyfit(),应该是近似这种二进制对象的方式
Polyfit. 如果最佳拟合线完全垂直,或几乎如此,可能会失败。

登录评论。

答案(2)

马特J.
马特J. 2021年6月6日
编辑:马特J. 2021年6月6日
使用可能有助于 linear2dfit. 从此文件交换包
加载图像
s = RegionProps(BW,'Pixellist');
imshow(bw);
抓住;
为了i = 1:numel
LFIT(i)= linear2dfit(s(i).pixellist。');
XY = [LFIT(i).p1; LFIT(i).p2];
线(XY(:,1),XY(:,2),'颜色''C''行宽',3);
结尾
抓住离开
角度= - [LFIT.angle],%线角度
角度=
38.2326 43.5104 55.4355

图像分析师
图像分析师 2021年6月6日
尝试这样的polyfit:
%读取图像(发布图像为RGB)。
binaryimage = imread('image.png');
%从彩色图像转换为逻辑
如果尺寸(BinaryImage,3)> 1
BinaryImage = BinaryImage(:,:,1)> 0;
结尾
imshow(BinaryImage);%显示图像。
轴('在''图像');%显示轴刻度线标记
%识别单独的连接组件。(也可以使用bwlabel)
Props = RegionProps(BinaryImage,'Pixellist');
为了k = 1:长度(道具)每个Blob的百分比......
%获得BLOB中点的坐标。
x =道具(k).pixellist(:,1);
y = props(k).pixellist(:,2);
%适合一条线
系数= polyfit(x,y,1);
%获得该行的端点
x1 = min(x);
Y1 = Polyval(系数,X1);
x2 = max(x);
Y2 = Polyval(系数,x2);
抓住;
%绘制线从左到右x到右x。
线([x1,x2],[Y1,Y2],'颜色''r''行宽',3);
与原点的%计算角度在(1,1)上,这是图像的左上角,通常。
角度(k)= atan2d(y2-y1,x2-x1);
百分以希望它从另一个角落,左下角。
角度2(k)= atan2d(y1-y2,x2-x1);
结尾
%报告​​角度为命令窗口。
角度
角度2

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!

被某某人翻译