我期待以下输出,
但是,获得以下输出
即。显示的图像'长宽比不正确。
原因是什么?我该如何解决这个问题?
源代码
的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;
答案 0 :(得分:2)
维持图像宽高比的两种可能选项
axis equal
或axis image
对于大多数绘图功能,您可以使用axis equal
命令在x和y轴上设置相同的比例。在绘制图像时,这相当于保持纵横比。您需要为每个子图调用此命令,因此我建议在subplot
命令后立即使用它。
为了专门绘制图像,axis equal
命令会在图像周围留下空白区域。 axis image
将保持宽高比并删除空格。
imshow
代替image
如果您有图像处理工具箱,则可以将imshow
函数替换为image
函数。 imshow
假设您要显示图像并相应地限制色彩映射和宽高比。尽管其名称image
旨在可视化任何矩阵数据,而不仅仅是图像。因此,它缩放像素以充分利用屏幕空间。如果您使用imagesc
以及其他颜色缩放问题,您将遇到同样的问题。为了安全起见,在显示RGB和灰度图像时始终使用imshow
,除非您有明确的理由不这样做。