如何以与图像相同的比例和尺寸绘制条形图?

时间:2013-07-02 13:52:34

标签: image matlab plot

我有一个图像,然后我通过一些聚合函数(例如mean)将其投影到其中一个边缘。我这样得到一维数字化数据。如何在完全相同的水平或垂直刻度下将其精确地绘制在源图像下方?

示例代码:

% loading image
image = imread('..\..\FruitSample_small.png');

%computing gradients
dx=double(image(1:end-1,2:end,:))-double(image(1:end-1,1:end-1,:));
dy=double(image(2:end,1:end-1,:))-double(image(1:end-1,1:end-1,:));

% computing total magnitude
a=sqrt(sum(dx.^2,3)+sum(dy.^2,3));

% projection on bottom
h = mean(a,1);

% drawing
figure;
subplot(2,1,1);
imshow(image);

subplot(2,1,2);

bar(h);
axis image;

我希望这里的条形图与上面的图像具有相同的宽度。另外,我希望直方图能够像图像一样精确地传播到相同的水平坐标。

1 个答案:

答案 0 :(得分:0)

这里的挑战是“轴图像”在图像轴上强制纵横比,这允许图像的显示尺寸与其设定尺寸不同。我的建议是忘记来自标准化单元的自动调整大小功能,并根据像素大小调整大小。如果将图像轴的大小设置为图像的大小(以像素为单位),则它将具有正确的宽高比,并且您可以对条形图使用相同的大小。

load clown; % use a built-in demo image.  Note the image is now in X

%computing gradients
dx=double(X(1:end-1,2:end,:))-double(X(1:end-1,1:end-1,:));
dy=double(X(2:end,1:end-1,:))-double(X(1:end-1,1:end-1,:));

% computing total magnitude
a=sqrt(sum(dx.^2,3)+sum(dy.^2,3));

% projection on bottom
h = mean(a,1);

% drawing
figure;
subplot(2,1,1);
imagesc(X);
size_x = size(X,2);
size_y = size(X,1);
set(gcf, 'Units', 'pixels')
fp=get(gcf, 'Position');
set(gca, 'Units', 'pixels');
set(gca, 'Position', [(fp(3)-size_x) / 2, (fp(4)-size_y) / 2 + 100, ...
                      size_x, size_y]);

subplot(2,1,2);
bar(h);
set(gca, 'Units', 'pixels');
set(gca, 'Position', [(fp(3)-size_x) / 2, 100, size_x, 100]);
set(gca, 'XLim', [1 size_x]);

我正在从图形大小自动计算偏移量,将结果置于图形中心。这是可调整大小。如果您调整图形本身,则必须重新运行集合(“位置”)以重新调整位置。如果您需要动态调整大小,则必须为resize事件添加处理程序,并在每次调整大小时调整大小。