形状特征提取-七个不变矩--matlab实现

不变矩在图像特征提取及目标识别中的应用
http://www.docin.com/p-1180583216.html

http://www.cnblogs.com/xuepei/p/3958300.html?utm_source=tuicool&utm_medium=referral

review
http://blog.csdn.net/Violette_/article/details/50769849

%**************************************************************************
%图像检索——形状特征提取
%利用HU的七个不变矩作为形状特征向量
%Image : 输入图像数据
%n: 返回七维形状特征行向量
%**************************************************************************
function n = Shape(Image)
% Image = imread('E:\\1\\1.jpg');
% [M,N,O] = size(Image);
M = 256;
N = 256;

%--------------------------------------------------------------------------
%彩色图像灰度化
%--------------------------------------------------------------------------
Gray = double(0.3*Image(:,:,1)+0.59*Image(:,:,2)+0.11*Image(:,:,3));

%--------------------------------------------------------------------------
%用Canny边缘检测提取边缘保留边缘灰度图像
%--------------------------------------------------------------------------
% BW = uint8(edge(Gray,'canny'));
Egray = uint8(edge(Gray,'canny'));
for i = 1:M
    for j = 1:N
        if Egray(i,j)==0
            Gray(i,j)=0;
        end
    end
end

%--------------------------------------------------------------------------
%Otsu提出的类判别分析法自动为每一幅廓图像选定阈值,然后用该阈值对图像二值化
%--------------------------------------------------------------------------
%计算灰度级归一化直方图
for i = 0:255
    h(i+1) = size(find(Gray==i),1);
end
p = h/sum(h);
%计算灰度均值
ut = 0;
for i = 0:255
    ut = i*p(i+1)+ut;
end
%计算直方图的零阶累积矩和一阶累积矩:
for k = 0:254
    w(k+1) = sum(p(1:k+1));
    u(k+1) = sum((0:k).*p(1:k+1));
end
%计算类分离指标
deltaB = zeros(1,255);
for k = 0:254    
    if w(k+1)~=0&w(k+1)~=1
        deltaB(k+1) = (ut*w(k+1)-u(k+1))^2/(w(k+1)*(1-w(k+1)));
    end
end
[value,thresh] = max(deltaB);
% deltaB = zeros(1,255);
% delta1 = zeros(1,255);
% delta2 = zeros(1,255);
% deltaW = zeros(1,255);
% for k = 0:254
%     if w(k+1)~=0&w(k+1)~=1
%         deltaB(k+1) = (ut*w(k+1)-u(k+1))^2/(w(k+1)*(1-w(k+1)));
%         delta1(k+1) = 0;
%         delta2(k+1) = 0;
%         for i = 0:k
%             delta1(k+1) = (i-u(k+1)/w(k+1))^2*p(i+1)+delta1(k+1);
%         end
%         for i = k+1:255
%             delta2(k+1) = (i-(ut-u(k+1))/(1-w(k+1)))^2*p(k+1)+delta2(k+1);
%         end
%         deltaW(k+1) = delta1(k+1)+delta2(k+1);
%     end
% end
% for i = 1:255
%     if deltaB==0
%         yita=0;
%     else
%         yita(i) = 1/(1+deltaW(i)./deltaB(i));
%     end
% end
% % D的最大值作为最佳阈值
% [value,thresh] = max(yita);

%对图像二值化
for i = 1:M
    for j = 1:N
        if Gray(i,j)>=thresh
            BW(i,j) = 1;
        else
            BW(i,j) = 0;
        end
    end
end

%--------------------------------------------------------------------------
%计算图像质心:(I,J)
%--------------------------------------------------------------------------
m00 = sum(sum(BW)); %零阶矩
m01 = 0;              %一阶矩 
m10 = 0;              %一阶矩
for i = 1:M
    for j = 1:N
        m01 = BW(i,j)*j+m01;
        m10 = BW(i,j)*i+m10;
    end
end
I = (m10)/(m00);
J = m01/m00;

