【Matlab案例】imageJ + matlab 实现物体轨迹追踪及路径彩色上色

news2024/10/6 5:26:25

我们经常看到一些文献中对细胞或者粒子的运动轨迹进行上色,不同的颜色对应着不同的时间。一纯色的轨迹实现起来很方便,彩色的轨迹如何实现呢?本文使用imageJ获取轨迹数据,使用matlab对轨迹进行上色。结果如下:
在这里插入图片描述

1. imageJ 导入图像

导入视频,本案例使用的.mp4格式视频。需要安装一个插件,FFmpeg。
打开imageJ,找到更新页面(Help->Update…)
在这里插入图片描述
点击 Manage Update Sites
在这里插入图片描述
找到FFMPEG插件,并勾选,然后点击App and Close
在这里插入图片描述
最后点击Apply Changes
在这里插入图片描述
等待安装完成并重启软件后,就能找到插件了
在这里插入图片描述
点击Movie(FFMPEG),将自己的.mp4文件进行导入。
在这里插入图片描述注意需要取消勾选Use virtual stack,否则会报错。
在这里插入图片描述

2. imageJ轨迹追踪

2.1 手动轨迹追踪

点击Plugins->Tracking->Manual Tracking,进行手动轨迹追踪
在这里插入图片描述
根据自己视频需求,设置相关参数。如果只进行轨迹追踪,不需要特殊设置。然后点击Add track
在这里插入图片描述使用鼠标左键点击你关注的物体或者粒子,就能够得到每一帧图片中这个物体在整个图像中的X Y坐标,这些X Y坐标序列就是该物体的轨迹。后续我们将使用这些轨迹在Matlab中进行上色。
在这里插入图片描述
当完整所有帧中的轨迹点选,就会出现一条轨迹曲线。本文仅单个物体的轨迹追踪为例,如果需要同时追踪多个物体,需要再次点击Add track,然后重新从第一帧开始点取。
在这里插入图片描述
我们将得到数据保存下载,之后导入matlab中
在这里插入图片描述

2.2 自动轨迹追踪

随后添加

3. 在Maltab中为轨迹上色

首先读取图像数据以及 ImageJ导出的数据

clear all
clc
%% 读取数据
% 读取视频文件
videoFile = '示例视频.mp4';
video = VideoReader(videoFile);

% 创建一个视频写入对象,用于保存带有轨迹的视频
outputVideoFile = 'OutPut-示例视频.mp4';
outputVideo = VideoWriter(outputVideoFile, 'MPEG-4');
open(outputVideo);

% 读取CSV文件
data = readtable('data.csv');
% 获取x和y坐标数据,假设第一列是x坐标,第二列是y坐标
x = data{:, 3};
y = data{:, 4};
SliceN=data{:, 2};
trackNum=length(SliceN);

创建窗口用于实时显示绘制过程,可以修改colors来改变轨迹的映射颜色,也可以修改轨迹粗细

%%
% 创建一个图形窗口用于显示视频
hFig = figure;

% 获取jet颜色映射
cmap = jet;
% 归一化数据到[0, 1]
dataNormalized = (SliceN - min(SliceN)) / (max(SliceN) - min(SliceN));
% 使用round来确保索引是整数
colorIdx = round(dataNormalized * (size(cmap, 1) - 1)) + 1;
% 获取对应的颜色
colors = cmap(colorIdx, :);
% 轨迹粗细
lineWidth = 6;  % 可以设置为您需要的值
% 轨迹点大小
markerSize = lineWidth * 3;  % 确保点足够大以覆盖线段之间的间隙

对每一帧进行轨迹与图像叠加

