数学建模社区-数学中国

标题: 如图,怎么求得图中直线长度及角度? [打印本页]

作者: 潇洒peter    时间: 2015-1-31 22:49
标题: 如图,怎么求得图中直线长度及角度?
如图,怎么求得图中直线长度及角度?

line.jpg (63.5 KB, 下载次数: 258)

line.jpg


作者: 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
    Len(i,1)=STATS(i,1).MajorAxisLength/2;
end

有关夹角的求解的几点不成熟的思考:
方法1,画出散点图,去拟合多条线段,斜率可得,自然夹角可求,不过我个人matlab不太好,不知道如何在一幅图中分别对不同区域进行拟合;
clear all;
I=imread('madio.jpg');
I=im2bw(I);
[y,x]=find(I==0);
plot(x,y,'.');
方法二:分别求出每条线段的两个端点,端点有了,长度,夹角都可以求解,不过个人不知如何下手,希望有大神给个回复。

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


madio.jpg (63.74 KB, 下载次数: 236)

原图

原图

二值化.jpg (39.44 KB, 下载次数: 260)

二值化处理

二值化处理

提取边缘.jpg (56.06 KB, 下载次数: 230)

sobel滤波

sobel滤波

散点图.jpg (118.61 KB, 下载次数: 235)

散点图

散点图

ceshi.m

284 Bytes, 下载次数: 0, 下载积分: 体力 -2 点

源程序






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5