声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3324|回复: 13

[绘图技巧] 有关matlab中"Out of memory "的问题?

[复制链接]
发表于 2011-1-17 20:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
因需要处理一个12000×12000大小的矩阵,并将其保存为一个图片,但matlab提示"Out of memory ",已知该矩阵具有周期性,就是可将其分为120个100×12000的矩阵,在matlab里运行大小为3000×12000的矩阵,那么如何将4个3000×12000的矩阵存成一张大小为12000×12000的图片?
回复
分享到:

使用道具 举报

发表于 2011-1-18 09:27 | 显示全部楼层
本帖最后由 coohit 于 2016-9-12 16:35 编辑

  1. blockproc
复制代码
函数可以试一试
具体的可以看看帮助文件和roc的帖子
http://forum.vibunion.com/forum. ... p;page=1&extra=

评分

1

查看全部评分

 楼主| 发表于 2011-1-18 10:31 | 显示全部楼层
回复 2 # qibbxxt 的帖子

感谢qibbxxt!但是你发的那个连接打不开,我无法注册SimWe仿真论坛,能否给我提供个邀请码?万分感谢!
发表于 2011-1-18 11:35 | 显示全部楼层
本帖最后由 coohit 于 2016-9-12 16:38 编辑
http://forum.vibunion.com/forum.php?mod=viewthread&tid=148322&pid=852276&page=1&extra=

评分

1

查看全部评分

 楼主| 发表于 2011-1-18 20:32 | 显示全部楼层
回复 4 # ljelly 的帖子

谢谢,已注册!:@)
发表于 2011-1-18 22:00 | 显示全部楼层
Out of memory 问题 论坛讨论的挺多的,楼主搜一下吧!

点评

赞成: 5.0
赞成: 5
  发表于 2011-1-19 00:39
发表于 2011-1-19 00:45 | 显示全部楼层
roc那个帖学习了, 连同mathworks的问题也看了
可惜版本不够新, 无blockproc可试!:@L
但好奇问下此函数可解决LZ存储的问题吗?:@)
发表于 2011-1-19 10:36 | 显示全部楼层
本帖最后由 rocwoods 于 2011-1-19 10:37 编辑

嗯,blockproc函数也是最近的版本才出来的,非常给力,很多大图像问题即使按照blockproc的常规用法不好处理(我想Chaching老兄对这个问题的疑问就在这里吧),但换个思路,充分在其分块的矩阵对象以及处理函数句柄fun上面做文章也是可以解决的。
譬如楼主的问题,即可这样:

  1. a = rand(3000,12000);
  2. blockproc(ones(4,1),[1 1],@(block_struct) a,'Destination','E:\test.tif')
复制代码

评分

2

查看全部评分

 楼主| 发表于 2011-1-20 10:01 | 显示全部楼层
我的做法是:将100×12000的矩阵先转换成uint8类型,这样所占的存储空间小些,然后在将其复制成12000×12000的数组,matlab可以运行大小为12000×12000的uint8类型的数组。

评分

1

查看全部评分

 楼主| 发表于 2011-1-20 10:05 | 显示全部楼层
回复 8 # rocwoods 的帖子

a = rand(3000,12000);
blockproc(ones(4,1),[1 1],@(block_struct) a,'Destination','E:\test.tif')
??? Undefined function or method 'blockproc' for input arguments of type
'function_handle'.
运行是这样的,不知道为什么?

点评

你说的方法在老版本下不失为一种有效地方法,只是如果图片再大,可能就麻烦了。你的MATLAB版本太老,没有blockproc这个函数,所以报错,方便的话还是换R2010b吧。  发表于 2011-1-20 10:23
 楼主| 发表于 2011-1-20 10:27 | 显示全部楼层
回复 10 # lpp8515 的帖子

好的,谢谢解答!:@)
发表于 2011-1-20 23:30 | 显示全部楼层
本帖最后由 ChaChing 于 2011-1-20 23:31 编辑
lpp8515 发表于 2011-1-20 10:01
我的做法是:将100×12000的矩阵先转换成uint8类型,这样所占的存储空间小些,然后在将其复制成12000×1200 ...


可能个人还是习惯使用老版本, upgrade需要mm!:@L
所以我还是喜欢有这个答案
发表于 2011-1-23 10:52 | 显示全部楼层
顺带我也想问一下,我的程序里面有个360*180*1920的数据,memory里只能放一个,运行完之后就clear,为什么还是out of memory呢?
害我调试时只能运行一次,关掉matlab,然后再打开,再运行
发表于 2011-3-5 20:50 | 显示全部楼层
回复 13 # curb 的帖子

好奇试了下, 不会out of memory??
aa=rand(360,180,1920); clear
aa=rand(360,180,1920);
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-16 09:53 , Processed in 0.071443 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表