我有一个图像,然后我通过一些聚合函数(例如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;
我希望这里的条形图与上面的图像具有相同的宽度。另外,我希望直方图能够像图像一样精确地传播到相同的水平坐标。
答案 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事件添加处理程序,并在每次调整大小时调整大小。