首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MATLAB:如果iamresize和VideoReader占用太多时间,我如何避免它们?

MATLAB:如果iamresize和VideoReader占用太多时间,我如何避免它们?
EN

Stack Overflow用户
提问于 2016-12-09 15:34:56
回答 1查看 46关注 0票数 1

我正在对视频帧进行基于均值偏移颜色的图像分割。下面是我的代码:

代码语言:javascript
运行
复制
 while hasFrame(v)
   if k == 1
       s(k).cdata = readFrame(v);
       a = s(k).cdata;
       I = imresize(a,[50,50]); 
       [means, Ims, Nms] = Ms(I,bw); %Mean Shift on first frame
       Ims = im2uint8(Ims);
       s(k).cdata = Ims;
   else
       s(k).cdata = readFrame(v);
       a = s(k).cdata;
       I = imresize(a,[50,50]);
       [Ims,data2cluster]= MeanShiftCluster2(I,means); % simple segmentation based on norm using means of first frame              
       Ims = im2uint8(Ims);
       Ims = imresize(Ims,[500,720]);
       s(k).cdata = Ims;
   end

   k=k+1;
 end

我发送第一个帧用于均值漂移实现,然后对所有其他帧使用相同的结果方法,以基于欧几里德距离计算它们各自的聚类(我的帧有微小的变化)。

问题:分析器显示iamresize和VideoReader函数执行时间太长。有没有我可以用的替代品?

EN

回答 1

Stack Overflow用户

发布于 2016-12-15 01:42:27

imresize可能是处理过程中最慢的一步。但这里有几个想法来加速这一过程。

imresize做的就是所谓的插值。这可能是一个缓慢的过程,但速度取决于您希望输出的质量。matlab中的缺省值是bicubic。您可以尝试使用bilinearnearest。例如:

代码语言:javascript
运行
复制
[...] = imresize(...,'nearest');

在我的个人实验中,我还发现imresize作为等价的函数有一些开销。通过对所有视频帧只调用一次该函数,您可能会“快得多”。您需要有足够的内存才能做到这一点。假设你的所有帧都在一个3d矩阵dataMovie中。当构建这个矩阵时,预分配(通过获取帧的数量)将有助于获得一些速度!

代码语言:javascript
运行
复制
k = 0.5; % scaling parameter
tform = affine2d([k 0 0;0 k 0;0 0 1]);
dataTform = imwarp(dataMovie,tform,'nearest');

然后,将您的处理应用于逐帧调整大小的影片。您还可以提供插值类型nearsetlinearbicubic

如果你正在处理一部彩色电影,你需要将所有帧的3个颜色层堆叠在一起,并使用适当的索引将它们取回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41055288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档