%--------------------------------------------------------------------------
%中心矩:
%--------------------------------------------------------------------------
u11 = 0;
u20 = 0; u02 = 0;
u30 = 0; u03 = 0;
u12 = 0; u21 = 0;
for i = 1:M
    for j = 1:N
        u20 = BW(i,j)*(i-I)^2+u20;
        u02 = BW(i,j)*(j-J)^2+u02;
        u11 = BW(i,j)*(i-I)*(j-J)+u11;
        u30 = BW(i,j)*(i-I)^3+u30;
        u03 = BW(i,j)*(j-J)^3+u03;
        u12 = BW(i,j)*(i-I)*(j-J)^2+u12;
        u21 = BW(i,j)*(i-I)^2*(j-J)+u21;
    end
end
u20 = u20/m00^2;
u02 = u02/m00^2;
u11 = u11/m00^2;
u30 = u30/m00^(5/2);
u03 = u03/m00^(5/2);
u12 = u12/m00^(5/2);
u21 = u21/m00^(5/2);
%--------------------------------------------------------------------------
%7Hu不变矩:
%--------------------------------------------------------------------------
n(1) = u20+u02;
n(2) = (u20-u02)^2+4*u11^2;
n(3) = (u30-3*u12)^2+(u03-3*u21)^2;
n(4) = (u30+u12)^2+(u03+u21)^2;
n(5) = (u30-3*u12)*(u30+u12)*((u30+u12)^2-3*(u03-3*u21)^2)+(u03-3*u21)*(u03+u21)*((u03+u21)^2-3*(u30+u12)^2);
n(6) = (u20-u02)*((u30+u12)^2-(u03+u21)^2)+4*u11*(u30+u12)*(u03+u21);
n(7) = (3*u21-u03)*(u30+u12)*((u30+u12)^2-3*(u03-3*u21)^2)+(u30-3*u21)*(u03+u21)*((u03+u21)^2-3*(u30+u12)^2);
% %--------------------------------------------------------------------------
% %内部归一化:
% %--------------------------------------------------------------------------
% en = mean(n);
% delta = sqrt(cov(n));
% n = abs(n-en)/(3*delta);
  • 9
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: 手势二值图提取5阶Hu特征是一种基于图像处理的方法,可以用于识别手势。Hu是一种描述图像形状的特征向量,具有旋转、平移和缩放不变性。下面是用matlab实现手势二值图提取5阶Hu特征的步骤: 1. 读取手势二值图像,将其转换为灰度图像。 2. 计算二值图像的重心坐标,即图像的质心。 3. 计算图像的归一化中心,用来消除图像的平移不变性。其中,归一化中心的计算公式为: u20 = m20 / m00 - x^2 u02 = m02 / m00 - y^2 u11 = m11 / m00 - x * y 其中,m20、m02和m11分别为二阶,x和y为重心坐标。 4. 计算图像的归一化中心不变,用来消除图像的旋转不变性。其中,5阶Hu的计算公式为: Hu1 = u20 + u02 Hu2 = (u20 - u02)^2 + 4 * u11^2 Hu3 = (u30 - 3 * u12)^2 + (3 * u21 - u03)^2 Hu4 = (u30 + u12)^2 + (u21 + u03)^2 Hu5 = (u30 - 3 * u12) * (u30 + u12) * ((u30 + u12)^2 - 3 * (u21 + u03)^2) + (3 * u21 - u03) * (u21 + u03) * (3 * (u30 + u12)^2 - (u21 + u03)^2) 其中,u30、u03和u12、u21分别为三阶和二阶中心,计算公式为: u30 = m30 / m00 - 3 * x * u20 + 2 * x^3 u03 = m03 / m00 - 3 * y * u02 + 2 * y^3 u12 = m12 / m00 - x * u02 - y * u11 + x^2 * u11 + x * y^2 * u20 u21 = m21 / m00 - x * u11 - y * u02 + y^2 * u11 + x^2 * u02 5. 将计算得到的5阶Hu特征向量作为手势的唯一标识。 上述步骤可以用matlab中的图像处理工具箱函数实现。其中,imread函数用于读取图像,graythresh函数用于计算二值化阈值,bwconvhull函数用于计算图像的凸包,regionprops函数用于计算图像的重心坐标和二阶中心。代码如下: % 读取手势二值图像 I = imread('gesture.png'); % 将图像转换为灰度图像 I = rgb2gray(I); % 二值化图像 level = graythresh(I); BW = imbinarize(I, level); % 计算图像的凸包 BW = bwconvhull(BW); % 计算图像的重心坐标和二阶中心 stats = regionprops(BW, 'Centroid', 'Centroid', 'Image', 'BoundingBox'); x = stats.Centroid(1); y = stats.Centroid(2); m20 = stats.Image(:, :, 1) .* ((1:size(stats.Image, 2))' - x).^2; m02 = stats.Image(:, :, 1) .* ((1:size(stats.Image, 1)) - y).^2; m11 = stats.Image(:, :, 1) .* ((1:size(stats.Image, 1))' - y) .* ((1:size(stats.Image, 2)) - x); m20 = sum(m20(:)); m02 = sum(m02(:)); m11 = sum(m11(:)); % 计算归一化中心 u20 = m20 / stats.Area - x^2; u02 = m02 / stats.Area - y^2; u11 = m11 / stats.Area - x * y; % 计算5阶Hu Hu1 = u20 + u02; Hu2 = (u20 - u02)^2 + 4 * u11^2; Hu3 = (u30 - 3 * u12)^2 + (3 * u21 - u03)^2; Hu4 = (u30 + u12)^2 + (u21 + u03)^2; Hu5 = (u30 - 3 * u12) * (u30 + u12) * ((u30 + u12)^2 - 3 * (u21 + u03)^2) + (3 * u21 - u03) * (u21 + u03) * (3 * (u30 + u12)^2 - (u21 + u03)^2); % 输出5阶Hu特征向量 Hu = [Hu1, Hu2, Hu3, Hu4, Hu5]; disp(Hu); 以上就是手势二值图提取5阶Hu特征的详细解释和matlab实现步骤。 ### 回答2: 手势二值图提取5阶Hu特征是指在手势识别中,首先将图像转化为二值图像(只有黑白两种颜色),然后利用Hu来描述这个二值图像的特征。Hu是一种形状描述符,可以用来表示图像的形状特征,具有旋转、平移和缩放不变性。 在MATLAB中,可以使用以下步骤实现手势二值图的提取和5阶Hu特征计算。 1. 读取图像并转化为灰度图像。 2. 对灰度图像进行二值化处理,将其转化为二值图像。可以使用适当的阈值方法,如全局阈值、自适应阈值等。 3. 计算二值图像的几何。几何是图像的属性,表示整个图像或其中某个区域的几何特性。可以使用`regionprops`函数来计算几何,该函数可以计算图像的各个属性,如面积、周长、中心点等。 4. 基于几何,计算5阶Hu特征。Hu是由几何经过一系列变换得到的,可以使用`hu Moments`函数来计算Hu。该函数将几何作为输入,返回计算得到的7个Hu的值。 5. 使用得到的Hu特征进行手势识别。Hu具有旋转、平移和缩放不变性,可以用作图像的特征向量,用于比较和识别图像。 总结起来,通过MATLAB实现手势二值图提取5阶Hu特征的步骤包括读取图像、灰度化、二值化、计算几何、计算5阶Hu特征和手势识别。该方法可以对手势图像进行特征提取,并利用Hu来表示图像的形状特征,进而用于手势识别和比较。 ### 回答3: 手势二值图提取5阶Hu特征的过程如下: 1. 导入手势二值图:首先,将手势二值图导入到Matlab中。 2. 计算几何:使用Matlab的内置函数计算手势二值图的几何。几何是描述图像形状特征的数学工具,它们包含了图像的像素信息。 3. 计算归一化中心:通过归一化操作来消除图像尺度和旋转的影响,计算归一化中心。 4. 计算Hu特征:利用归一化中心计算Hu特征。Hu是一组综合表示图像全局形状特征的描述符,它具有旋转、平移和尺度不变性。 5. 提取5阶Hu特征:从计算得到的Hu特征中,选择对应于5阶的Hu特征值,作为手势二值图的特征表示。 6. 解释特征含义:可以将Hu特征值表示为一个数值向量,每个元素都代表了手势的某个形状特征。例如,第一个特征值代表手势的整体形状,第二个特征值代表手势的旋转不变性等等。 总结起来,通过以上步骤,可以使用Matlab实现对手势二值图的特征提取,并得到5阶Hu特征。这些特征值可以用于手势识别、姿势识别等领域,提供更全面和准确的手势信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值