【问题标题】:Matlab: using avifile, addframe, getframe; the generated avi is contortedMatlab:使用avifile、addframe、getframe;生成的avi是扭曲的
【发布时间】:2011-04-29 18:21:21
【问题描述】:

我正在训练一种机器学习算法,并想制作一个 avi 来可视化权重随时间的变化。我把类似的东西放在一起:

aviobj = avifile( 'weights.avi' );
for jj = 1:whatever
  % do some training
  imagesc( ... ); % where '...' is stuff to reshape the weight matrix
  aviobj = addframe( aviobj, getframe );
end;
aviobj = close( aviobj );
implay( 'weights.avi' );

问题是,框架最终看起来像这样:

数字不应该有那个方向。我在 matlab 中生成的任何 avi 都会出现这种情况。

有什么建议吗?

-布赖恩

【问题讨论】:

  • 您是如何生成帧的?看起来每一行都被行索引循环移动。
  • 我正在使用imagesc 生成帧。该参数只是一个(重塑的)权重矩阵。然而,你的评论给了我一个想法。我在这里发布的图片是为了给出一些无可争辩的混乱,而重量可视化可能有人认为是正常的。权重也有类似的倾斜,但有一条黑线从右上角切到左下角。我敢打赌它会在输出帧中添加一列额外的像素。

标签: matlab video screen-capture avi


【解决方案1】:

终于有时间回到这个话题了。问题是由于轴。当使用image 或imagesc 之类的东西时,它会在图像的底部和左侧添加一条额外的黑色边框线。当您使用getframe 时,它只抓取绘制的图像数据,没有黑线。但是,帧本身比图像数据略大。

以下解决方法:

aviobj = avifile( 'weights.avi' );
fig = figure;
for jj = 1:whatever
  % do some training
  imagesc( ... ); % where '...' is stuff to reshape the weight matrix
  axis off;
  aviobj = addframe( aviobj, getframe( fig ) );
end;
aviobj = close( aviobj );
implay( 'weights.avi' );

设置axis off 修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多