Image MATLAB中图形位图图像的加速保存

Image MATLAB中图形位图图像的加速保存,image,matlab,performance,Image,Matlab,Performance,我的计算机上的图像文件夹中有bmp图像。我将其命名为1.bmp到100.bmp。它们的大小都是576*768 我一个接一个地读了这一百幅图像。我从所有一百幅图像中选择矩形区域。矩形区域的像素坐标在垂直方向上从182变为281,在水平方向上从426变为639。我将表示矩形区域中所有像素坐标的图像之间像素值交换的图形保存到另一个文件 我的m文件如下: pixvalue=zeros(100); j=1 ;% will represent pixel coordinate sequence % fi

我的计算机上的图像文件夹中有bmp图像。我将其命名为1.bmp到100.bmp。它们的大小都是576*768

我一个接一个地读了这一百幅图像。我从所有一百幅图像中选择矩形区域。矩形区域的像素坐标在垂直方向上从182变为281,在水平方向上从426变为639。我将表示矩形区域中所有像素坐标的图像之间像素值交换的图形保存到另一个文件

我的m文件如下:

pixvalue=zeros(100);
j=1 ;% will represent pixel coordinate sequence 
%  find pizel coordinates in rectangular region 
 for y=182:281
       for x=426:639
           for i=1:100
          % read images
        s = sprintf('C:\\images\\%d.bmp', i);  
        A = imread(s);
        A=double(A);
        pixvalue(i)= A(y,x);
        end
       s2=sprintf('%d.plot', j);
      f=figure('visible','off'),
      plot(pixvalue);
      xlabel('images');
      ylabel('pixvalue');
      title(s2);
      s3=sprintf('C:\\registration\\%d.bmp', j);

      %% save figures as 8 bit bitmap to file
      print(f,'-dbmp256',s3);
      j=j+1;
       end
   end
不幸的是,这段代码一直运行得非常慢!!我怎样才能加速呢


向您致意……

您正在(281-182)*(639-426)次阅读同一幅图像

也许你应该在循环之前把所有的图片都读一遍。将其存储在某个变量中

你应该做你该做的

比如:

for i=1:100
    % read images
    s = sprintf('C:\\images\\%d.bmp', i);  
    A(i) = imread(s);
end

for x=...
    for y=...
        for i=1:100
            pixvalue(i)= A(i, y, x);
        end
    end

        ..
        ..

实际上,我记不太清楚matlab语法,但是在这个大循环之前,你必须在一个循环中阅读所有的图像。在这里,我更正了代码

在大循环中,使用A(i)而不是A


顺便说一句,我对它进行了优化,就好像前面的代码正在工作一样。。我现在没有matlab可供尝试。

您的代码可以分为两部分。首先,要加载图像数据并保存每个图像子区域的像素值。这可以通过以下代码完成:

subRegion = zeros(100,214,100);  % 3-D matrix to store image subregions
for i = 1:100,
  s = ['C:\images\' int2str(i) '.bmp'];      % Create file name string
  A = double(imread(s));  % Load image and convert to double precision
  subRegion(:,:,i) = A(182:281,426:639);    % Store subregion of image
end
接下来,您似乎希望在所有图像中绘制每个像素的值,并将打印输出到文件。这是大量的图像文件(21400!),运行起来肯定需要一段时间。如果您确定要执行此操作,有一种方法:

j = 1;  % Pixel index
for y = 1:100,  % Loop over rows
  for x = 1:214,  % Loop over columns
    hFigure = figure('Visible','off');
    data = subRegion(y,x,:);  % Get pixel value from all 100 images
    plot(data(:));
    xlabel('images');
    ylabel('pixvalue');
    title(['Plot ' int2str(j)]);
    outFile = ['C:\registration\' int2str(j) '.bmp'];
    print(hFigure,'-dbmp256',outFile);  % Save figure
    j = j+1;
  end
end

我制作了一个关于如何处理目录中文件子集的视频。这应该包括关于在目录中循环的部分


ufukgun,这里有个问题。IMREAD返回的图像是二维(或可能是三维)数组。您必须将它们存储在多维数组或单元格数组中。。。对于二维图像,类似这样:A(:,:,i)=imread(s);是的,你是对的。但我认为它应该自动存储在多维数组中。事实上,我现在的电脑上没有matlab,所以我会根据记忆回答..plot(subsection(y,x,:);%在这里,matlab给出了所有100幅图像的绘图像素值错误:错误使用==>绘图数据可能不超过2维。我更正了代码。问题是绘图无法将1×1×3矩阵识别为向量,因此需要首先对其进行重塑。