zoukankan      html  css  js  c++  java
  • matlab练习程序(7个二维不变矩)

      《数字图像处理》书上说这7个矩是旋转、缩放、平移不变的,因此用这7个矩就可以代表一个图像了。我只试验了缩放的,这几个数几乎是不变的,也许做图像检索的时候可以用到。

    代码:

    main.m

    clear all;
    close all;
    clc;
    
    img=imread('lena.jpg');
    fai1=two_dim_moment(img);
    
    img1=imresize(img,[100 100]);
    fai2=two_dim_moment(img1);
    
    img2=imresize(img,[300 300]);
    fai3=two_dim_moment(img2);

    two_dim_moment.m

    function fai=two_dim_moment(img)
        [m n]=size(img);
        img=double(img);
        
        %图像的各阶矩
        mm=zeros(4,4);   
        for y=1:m
            for x=1:n           
                for q=1:4
                    for p=1:4
                        mm(q,p)=mm(q,p)+x^(p-1)*y^(q-1)*img(y,x);
                    end
                end
            end
        end
        mean_x=mm(2,1)/mm(1,1);
        mean_y=mm(1,2)/mm(1,1);
        
        %三阶中心矩
        u00=mm(1,1);
        u11=mm(2,2)-mean_y*mm(2,1);
        u20=mm(3,1)-mean_x*mm(2,1);
        u02=mm(1,3)-mean_y*mm(1,2);
        u30=mm(4,1)-3*mean_x*mm(3,1)+2*mean_x^2*mm(2,1);
        u03=mm(1,4)-3*mean_y*mm(1,3)+2*mean_y^2*mm(1,2);
        u21=mm(3,2)-2*mean_x*mm(2,2)-mean_y*mm(3,1)+2*mean_x^2*mm(1,2);
        u12=mm(2,3)-2*mean_y*mm(2,2)-mean_x*mm(1,3)+2*mean_y^2*mm(2,1);
        %归一化中心矩
        n20=u20/u00^2;
        n02=u02/u00^2;
        n11=u11/u00^2;
        n30=u30/u00^2.5;
        n03=u03/u00^2.5;
        n12=u12/u00^2.5;
        n21=u21/u00^2.5;
        
        %7个不变矩
        fai(1) = n20 + n02; 
        fai(2) = (n20-n02)^2 + 4*n11^2;
        fai(3) = (n30-3*n12)^2 + (3*n21-n03)^2; 
        fai(4) = (n30+n12)^2 + (n21+n03)^2;
        fai(5) = (n30-3*n12)*(n30+n12)*((n30+n12)^2-3*(n21+n03)^2)+(3*n21-n03)*(n21+n03)*(3*(n30+n12)^2-(n21+n03)^2);
        fai(6) = (n20-n02)*((n30+n12)^2-(n21+n03)^2)+4*n11*(n30+n12)*(n21+n03);
        fai(7) = (3*n21-n03)*(n30+n12)*((n30+n12)^2-3*(n21+n03)^2)+(3*n12-n30)*(n21+n03)*(3*(n30+n12)^2-(n21+n03)^2);
        
    end

    结果:

    原图:

    0.0013419687027165 6.95655523873184e-09 1.24916604653673e-12 1.17939356080133e-11 -3.26570081740069e-24 -9.12854751076559e-16 -4.51507718900331e-23

    放大后:

    0.00134188447993572 6.96492642036082e-09 1.25147100094404e-12 1.18051442412046e-11 -3.17744677490662e-24 -9.14215664936433e-16 -4.52636844796181e-23

    缩小后:

    0.00134196941138094 6.95708662151456e-09 1.24992393394962e-12 1.17952059702159e-11 -3.25857426504391e-24 -9.12913253473569e-16 -4.51723884830695e-23

    这几个数的数量级如此小,可以认为几乎就不变了。

  • 相关阅读:
    河南省第十届ACM省赛G:Plumbing the depth of lake
    南洋理工oj 题目92 图像有用区域
    初学欧拉图,知识总结,后续增加
    初学并查集知识总结后续增加
    南阳oj 题目42 一笔画问题
    南阳oj 题目 90 整数划分
    南阳oj题目20吝啬的国度 菜鸟的进阶之路
    南阳oj 题目21 三个水杯
    UVA-540 Team Queue
    HDU-1596 find the safest road
  • 原文地址:https://www.cnblogs.com/tiandsp/p/2846582.html
Copyright © 2011-2022 走看看