将MATLAB矩阵保存为特定大小和分辨率的图像

时间:2016-02-24 08:34:45

标签: image matlab matrix file-io

在阅读this问题后,我想使用此代码将我的图片保存为特定尺寸。

    I_c(:,:) = cropped_matrix(i,:,:);
    set(I_c, 'PaperUnits', 'inches');
    x_width = 7.25;
    y_width = 9.125;
    set(I_c, 'PaperPosition', [0 0 x_width y_width]);
    imshow(I_c);
    saveas(I_c,'fig1.pdf');

I_c表示uint8的2D矩阵(约40x40)。

然而,我收到错误:

  

使用set Invalid handle

时出错

这让我相信我只能将这个代码用于数字而不是包含矩阵的矩阵。我该怎么做?

我已查看print set作为上述关联问题的第一个答案的建议,但它也建议使用'PaperUnits'.jpg。< / p>

注意:API问题也会考虑此问题,但建议采用相同的解决方案。

有关克劳利答案的说明

  1. 所以我只是尝试了你的回答代码。正在生成的colourmap如下所示。如何通过代码摆脱所有额外的白色区域?
  2. 当我使用image(ImData)时,如何将正在生成的数字的 im = image(I_c); set(gcf,'units','inches','position',[1 2 5 5]); set(gca,'ydir','normal','units','centimeters','position',[0 0 0.5 0.5].*get(gcf,'position')) ; filename = strcat('slice',int2str(i),'_','bead',int2str(j),'.jpg'); saveas(im,filename); 更改为灰度?
  3. This

    以下是实际数字的显示方式:

    enter image description here

    以下是我输入的代码:

    XmlDocument doc = new XmlDocument()
    doc.LoadXml(results); // probably some try-catch here
    var city = doc.SelectSingleNode("//CITY").InnerXml; //Handle null as well
    

1 个答案:

答案 0 :(得分:1)

假设我们的矩阵I_c包含值且xy坐标,因此值I_c(ii,jj)对应于x(ii)y(jj)坐标。

然后:

ImMin=min(min(I_c));    % Find the minimum value in I_c
ImData=I_c-ImMin;       % Ensure non-zero values
ImMax=max(max(ImData)); % Find maximum value in ImData
ImData=ImData./ImMax;   % Ensure ImData do NOT exceed 1

image(x,y,ImData*[1 1 1]) % plot the image in greyscale
set(gcf,'units','inches','position',[1 2 5 5]) % set active figure properties
set(gca,'ydir','normal','units','inches','position',[0 0 1 1].*get(gcf,'position')) % set active axes properties

export_fig(gcf,'figure-I_c','-png','-nocrop')

'ydir','normal'参数更改默认(1,1)点位于左下角的左上角“正常”位置。
[0 0 1 1].*get(gcf,'position)将读取活动数字位置(此处为[1 2 5 5]),并且在逐个元素乘法后,[0 0 5 5]将传递给position,这会导致轴适合图像。

export_fig函数将创建figure-I_c.png图像,如Matlab图所示,如果省略-nocrop,则会裁掉边缘中可能的空白区域。此功能可从MathWorks' File Exchange获得。