这个库用来卷一个课堂作业,你们可以在里面测试一下肿瘤图像增强的效果怎么样。
一种基于label形状的局部对比度指标,原理是通过比较肿瘤目标区域(及其边缘附近区域)在原始图像与增强图像中的灰度均值差异,目的是提供一种直观且定量的图像增强效果评估方法。
还有一种用于测试图像增强效果的分割模型,通过比较分割模型在原始图像与增强图像上的预测结果,以评估增强算法在分割肿瘤区域方面的效果。这才是金标准。
直接把对应的结果放到对应图像的processed_pic文件夹下,然后运行其文件夹下的tset.py,就可以得到每个增强图像相对于原始图像的指标。
本项目的核心思想是利用预先标注的 label 图像来提取肿瘤区域,并通过距离变换选取该区域边缘附近的外部像素。对比测试图像中肿瘤内部与外部区域的灰度均值,将其差异作为图像增强效果的评价指标。该指标可用于比较原始图像与经过不同增强方法处理后的图像,评估增强算法在突出肿瘤特征方面的效果。
指标的计算过程分为以下几个主要步骤:
-
区域分离
- 利用 label 图像通过二值化和轮廓提取,确定肿瘤目标区域。
- 对于多区域情况,默认仅选取面积最大的闭合区域(如果需要考虑所有区域,可对代码做相应修改,将所有闭合区域合并)。
-
内部区域灰度计算
- 根据提取的目标区域构造内部掩模,在测试图像中提取对应区域的灰度值,并计算平均灰度值(记作
result)。
- 根据提取的目标区域构造内部掩模,在测试图像中提取对应区域的灰度值,并计算平均灰度值(记作
-
外部边缘区域采样
- 生成目标区域边缘掩模,并利用距离变换计算每个非目标像素到边缘的距离。
- 在外部区域中选择距离边缘最近的像素,数量与内部区域像素数一致,计算其灰度均值(记作
answer)。
-
差异指标计算
- 两者差异
difference = |result - answer|描述了目标区域与其邻近外部环境的灰度对比度。 - 对于增强图像和原始图像分别计算
difference,并定义指标sjj_answer = |difference_processed - difference_raw|用于反映增强效果的提升或变化。
- 两者差异
项目主要包含以下几部分:
- 核心模块:实现
compute_difference函数,完成内部区域与外部区域灰度均值的计算,并输出difference值。 - 批量处理脚本:支持对多个图像进行批量处理。程序会遍历指定文件夹,使用同一 label 图像作为模板,依次计算每张测试图像的指标,并与原始图像进行对比,因为只有这样做才能消除不同图像本身肿瘤位置的差异性的影响,输出每个增强图像的
sjj_answer。
- 将项目代码克隆或下载至本地。
- 根据实际情况准备三个文件夹:
raw_pic:包含一张原始图像。my_label:包含一张标注图像(用于定义肿瘤区域)。processed_pic:包含多张经过图像增强处理的图像。
- 保证所有图像均为灰度图(分辨率建议统一为 255x255)。
- 在终端运行批量处理脚本:
运行后脚本会输出原始图像与增强图像各自的指标,并打印每个增强图像相对于原始图像的
python test.py
sjj_answer值。
- 当前代码默认仅处理 label 图像中面积最大的闭合区域。如需同时处理多个闭合区域,可将所有轮廓合并后再计算。
- 选择外部像素时确保其数量与内部区域一致,若外部像素不足将抛出异常,请根据图像特点调整处理策略。
- 参数(二值化阈值、距离变换等)可根据实际图像情况进行调整和优化。
- 你不会还要requirements.txt吧
欢迎对本项目进行贡献和改进。你如果闲的蛋疼可以试试用这个算法来做一个图像增强的神经网络的loss_function,不过我不保证能收敛。 如有疑问或建议,请提交 issue 或 pull request。
本项目采用 MIT License 开源许可证。
