潇洒peter 发表于 2015-1-31 22:49

如图,怎么求得图中直线长度及角度?

如图,怎么求得图中直线长度及角度?

WSHXPY 发表于 2015-2-2 10:45

本帖最后由 WSHXPY 于 2015-2-2 10:56 编辑

现在回复楼主不知是否有点晚了,楼主的问题我也不能完全回答上来(不过本着互相交流学习的目的,还是有多少说多少吧,如果楼主你已经解决,不妨告诉我一下,多谢了),我只求出来了线段的长度,角度始终不知如何求解是好?只是有一个初始的方向,但进行不下去了。
clear all;
I=imread('madio.jpg');
I=im2bw(I);%把照片转化为二值图片
BW=edge(I,'sobel');%用“sobel”滤波器找去边缘,结果见提取边缘图
% 注意滤波器选择使用‘sobel’,提取出的边缘都是连续的,而用‘prewitt’等其他滤波器边缘不是闭合的导致使用regiongroups计算 % 线段条数时增多,好像是35条,实际22条
figure;
imshow(BW);
figure;imshow(I)
STATS = regionprops(BW, 'MajorAxisLength')%用“regiongroups”统计处有几条线段和每条线段边缘有多少个像素点组成
L=length(STATS);%结构体的长度
%求出图中每条线段的长度,即为近似每条线段边缘所占像素点除以2,不除也可以,统一量纲,或除以一个比例即可,把结果放入一个22×1的矩阵Len中
Len=zeros(22,1);
for i=1:L
    Len(i,1)=STATS(i,1).MajorAxisLength/2;
end
有关夹角的求解的几点不成熟的思考:
方法1,画出散点图,去拟合多条线段,斜率可得,自然夹角可求,不过我个人matlab不太好,不知道如何在一幅图中分别对不同区域进行拟合;
clear all;
I=imread('madio.jpg');
I=im2bw(I);
=find(I==0);
plot(x,y,'.');
方法二:分别求出每条线段的两个端点,端点有了,长度,夹角都可以求解,不过个人不知如何下手,希望有大神给个回复。

注:由于代码复制上去可能导致显示出一些表情符,我给出了源程序


页: [1]
查看完整版本: 如图,怎么求得图中直线长度及角度?