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
相关产品推荐
相关产品推荐

