林井之头 2024-10-04 22:30 采纳率: 0%
浏览 3
问题最晚将于10月12日00:00点结题

matlab提取运动物体的坐标

1.目的:利用Matlab提取视频图像中小鼠的质心坐标,从而追踪小鼠运动轨迹。
2.原本方案:根据小鼠身体为黑色的特性,利用图像的灰度,调控阈值得到视频图像中所有黑色物体的ROI,最终根据ROI大小判断小鼠身体所在ROI。

for k = 1 : length(frame_need)% 读取所有帧
     frame = read(V,frame_need(k));    
     frame=frame(p(2):p(2)+p(4),p(1):p(1)+p(3),:);     
     frame_1=rgb2gray(frame);     
     frame_1=frame_1<Threshold;%进行逻辑判断,亮度小于阈值=1,否者为=0     
     frame_1=bwareaopen(frame_1,650);% 取图像I内连通区域大于100的区域
     ROI=regionprops(frame_1);%测量图像内区域的特征 
     S=size(ROI);
     if S(1)==0 %鼠没有被识别出来
        Cent_all(k,:)=NaN;%鼠质心为空
        Box_all(k,:)=NaN;
     end
 figure(1)
 imshow(frame);
     if S(1)==1  %老鼠被识别出来   
        [~,index] = max([ROI.Area]);
        Cent_all(k,:)=ROI(index).Centroid;%记录每一帧老鼠质心
        Box_all(k,:)=ROI.BoundingBox;
  hold on;%在原图基础上继续画图
   scatter(Cent_all(:,1),Cent_all(:,2),5,'MarkerEdgeColor'...
  ,'none','MarkerFaceColor',[1 0 0],'LineWidth',0.1);rectangle('Position',ROI.BoundingBox,'EdgeColor','b');
    hold off%显示逻辑判断后的图像
     end
   end  

3.出现的问题:视频图像中出现面积较大的固定的黑色背景区域,但该区域ROI和小鼠身体区域的ROI无法区分开。
4.原本处理方法:对视频图像进行预处理,即用其他的视频剪辑软件将黑色背景用浅色图像进行遮掩。再重新利用matlab,此时利用图像的灰度,调控阈值,可以得到小鼠的ROI,从而得到小鼠质心坐标。
5.最终问题:是否可以不用视频预处理的方法,而全程使用matlab代码,过滤掉大块的黑色背景物体,找到每一帧图像中小鼠的质心坐标?

补充
(图为原始视频某一帧图像,转为灰度图后通过阈值大小的条件,转换而成的新的图像,图中圆筒物体旁边的椭圆长条为小鼠。但是背景中固定位置的物体即圆筒的ROI面积不比小鼠面积小,所以难以直接选取到小鼠的ROI)

img



  • 写回答

16条回答 默认 最新

  • 阿里嘎多学长 2024-10-04 22:31
    关注

    AIGC生成:


    提取运动物体的坐标

    你想使用 Matlab 来追踪小鼠的运动轨迹,提取其质心坐标。下面是一个基本的解决方案:

    1. 读取视频图像:使用 imread 函数读取视频图像。
    2. 灰度化图像:使用 rgb2gray 函数将图像转换为灰度图像。
    3. 阈值分割:使用 im2bw 函数根据阈值分割图像,得到黑色物体的 ROI。
    4. ROI 的大小判断:使用 regionprops 函数计算 ROI 的大小,判断是否为小鼠。 5.质心坐标计算:使用 regionprops 函数计算 ROI 的质心坐标。

    以下是一个简单的示例代码:

    % 读取视频图像
    img = imread('video.mp4');
    
    % 灰度化图像
    gray_img = rgb2gray(img);
    
    % 阈值分割
    thresh_img = im2bw(gray_img, 0.5);
    
    % ROI 的大小判断
    stats = regionprops(thresh_img, 'Area');
    if stats.Area > 1000 % 小鼠的大小约为 1000x1000
        % 计算 ROI 的质心坐标
        [x, y] = regionprops(thresh_img, 'Centroid');
        disp([x, y]);
    end
    

    请注意,这只是一个基本的示例代码,实际实现中可能需要对图像进行更多的处理和调整。


    评论

报告相同问题?

问题事件

  • 创建了问题 10月4日

悬赏问题

  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥15 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答
  • ¥15 如何根据一个截图编写对应的HTML代码
  • ¥15 stm32标准库的PID角度环