MATLAB交互式图像精细切割与合成系统 (README)
项目简介
本项目开发了一套基于MATLAB的轻量级交互式图像处理应用程序。该系统通过构建图形用户界面(GUI),集成了一整套从图像导入、感兴趣区域(ROI)精细提取、智能掩膜生成到背景透明化或替换的完整工作流。主要应用于需要人工辅助的精细抠图任务、图像拼接预处理以及特定数据集的制作。
系统完全采用MATLAB语言编写(单个 main.m 文件),利用了MATLAB强大的矩阵运算能力和图像处理工具箱(Image Processing Toolbox)中的交互式ROI对象,实现了对目标物体的高精度分离与合成。
核心功能特性
- 多格式图像支持与预处理:能够读取 JPG, PNG, BMP, TIFF 等主流图像格式。系统具备鲁棒的预处理机制,当导入灰度图像时,会自动将其转换为伪彩色(RGB格式),确保后续的矩阵运算和显示逻辑统一。
- 交互式ROI提取:提供两种精细的区域选择工具:
*
多边形选择 (Polygon):通过鼠标点击定义一系列顶点,双击闭合区域,适用于几何形状明显的物体。
*
徒手绘制 (Freehand):支持鼠标按住拖动绘制任意不规则轮廓,松开即闭合,带有平滑处理,适用于复杂边缘的物体。
- 智能掩膜生成:基于用户的交互操作,通过
createMask 函数自动计算生成与原图尺寸严格匹配的逻辑二值掩膜(Logical Mask),并提供边界可视化的即时反馈。 - 多种背景处理模式:
*
透明背景:利用Alpha通道技术,将非目标区域的透明度设为0,生成可用于叠加的透明图层。
*
纯色合成:支持将背景实时替换为纯黑色或纯白色,通过矩阵运算实现前景与新背景的无缝融合。
*
透明PNG导出:支持带Alpha通道的PNG保存,完整保留抠图的透明属性。
*
数据归档:可将图像数据、掩膜数据和Alpha通道数据打包保存为MATLAB的
.mat 文件,便于后续算法调用。
*
独立掩膜保存:用户可选择将二值掩膜单独保存为图像文件,用于机器学习标注或图像分割真值。
系统要求
- 软件环境:MATLAB R2018b 或更高版本。
- 工具箱依赖:必须安装 Image Processing Toolbox(图像处理工具箱),用于支持
drawpolygon, drawfreehand, createMask 及 visboundaries 等函数。
使用方法
- 启动程序:在MATLAB命令行运行主函数,即可弹出操作界面。
- 导入图像:点击左侧面板的“导入图像 (Open)”按钮,选择待处理的图片文件。
- 绘制选区:
* 选择“多边形选择”或“徒手绘制”按钮。
* 在右侧图像显示区进行绘制(左键点击添加顶点或拖动绘制)。
* 绘制完成后,点击“确认选区并生成掩膜”按钮,系统将显示红色边界以确认掩膜已创建。
- 背景处理:根据需求点击“生成透明背景”、“背景转黑色”或“背景转白色”,右侧图像将实时预览处理结果。
- 结果保存:
* 点击“保存图像与掩膜”按钮。
* 选择保存路径和格式(推荐 PNG)。
* 系统会询问是否单独保存Mask掩膜文件,根据需要选择。
- 重置:如需重新开始,点击“重置系统”按钮清空当前状态。
代码实现与算法分析
本项目的核心逻辑实现于 main.m 中,采用嵌套函数(Nested Functions)架构,通过共享主函数命名空间内的变量(如 imgRaw, roiObj, imgMask)来管理应用程序的状态。
1. 界面与交互构建
界面摒弃了传统的 GUIDE 或 App Designer,完全通过纯代码(Programmatic GUI)构建。利用
figure,
uipanel,
uicontrol (Pushbutton, Text) 和
axes 函数搭建布局。这种方式保证了代码的独立性,无需依赖
.fig 文件,且便于动态调整控件位置。
2. ROI 交互与掩膜计算
- ROI 对象:代码中通过调用
drawpolygon 和 drawfreehand 在当前坐标轴(hAx)上实例化 ROI 对象。这些对象具有内置的交互属性(可拖动顶点、调整形状)。 - 掩膜生成:核心函数
createMask(roiObj) 被用于将矢量化的多边形或轮廓数据转换为栅格化的逻辑矩阵(Logical Matrix)。该矩阵中,感兴趣区域内的像素值为 1(true),背景为 0(false)。
3. 背景合成算法
背景处理逻辑位于内部函数
process_background 中,针对不同模式实现了具体的矩阵运算:
- 透明模式:不修改 RGB 像素值,而是构建一个新的 Alpha 通道矩阵。逻辑非常直接:
Alpha = uint8(Mask * 255)。即 Mask 为 1 的区域 Alpha 为 255(不透明),Mask 为 0 的区域 Alpha 为 0(全透明)。预览时通过设置 Image 对象的 AlphaData 属性实现。 - 纯色模式 (Matting):实现了标准的 Alpha 混合公式。首先将原图和掩膜转换为
double 精度,然后执行向量化运算:
结果 = 原图 × 掩膜 + 背景色 × (1 - 掩膜)
这种计算方式高效且能够处理边缘像素的简单硬切割。
4. 数据导出逻辑
在
cb_SaveResult 回调中,针对不同文件格式做了特殊适配:
- PNG 格式:利用
imwrite 的 'Alpha' 参数,将计算出的透明通道数据写入文件,这是实现透明背景抠图的关键步骤。 - JPG/BMP 格式:由于这些格式不支持透明通道,代码中包含了警告逻辑,直接保存合成后的 RGB 图像。
- MAT 格式:直接保存工作空间中的矩阵变量,保留了数据的原始精度。