You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB批量打印时如何在纸张右下角添加切片编号?

MATLAB打印切片时在纸张右下角添加编号的解决方法

问题描述

需要打印约400张大脑切片图像,希望在每张纸张的右下角显示对应的切片编号,但当前图像仅占据纸张中央区域,无法直接在图像外侧插入文本。

切片预览图

切片预览图

原打印代码

for i=1:1:slices
    fprintf('SLICE %f OF %f\n', i, slices)
    imagesc(blox(:, :, i))
    colormap(flipud(gray)) 
    axis off;

    set(gcf, 'PaperPosition', [(py - dim2/10)/2 ,(px - dim1/10)/2, dim2/10, dim1/10]);
    set(gca, 'Position', [0 0 1 1]);

    for j=1:10
        print(gcf)
    end
end

解决方案

方法1:使用text函数结合归一化坐标

利用归一化坐标定位文本,确保编号始终出现在纸张右下角,不受图像大小限制:

for i=1:1:slices
    fprintf('SLICE %f OF %f\n', i, slices)
    imagesc(blox(:, :, i))
    colormap(flipud(gray)) 
    axis off;

    % 添加切片编号到右下角,归一化坐标适配整个窗口
    text(0.95, 0.05, ['切片编号: ', num2str(i)], ...
         'HorizontalAlignment', 'right', ...
         'VerticalAlignment', 'bottom', ...
         'Color', 'white', ... % 根据图像背景调整颜色,深色背景用白色,浅色用黑色
         'FontSize', 12, ...
         'Units', 'normalized');

    set(gcf, 'PaperPosition', [(py - dim2/10)/2 ,(px - dim1/10)/2, dim2/10, dim1/10]);
    set(gca, 'Position', [0 0 1 1]);

    for j=1:10
        print(gcf)
    end
end
  • Units设为normalized后,(0,0)对应窗口左下角,(1,1)对应右上角,0.95,0.05精准定位到右下角区域
  • 可根据实际需求调整FontSize和Color参数

方法2:使用annotation函数避免文本被遮挡

如果图像覆盖了text添加的内容,改用annotation在窗口顶层添加文本:

for i=1:1:slices
    fprintf('SLICE %f OF %f\n', i, slices)
    imagesc(blox(:, :, i))
    colormap(flipud(gray)) 
    axis off;

    % 添加顶层文本注释到右下角
    anno = annotation('textbox', [0.9, 0.02, 0.08, 0.05], ... % [x,y,宽度,高度] 归一化坐标
                     'String', ['切片编号: ', num2str(i)], ...
                     'HorizontalAlignment', 'right', ...
                     'VerticalAlignment', 'bottom', ...
                     'Color', 'white', ...
                     'FontSize', 12, ...
                     'EdgeColor', 'none'); % 隐藏文本框边框

    set(gcf, 'PaperPosition', [(py - dim2/10)/2 ,(px - dim1/10)/2, dim2/10, dim1/10]);
    set(gca, 'Position', [0 0 1 1]);

    for j=1:10
        print(gcf)
    end
    delete(anno); % 循环删除当前注释,避免下一张图叠加文本
end

方法3:调整图像区域预留文本空间

如果希望文本完全在图像外侧,可压缩图像显示区域,给右下角留出空白:

for i=1:1:slices
    fprintf('SLICE %f OF %f\n', i, slices)
    imagesc(blox(:, :, i))
    colormap(flipud(gray)) 
    axis off;

    % 调整坐标轴位置,右下角预留10%空间放文本
    set(gca, 'Position', [0 0 0.9 0.9]);

    % 在预留空间添加编号
    text(0.98, 0.02, ['切片编号: ', num2str(i)], ...
         'HorizontalAlignment', 'right', ...
         'VerticalAlignment', 'bottom', ...
         'Color', 'black', ...
         'FontSize', 12, ...
         'Units', 'normalized');

    set(gcf, 'PaperPosition', [(py - dim2/10)/2 ,(px - dim1/10)/2, dim2/10, dim1/10]);

    for j=1:10
        print(gcf)
    end
end

内容的提问来源于stack exchange,提问作者Bell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 01:10:14