0

我有一个图像,然后我通过一些聚合函数(如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;

我希望这里的条形图与上图的宽度相同。此外,我希望直方图准确地传播到相同的水平坐标,就像图像一样。

4

1 回答 1

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]);

我正在根据图形大小自动计算偏移量,以将结果集中在图形上。这是不可调整大小的。如果您调整图形本身的大小,则必须重新运行 set('Position') 东西来重新调整位置。如果您需要它可以动态调整大小,则必须为调整大小事件添加一个处理程序,并在每次调整大小时调整大小。

于 2013-07-02T15:08:55.693 回答