打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
18.1 计算运动中单摆的长度(2) - 51CTO.COM

18.1 计算运动中单摆的长度(2)

http://book.51cto.com  2009-06-24 14:43  张强/王正林  电子工业出版社  我要评论()

18.1  计算运动中单摆的长度(2)

注意到摆的颜色要比周围其他背景的颜色深,因此可以先将每帧图像转化为灰度图像,如图18-4所示。然后再将灰度图像转化为二值图像,如图18-5所示,使用imopen和imclearborder函数对二值图像进行形态学操作,对摆动目标进行分割。

 
图18-4  灰度图像
 
图18-5  二值图像

求取摆长。

代码如下:

  1. pend_centers = zeros(nFrames,2);  
  2. for count = 1:nFrames  
  3.     lab = bwlabel(seg_pend(:,:,count));%求标注矩阵  
  4.     property = regionprops(lab,'Centroid');%求图像质心信息  
  5.     pend_centers(count,:) = property.Centroid;  
  6. end  
  7. x = pend_centers(:,1); y = pend_centers(:,2);  
  8. figure; plot(x,y,'m.'), %绘制单摆的质心  
  9. axis ij; axis equal,   
  10. hold on;  
  11. xlabel('x'); ylabel('y');  
  12. title('pendulum centers');  
  13. abc = [x y ones(length(x),1)] \ -(x.^2 + y.^2);%求系数  
  14. a = abc(1); b = abc(2); c = abc(3);  
  15. xc = -a/2; yc = -b/2;  
  16. circle_radius = sqrt((xc^2 + yc^2) - c);%半径  
  17. pendulum_length = round(circle_radius)%取整  
  18. circle_theta = pi/3:0.01:pi*2/3;%角度范围  
  19. x_fit = circle_radius*cos(circle_theta)+xc;%质心x轴坐标  
  20. y_fit = circle_radius*sin(circle_theta)+yc;%质心y轴坐标  
  21. plot(x_fit,y_fit,'b-');%标注圆周  
  22. plot(xc,yc,'bx','LineWidth',2);%标注求取的圆心  
  23. plot([xc x(1)],[yc y(1)],'b-');%标注半径  
  24. text(xc-110,yc+100,sprintf('pendulum length = %d pixels',...  
  25.     pendulum_length)); 

注意到在每一帧图像中分隔出来的摆动目标形状并不完全相同,因此我们可以通过提取摆动目标的质心来避免这个问题。MATLAB图像处理工具箱中提供了函数regionprops可以求目标对象的质心。图18-6中底部的弧为求取的图像质心。

 
(点击查看大图)图18-6  简化的摆动模型

圆的方程为:

 

其中 为圆心。另一种方程描述为:

  。其中,
,可以使用最小二乘方法计算参数 , , ,求取的圆半径即为摆长,图18-6中标出了圆心、半径和摆动轨迹。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
(学习笔记)摄像机模型与标定——三个坐标系及其之间关系
Bresenham直线算法与画圆算法 (转)
matlab图像处理与photoshop图像处理的区别有哪些?
用Matlab来识别视频中物体的运动轨迹!
[转载]用matlab实现B样条曲线
对乒乓球回滚的分析与MATLAB模拟
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服