matlab图像处理内存不足怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab图像处理内存不足怎么办?相关的知识,希望对你有一定的参考价值。

要把rgb转为hsv并显示分布,运行显示:
警告: Image is too big to fit on screen; displaying at 13%
> In imuitools\private\initSize at 71
In imshow at 282
In Untitled2 at 3
内存不足。请键入 HELP MEMORY 查看选项。

出错 rgb2hsv (line 75)
g = r(:,:,2); b = r(:,:,3); r = r(:,:,1);

出错 Untitled2 (line 6)
img2=rgb2hsv(img1);
是什么情况怎么办?
代码如下,多谢多谢

img1=imread('E:\HW2_Image.jpg');
figure;
imshow(img1);
impixelinfo

img2=rgb2hsv(img1);

for i=0
figure
% H = img2(10:3000,2470+i*100,1);
% S = img2(10:3000,2470+i*100,2);
V = img2(10:3000,2470+i*100,3);
% S=S.*V;
% S1=S*255;
H1=255*V;
% H2=fft(H1)/1000;
% mag=abs(H);
plot(H1,'r')
hold on
% plot(S1,'k')

axis equal
end
xlabel('x axis')
ylabel('y axis')
text(2000,1000,'imag2')

这是因为储存空间不足,造成的问题。

1、使用命令选项启动MATLAB,使用快捷键windows+r调出运行命令,

2、然后在弹出来的运行窗口中,点击输入命令matlab.exe -nojvm 敲击回车,

3、然后在弹出来的窗口中这样提示就完成了,这样运行的matlab只显示简单的命令行窗口,

参考技术A 一般out of memenry存在以下几种情况:
1、 变量需要的存储空间超过了可用的内存空间
2、 数据需要的存储空间,超过内存中最大的可用连续存储空间
3 、程序和问题求解方法的设计不周,导致内存溢出。
解决方法如下:
1、为矩阵变量预制内存而不是动态分配
在动态分配的过程中,由于开始Matlab所用的Block随着矩阵的增大而连续的为此矩阵分配内存,但是由于Block的不连续性,很有可能最开始分配的Block不能满足存储的需要,Matlab只好移动此Block以找到更大的Block来存储,这样在移动的过程中不但占用了大量的时间,而且很有可能它找不到更大的块,导致Out of Memory。而当你为矩阵变量预制内存时,Matlab会在计算开始前一次性找到最合适的Block,此时就不用为变量连续的分配内存。
比较下面两个程序:
(1)for k = 2:1000
x(k) = x(k-1) + 5;
end
(2)x = zeros(1, 1000);
for k = 2:1000
x(k) = x(k-1) + 5;
end
显然,第二个更好。最好的方法是,在程序一开始就位所有大的矩阵变量预制存存储单元。
2、尽量早的分配大的矩阵变量
Matlab使用heap method管理内存。
当在Matlab heap中没有足够的内存使用时,它会向系统请求内存。
但是只要内存碎片可以存下当前的变量,Matlab会重新使用内存。
所在在大内存变量clear以后,新建的小内存变量仍可以使用那部分内存空间,但相反就不行了。比如说a变量4M,b、c、d、e分别为1M,如果a被clear以后定义bcde,则可以使用a的空间,如果clear b,c,d,e以后,假如这四个变量不是连续的,那么a就不能使用它们释放的内存。
3、尽量避免产生大的瞬时变量,当它们不用的时候应该及时clear
4、将矩阵转化成稀疏形式
如果矩阵中有大量的0,最好存储成稀疏形式。稀疏形式的矩阵使用内存更少,执行时间更短。
5、使用pack命令
当内存被分为很多碎片以后,其实本身可能有很大的空间,只是没有作构的连续空间即大的Block而已。如果此时Out of Memory,此时使用pack命令可以很好的解决此问题。
6、如果可行的话,将一个大的矩阵划分为几个小的矩阵,这样每一次使用的内存减少。
7、增大虚拟内存
Windows XP,右键“我的电脑”->属性->高级->性能->设置,从而改变其虚拟内存。
Windows 7,右键“计算机”->属性->(左边栏)高级系统设置->高级->(性能)设置->高级->(虚拟内存)更改,建议物理内存的两倍左右,如果物理内存已经3G+,那就不用调整了。
8、尽量少使用系统资源(对于Windows)
Windows中字体、窗口等都是要占用系统资源的,所以在Matlab运行时尽量不要打开不用的窗口。
9、如果没有必要,不要启动java虚拟机,采用matlab -nojvm启动 (在快捷方式属性里面的 "..../matlab.exe") 改为("...../matlab.exe" - nojvm)
10、关闭Matlab Server
参考技术B 你输入memory看一下
你电脑多少内存?如果有4G,8G的,那如果你是32位matlab,那就装64位的。
按道理不应该内存不足啊,你这循环都没有,for i=0,你直接写i=0得了。
把别的不用的软件都关掉,在最开始加一句clear all把MATLABworkspace别的不相关的变量全部清除。追问

电脑4G内存,32位系统,
照你说的改了没有变化,显示Image is too big to fit on screen; displaying at 13% 怎么办呢,还有讲img2=rgb2hsv(img1);这一行怎么出错了
谢谢你

追答

32位的matlab内存最多也只能用到2G,你说的那个提示只是显示不影响处理。

那句命令出错的话你看看img1的图像格式是否正确

参考技术C 去掉所有 “figure” 就好了。

关于MATLAB处理大数据坐标文件

原先有3000条测试数据,MATLAB表现出来强大的数据处理能力,十几秒就可以把数据分类、分装并储存,这次共有10万条坐标数据,MATLAB明显后劲不足,显示内存不足

 

 

自我认识:以前MATLAB数据处理是手动将数据导入mat表格,再由程序运行表格数据,但是这次运行光坐标压缩文件就有35兆,就算导入成功也是相当恐怖的一个表格文件

解决方案:1、拒绝手动导入,程序导入

     2、不使用表格,表格的内存占用明显比文本文档大太多(当然,这种方案比较极端,但是必须执行,否则后期明显性能上就差别人一大截)

以上是关于matlab图像处理内存不足怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

系统错误8:存储空间不足,无法处理此命令.怎么办

关于MATLAB处理大数据坐标文件

电脑提示存储空间不足,无法处理此命令是啥原因?怎么解决

matlab安装时储存空间不足

如何解决“内存不足”的问题

win10电脑4g内存不足怎么办啊