while hasFrame(video)
    % 读取一帧
    frame = readFrame(video);

    % 在当前帧上绘制轨迹
    imshow(frame);
    hold on;  % 保持当前帧的图像,以便在上面绘制轨迹

    % 获取当前帧号
    frameNumber = video.CurrentTime * video.FrameRate;

    % 限制轨迹到当前帧号
    currentX = x(SliceN <= frameNumber);
    currentY = y(SliceN <= frameNumber);

    % 在帧上添加轨迹
    for k = 1:length(currentX)-1
        % 绘制点以覆盖线段间的间隙
        plot(currentX(k), currentY(k), '.', 'MarkerSize', markerSize, 'Color', colors(k, :));
        line([currentX(k) currentX(k+1)], [currentY(k) currentY(k+1)], 'Color', colors(k, :), 'LineWidth', lineWidth,'LineJoin','round');
    end

    hold off; % 结束绘图,以便下一帧可以重新开始绘制

    % 将带轨迹的帧写入输出视频
    frameWithPath = getframe(gca);
    writeVideo(outputVideo, frameWithPath.cdata);

    % 播放视频
    drawnow;
end

% 关闭视频写入对象
close(outputVideo);

% 关闭图形窗口
close(hFig);

% 打开带轨迹的视频
implay(outputVideoFile);

