Hu矩的原理及应用

什么是Hu矩

Hu矩是一种描述图像形状特征的数学工具,核心思想:提取图像的形状信息,并对这些信息进行归一化,使得它们对图像的平移、旋转和缩放具有不变性。简单说,Hu矩就是一串数字,这串数字可以唯一的描述图像的形状特征,而且不管图像怎么移动、旋转和缩放,这组数字都不变。

Hu矩的原理

1,几何矩:图像的像素值的加权和,可以用来描述图像的形状。如:零阶矩(面积):图像中所有像素值的总和;一阶矩(质心):图像的重心位置;二阶矩(方向):图像的伸展方向。

2,归一化中心矩:为了消除平移和缩放的影响,几何矩会被归一化,变成中心矩。

3,Hu矩:基于归一化的中心矩的7个不变组合,这7个矩对图像的平移、旋转和缩放都具有不变性。

Hu矩的公式

1. 原始矩(Spatial Moments)

原始矩是图像中各个像素值的加权和。对于二维图像 f(x,y)f(x, y)f(x,y),它的原始矩 mpqm_{pq}mpq​ 可以通过以下公式计算:

mpq=∑x∑yxpyqf(x,y)m_{pq} = \sum_x \sum_y x^p y^q f(x, y)mpq​=x∑​y∑​xpyqf(x,y)

其中:

  • m00m_{00}m00​ 是图像的零阶矩,代表图像的总质量(像素总和),即: m00=∑x∑yf(x,y)m_{00} = \sum_x \sum_y f(x, y)m00​=x∑​y∑​f(x,y)
  • m10m_{10}m10​ 和 m01m_{01}m01​ 是图像的质心(中心位置),分别表示图像的水平和垂直质心位置。

2. 中心矩(Central Moments)

为了消除图像的平移影响,使用中心矩来表示图像的特征。中心矩 μpq\mu_{pq}μpq​ 通过以下公式计算:

μpq=∑x∑y(x−xˉ)p(y−yˉ)qf(x,y)\mu_{pq} = \sum_x \sum_y (x - \bar{x})^p (y - \bar{y})^q f(x, y)μpq​=x∑​y∑​(x−xˉ)p(y−yˉ​)qf(x,y)

其中 xˉ\bar{x}xˉ 和 yˉ\bar{y}yˉ​ 是图像的质心坐标,定义为:

xˉ=m10m00,yˉ=m01m00\bar{x} = \frac{m_{10}}{m_{00}}, \quad \bar{y} = \frac{m_{01}}{m_{00}}xˉ=m00​m10​​,yˉ​=m00​m01​​

3. 标准化中心矩(Normalized Central Moments)

为了消除尺度影响,使用标准化的中心矩来表示图像的特征,标准化中心矩 ηpq\eta_{pq}ηpq​ 通过以下公式计算:

ηpq=μpqm001+p+q2\eta_{pq} = \frac{\mu_{pq}}{m_{00}^{1 + \frac{p+q}{2}}}ηpq​=m001+2p+q​​μpq​​

4. Hu矩公式

Hu矩是基于标准化中心矩的组合,通常有7个不变矩。Hu在1959年提出了以下7个不变矩,作为对图像形状的描述:

  1. η1=η20+η02\eta_1 = \eta_{20} + \eta_{02}η1​=η20​+η02​

  2. η2=(η20−η02)2+4η112\eta_2 = (\eta_{20} - \eta_{02})^2 + 4\eta_{11}^2η2​=(η20​−η02​)2+4η112​

  3. η3=(η30−3η12)2+(3η21−η03)2\eta_3 = (\eta_{30} - 3\eta_{12})^2 + (3\eta_{21} - \eta_{03})^2η3​=(η30​−3η12​)2+(3η21​−η03​)2

  4. η4=(η30+η12)2+(η21+η03)2\eta_4 = (\eta_{30} + \eta_{12})^2 + (\eta_{21} + \eta_{03})^2η4​=(η30​+η12​)2+(η21​+η03​)2

  5. η5=(η30−3η12)(η30+η12)[(η21+η03)2−(η21−η03)2]\eta_5 = (\eta_{30} - 3\eta_{12}) (\eta_{30} + \eta_{12}) \left[ (\eta_{21} + \eta_{03})^2 - (\eta_{21} - \eta_{03})^2 \right]η5​=(η30​−3η12​)(η30​+η12​)[(η21​+η03​)2−(η21​−η03​)2]

  6. η6=(η20−η02)[(η30+η12)2−(η21+η03)2]\eta_6 = (\eta_{20} - \eta_{02}) \left[ (\eta_{30} + \eta_{12})^2 - (\eta_{21} + \eta_{03})^2 \right]η6​=(η20​−η02​)[(η30​+η12​)2−(η21​+η03​)2]

  7. η7=(3η21−η03)(η30+η12)[(η21+η03)2−(η21−η03)2]\eta_7 = (3\eta_{21} - \eta_{03}) (\eta_{30} + \eta_{12}) \left[ (\eta_{21} + \eta_{03})^2 - (\eta_{21} - \eta_{03})^2 \right]η7​=(3η21​−η03​)(η30​+η12​)[(η21​+η03​)2−(η21​−η03​)2]

这些7个Hu矩提供了一个不变特征集,可以用于图像的匹配、分类等应用,且对平移、旋转和尺度具有不变性。

Hu矩的应用场景

1,图像识别:如手写数字、字母、符号等,通过Hu矩,可以提取图像的关键形状特征,然后与数据库中的特征进行匹配;

2,目标检测和跟踪:检测视屏中的某个目标,通过Hu矩描述目标的形状,来进行跟踪;

3,形状匹配:医学图像中,器官的形状;工业检测中,匹配零件的形状是否符合标准;

4,图像分类:根据

Hu矩的优缺点

优:

1,不变性:对图像的平移、旋转和缩放具有不变性,使得它在很多实际应用中非常有用;

2,简单高效:Hu矩的计算相对简单,计算速度快,适合实时处理;

3,形状描述能力强:Hu矩能很好地描述图像的全局形状特征;

缺:

1,对噪声敏感:如果图像有噪声,Hu矩的计算结果可能受到影响;

2,局部特征不足:Hu矩主要描述图像的全局形状特征,无法捕捉图像的局部细节;

3,对形状敏感:若发生拉伸、扭曲等,Hu矩的不变性可能会失效;

4,特征维度低:Hu矩只有7个特征值,对于复杂的形状描述可能不够;

总结

1,Hu矩是一种用于描述图像形状特征的工具,具有平移、旋转和缩放不变性;

2,它适用于图像识别、目标跟踪、形状匹配等场景;

3,优点:简单高效、不变性强,缺点:对噪声和形变敏感,且无法描述局部细节;

代码

#include 
#include 

int main() {
    // 读取图像
    cv::Mat image = cv::imread("shape.png", cv::IMREAD_GRAYSCALE);
    if (image.empty()) {
        std::cerr << "Error: Could not load image!" << std::endl;
        return -1;
    }

    // 二值化图像(可选)
    cv::Mat binary;
    cv::threshold(image, binary, 128, 255, cv::THRESH_BINARY);

    // 计算图像的矩
    cv::Moments m = cv::moments(binary, true);

    // 计算 Hu矩
    cv::Mat huMoments;
    cv::HuMoments(m, huMoments);

    // 输出 Hu矩
    std::cout << "Hu Moments: \n";
    for (int i = 0; i < huMoments.rows; i++) {
        std::cout << huMoments.at(i) << std::endl;
    }

    return 0;
}

你可能感兴趣的:(算法,人工智能,机器学习)