Tamura 纹理特征提取及应用
项目简介
本项目是一个基于 MATLAB 平台开发的计算机视觉纹理分析系统。它实现了经典的
Tamura 纹理特征提取算法,旨在量化描述图像的纹理视觉感知属性。Tamura 特征基于人类心理学对纹理感知的研究,将纹理特性分为六个核心维度。该工具包提供了从图像读取、预处理、特征计算到结果可视化的完整流程,适用于图像检索(CBIR)、表面缺陷检测及医学影像分析等领域。
功能特性
系统通过算法实现了以下六大纹理特征的提取与分析:
- 粗糙度 (Coarseness):反映纹理颗粒的大小,是 Tamura 特征中最基本的属性。
- 对比度 (Contrast):通过灰度分布的统计特性(动态范围、极化程度)来度量图像的质量。
- 方向度 (Directionality):描述纹理是否存在明显的方向性以及方向的集中程度。
- 线像度 (Line-likeness):描述纹理基元是否呈线状结构。
- 规整度 (Regularity):反映纹理在整个图像中重复模式的规则程度。
- 粗略度 (Roughness):粗糙度与对比度的综合指标。
此外,系统包含自动化的容错机制,当指定测试图片不存在时,能够自动生成合成纹理图像进行算法验证。
系统要求
- 运行环境:MATLAB (推荐 R2018b 及以上版本)
- 工具箱依赖:Image Processing Toolbox (主要用于
fspecial, imfilter, rgb2gray 等图像处理函数)
使用方法
- 环境准备:确保 MATLAB 已安装所需的图像处理工具箱。
- 运行程序:直接运行主入口函数。
- 图像输入:
* 代码默认尝试读取 MATLAB 内置图片(如
peppers.png)。
* 如果需要测试自定义图片,可在代码初始化部分修改读取路径(建议使用绝对路径)。
* 若读取失败,系统会自动生成一张包含正弦波纹和高斯噪声的合成纹理图用于演示。
- 结果查看:
*
命令行窗口:程序运行结束后,会在控制台输出六个特征的具体数值。
*
图形窗口:可以查看原始灰度图、最佳尺寸图 ($S_{best}$)、梯度方向直方图以及六维特征向量的柱状图。
核心算法实现细节
本项目代码逻辑严谨,主要包含以下实现环节:
1. 图像预处理
- 格式转换:自动检测输入图像是否为彩色(RGB),如果是则转换为灰度图像。
- 数据类型转换:为了保证后续数学运算(如卷积、矩阵变换)的精度,将图像数据转换为
double 双精度浮点型。
2. 粗糙度 (Coarseness) 计算逻辑
该模块通过分析不同尺寸窗口内的平均灰度差异来确定最佳纹理尺寸:
- 多尺度窗口平均:设定窗口尺寸为 $2^k$ (k=1 至 5),分别对应 2x2 到 32x32 的邻域。使用均值滤波器计算每个尺度的平均灰度图。
- 方向差分计算:在水平和垂直方向上计算非重叠窗口的灰度差分。代码中利用了
circshift(循环移位)操作来高效计算矩阵差分,并通过掩膜(Mask)处理消除了由循环移位带来的边界误差。 - 最佳尺寸 ($S_{best}$):对每个像素点,比较不同 k 值下的差异,选取具有最大差异的 k 值,映射回实际尺寸 $2^k$,形成 $S_{best}$ 映射图。
- 特征值输出:计算整幅 $S_{best}$ 图的均值作为最终的粗糙度值。
3. 对比度 (Contrast) 计算逻辑
该模块基于图像灰度直方图的统计矩进行计算:
- 统计量计算:计算图像像素的均值、方差(二阶中心矩)以及四阶中心矩。
- 峰度结合:利用四阶矩与方差的平方比计算峰度 ($alpha_4$)。
- 公式实现:根据 Tamura 定义,对比度由标准差除以峰度的四分之一次方得出,综合考虑了灰度分布的离散程度和分布形态。
4. 方向度 (Directionality) 计算逻辑
该模块评估纹理的方向分布特性:
- 边缘检测:使用 Sobel 算子分别提取水平 ($G_x$) 和垂直 ($G_y$) 梯度。
- 梯度向量计算:将笛卡尔坐标系的梯度转换为极坐标系,获取梯度幅值和角度。角度被规范化处理到 $[0, pi]$ 区间。
- 阈值过滤:为了消除平坦区域噪声的影响,设定阈值忽略梯度幅值较小的像素。
- 直方图构建:构建 16 个区间的梯度方向直方图,并进行归一化。
- 特征值计算:通过寻找直方图的峰值,并计算峰值附近的二阶矩(反映峰的尖锐程度)来量化方向度。峰越尖锐,方向度越高。
5. 线像度 (Line-likeness) 计算逻辑
该模块基于方向共生矩阵(Directional Co-occurrence Matrix)来衡量:
- 方向量化:首先计算梯度方向,并将其量化为离散的 $n$ 个方向码(代码中设为 8 个方向)。同样应用了阈值过滤。
- 共生矩阵构建:模拟计算两个像素点在特定距离 $d$(代码中设为 4)及特定方向位移下的共生概率。代码中实现了方向图的循环位移操作来统计空间共生关系。
6. 规整度 (Regularity) 与 粗略度 (Roughness)
- 规整度:在主流程中通过分块计算图像局部特征的标准差变化来评估。
- 粗略度:实现了 Tamura 定义的线性组合公式,即粗糙度与对比度之和,用于描述人类视觉对纹理“粗糙”程度的直观感受。
结果可视化
代码包含一个专门的可视化模块,在一个图形窗口中展示分析过程和结果:
- 原始灰度图像:展示预处理后的输入数据。
- 最佳尺寸图 ($S_{best}$):使用伪彩色(Jet colormap)展示图像各区域的纹理粗糙度尺度分布。
- 梯度方向直方图:展示图像边缘梯度的角度分布情况,直观反映主要纹理方向。
- 特征向量柱状图:
* 展示所有六个特征的归一化结果。
* 使用不同颜色区分不同维度的特征。
* 在柱状图上方标注精确的数值标签,方便数据记录。