轨迹上色结果如下。因为CSDN上传文件大小限制,所以颜色会失真,实际效果很好。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; class Solution {public boolean circularArrayLoop(int[] nums) {int n nums.length;for (int i 0; i < n; i) {if (nums[i] 0) {continue;}int slow i, fast next(nums, i);// 判断非零且方向相同while (nums[slow] * nums[fast]…

Python爬虫(二)--http基本原理(Python Crawler (2) Basic Principles of HTTP)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

TriLite完成A轮扩展融资:加速AR微型投影仪技术创新与市场拓展

近日,全球领先的AR微型投影仪开发商TriLite宣布成功完成A轮扩展融资,将A轮融资总额提升至超过2000万欧元。这一轮融资不仅彰显了资本市场对TriLite技术实力和市场潜力的高度认可,更为其后续在AR微型投影仪领域的技术研发、产品迭代以及市场拓展提供了坚实的资金保障。以下是…

力扣刷题 | 两数之和

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 给定一个整数数组 nums 和…

C++ | Leetcode C++题解之第456题132模式

题目&#xff1a; 题解&#xff1a; class Solution { public:bool find132pattern(vector<int>& nums) {int n nums.size();vector<int> candidate_i {nums[0]};vector<int> candidate_j {nums[0]};for (int k 1; k < n; k) {auto it_i upper_…

Leetcode—416. 分割等和子集【中等】

2024每日刷题&#xff08;172&#xff09; Leetcode—416. 分割等和子集 C实现代码 class Solution { public:bool canPartition(vector<int>& nums) {int sum accumulate(nums.begin(), nums.end(), 0);if(sum % 2) {return false;}int m nums.size();int subSu…

自动售卖柜目标检测数据集 4880张 商品数据集 voc yolo

自动售货机商品检测数据集 名称 自动售货机商品检测数据集 (Automatic Vending Machine Product Detection Dataset) 规模 图像数量&#xff1a;4880张图像。类别&#xff1a;30种不同的商品类别。 数据划分 训练集 (Train)&#xff1a;通常占总数据的80%左右&#xff0c;…

【AI知识点】二项分布(Binomial Distribution)

二项分布&#xff08;Binomial Distribution&#xff09; 是概率论和统计学中描述独立重复的伯努利试验中成功次数的离散概率分布。它是基于多次独立的伯努利试验的扩展&#xff0c;用于描述在 n n n 次试验中发生成功的次数。 1. 二项分布的定义 二项分布用于描述在 n n n…

利用GPU进行训练

文章目录 一、GPU训练模型二、对比使用gpu和cpu进行训练所花费的时间三、GPU训练模型的第二种表达方式 一、GPU训练模型 GPU只能够训练三种变量&#xff0c;分别是&#xff1a; 网络模型 数据&#xff08;输入&#xff0c;标注targets&#xff09; 损失函数 使用方式是.cuda…

精品WordPress主题/响应式个人博客主题Kratos

Kratos 是一款专注于用户阅读体验的响应式 WordPress 主题&#xff0c;整体布局简洁大方&#xff0c;针对资源加载进行了优化。 Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净&#xff0c;简单且响应迅速的博客主题&#xff0c;Vtrois创建和维护&#xff0c; 主…

rockylinux9安装软件报错

1、rocky linux9再安装软件的时候报错&#xff1a; [rootClient119 yum.repos.d]# yum -y install epel-release [rootClient119 yum.repos.d]# yum -y install libcgroup Extra Packages for Enterprise Linux 9 - x86_64 …

【MySQL 09】表的内外连接

目录 1.内连接 创建表&#xff08;案例准备&#xff09; 案例&#xff1a; 2.外连接 2.1左外连接 案例&#xff1a; 2.2右外连接 案例&#xff1a; 1.内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过…

什么是pip? -- Python 包管理工具

前言 不同的编程语言通常都有自己的包管理工具&#xff0c;这些工具旨在简化项目的依赖管理、构建过程和开发效率&#xff0c;同时促进代码的复用和共享。每个包管理工具都有其独特的特点和优势&#xff0c;开发者可以根据自己的编程语言和项目需求选择合适的包管理工具。 pip是…

R语言的下载、安装及环境配置(RstudioVSCode)

0x01 R语言篇 一、软件介绍 R for Windows是一个免费的用于统计计算和统计制图的优秀工具&#xff0c;是R语言开发工具。它拥有数据存储和处理系统、数组运算工具&#xff08;其向量、矩阵运算方面功能尤其强大&#xff09;、完整连贯的统计分析工具、优秀的统计制图等功能。…

Spring Cloud之OpenFeign的具体实践

1 基本概念 OpenFeign基于Feign框架开发&#xff0c;而Feign是Netflix开源的一个声明式Web服务客户端。OpenFeign通过定义接口、注解和动态代理等方式&#xff0c;将服务调用的过程封装起来&#xff0c;使得开发者只需要定义服务接口&#xff0c;而无需关心底层的HTTP请求和序列…

qt 使用svg 图标的使用

1. 添加模块 在cmakeList.txt 中添加svg模块 2. 使用示例 这里已给已初始化的按钮设置图标为例&#xff1a; int width 12;int height 12;QSvgRenderer *minRenderer new QSvgRenderer(QString(":/resources/icon/min_window.svg"));QPixmap pixmap(width, h…

CSS——属性值计算

CSS——属性值计算 今天来详细讲解一下 CSS的属性值计算过程&#xff0c;这是 CSS 的核心之一&#xff08;另一个是视觉可视化模型&#xff0c;个人理解&#xff0c;这个相对复杂&#xff0c;以后再讲&#xff09;。 基本概念 层叠样式表&#xff1a;Cascade Style Sheet&am…

【YOLO学习】YOLOv5口罩检测实战

文章目录 1. 环境配置2. 下载代码3. 安装库3.1 安装pytorch3.2 安装其他库 4. 测试5. 数据标注6. 模型训练7. 界面可视化 1. 环境配置 1. 先参考其他文章安装 Anaconda 或者 Miniconda&#xff0c;我安装的是 Miniconda。 2. 更换国内源&#xff0c;以加快速度 。可以参考下面这…

使用Buildpacks构建Docker镜像

## 使用Buildpacks构建Docker镜像 ![](../assets/运维手册-Buildpacks-Buildpacks.io.png) ### Buildpacks简介 与Dockerfile相比&#xff0c;Buildpacks为构建应用程序提供了更高层次的抽象。具体来说&#xff0c;Buildpacks&#xff1a; * 提供一个平衡的控制&#xff0c;…

Koa2项目实战2(路由管理、项目结构优化)

添加路由&#xff08;处理不同的URL请求&#xff09; 路由&#xff1a;根据不同的URL&#xff0c;调用对应的处理函数。 每一个接口服务&#xff0c;最核心的功能是&#xff1a;根据不同的URL请求&#xff0c;返回不同的数据。也就是调用不同的接口返回不同的数据。 在 Node…