手势二值图提取5阶Hu矩特征,用matlab实现并作出详细解释
时间: 2023-06-01 09:03:40 浏览: 48
手势二值图提取5阶Hu矩特征的步骤如下:
1. 读入手势二值图像并进行预处理,如去除噪声和平滑处理等。
2. 计算图像的几何矩,包括0阶矩、1阶矩、2阶矩等。
3. 根据几何矩求出归一化中心矩,包括归一化的2阶矩、3阶矩等。
4. 根据归一化中心矩求出5阶Hu矩,包括第一、二、三、四、五阶Hu矩。
5. 输出5阶Hu矩特征值。
以下是MATLAB实现代码:
```matlab
% 读入图像
img = imread('gesture.bmp');
% 预处理,去除噪声和平滑处理
img = im2bw(img);
img = imopen(img, strel('disk', 3));
img = imclose(img, strel('disk', 5));
img = imfill(img, 'holes');
% 计算几何矩
M00 = sum(sum(img));
M10 = sum(sum((1:size(img, 2)) .* img));
M01 = sum(sum((1:size(img, 1))' .* img));
M11 = sum(sum(bsxfun(@times, (1:size(img, 1))', (1:size(img, 2)) .* img)));
M20 = sum(sum(bsxfun(@minus, (1:size(img, 2))', M10 / M00).^2 .* img));
M02 = sum(sum(bsxfun(@minus, (1:size(img, 1)) , M01 / M00).^2 .* img));
M21 = sum(sum(bsxfun(@times, bsxfun(@minus, (1:size(img, 1))', M01 / M00), bsxfun(@minus, (1:size(img, 2))', M10 / M00).^2 .* img)));
M12 = sum(sum(bsxfun(@times, bsxfun(@minus, (1:size(img, 2))', M10 / M00).^2, bsxfun(@minus, (1:size(img, 1))', M01 / M00) .* img)));
M30 = sum(sum(bsxfun(@minus, (1:size(img, 2))', M10 / M00).^3 .* img));
M03 = sum(sum(bsxfun(@minus, (1:size(img, 1))', M01 / M00).^3 .* img)));
% 归一化中心矩
nu20 = M20 / (M00^2);
nu02 = M02 / (M00^2);
nu11 = M11 / (M00^2);
nu30 = M30 / (M00^2.5);
nu03 = M03 / (M00^2.5);
nu21 = M21 / (M00^2.5);
nu12 = M12 / (M00^2.5);
% Hu矩
I1 = nu20 + nu02;
I2 = (nu20 - nu02)^2 + 4*nu11^2;
I3 = (nu30 - 3*nu12)^2 + (3*nu21 - nu03)^2;
I4 = (nu30 + nu12)^2 + (nu21 + nu03)^2;
I5 = (nu30 - 3*nu12) * (nu30 + nu12) * ((nu30 + nu12)^2 - 3*(nu21 + nu03)^2) + (3*nu21 - nu03) * (nu21 + nu03) * (3*(nu30 + nu12)^2 - (nu21 + nu03)^2);
% 输出特征值
hu_moments = [I1, I2, I3, I4, I5];
disp(hu_moments);
```
解释:
该代码首先读入手势二值图像,然后进行预处理,包括二值化、去除噪声、平滑处理和填充内部空洞等。
接着,根据手势二值图像计算几何矩,包括0阶矩、1阶矩、2阶矩等。
然后,根据几何矩求出归一化中心矩,包括归一化的2阶矩、3阶矩等。
最后,根据归一化中心矩求出5阶Hu矩,包括第一、二、三、四、五阶Hu矩,并输出特征值。
Hu矩是一种基于几何矩的特征描述方法,可以用于图像识别、目标跟踪等领域。其中,第一阶Hu矩描述了图像的整体大小,第二阶Hu矩描述了图像的方向,第三阶Hu矩描述了图像的偏斜程度,第四阶Hu矩描述了图像的形状特征,第五阶Hu矩描述了图像的曲率特征。