在同时显示多个图像时保持正确的宽高比

时间:2017-07-19 22:37:51

标签: matlab

我期待以下输出,

enter image description here

但是,获得以下输出

enter image description here

即。显示的图像'长宽比不正确。

原因是什么?我该如何解决这个问题?

源代码

的main.m

clear_all();       
image_name = 'woman.png';
I = gray_imread(image_name);
K = {I, I, I, I, ... 
     I, I, I, I, ...
     I, I, I, I};
draw_cell(K); 

draw_cell.m

function draw_cell(image_list)   
    if(iscell(image_list))
        figure;
        hold all
        colormap(gray(256));

        N = length(image_list);
        [m, n] = factor_out(N);

        display('cell');
        for k=1:N
            h = subplot(m,n,k);
            image(image_list{k},'parent',h);
            set(gca,'xtick',[],'ytick',[])
        end
        hold off
    else
        error('''image_list'' is not a cell array');
    end   


function [m, n] = factor_out(input_number)
    sqrtt = ceil(sqrt(input_number));    
    m = sqrtt;
    n = sqrtt;

1 个答案:

答案 0 :(得分:2)

维持图像宽高比的两种可能选项

  1. axis equalaxis image
  2. 对于大多数绘图功能,您可以使用axis equal命令在x和y轴上设置相同的比例。在绘制图像时,这相当于保持纵横比。您需要为每个子图调用此命令,因此我建议在subplot命令后立即使用它。

    为了专门绘制图像,axis equal命令会在图像周围留下空白区域。 axis image将保持宽高比并删除空格。

    1. imshow代替image
    2. 如果您有图像处理工具箱,则可以将imshow函数替换为image函数。 imshow假设您要显示图像并相应地限制色彩映射和宽高比。尽管其名称image旨在可视化任何矩阵数据,而不仅仅是图像。因此,它缩放像素以充分利用屏幕空间。如果您使用imagesc以及其他颜色缩放问题,您将遇到同样的问题。为了安全起见,在显示RGB和灰度图像时始终使用imshow,除非您有明确的理由不这样做。