用java实现了归一化积相关的计算

来源:互联网 发布:tcl网络电视怎么开机 编辑:程序博客网 时间:2024/05/29 04:45

   用java实现了归一化积相关的计算,主要源码如下:

static public void guiyihua(Pic s_p,Pic t_p){

        //s_p为源图像,t_p为实时图像

    ints_height=s_p.getHeight();

    ints_width=s_p.getWidth();

    int  t_height=t_p.getHeight();

    intt_width=t_p.getWidth();

        //两个图像的像素数组

    int []s_pixels=s_p.getPixels();

    int []t_pixels=t_p.getPixels();

        //最佳匹配位置

    int maxWidth=0;

    int maxHeight=0;

    intr=s_height-t_height;

    int c=s_width-t_width;

    int rc=r*c;

    double tt=0.0;

    double t=0.0;

    double t_mn=0.0;

        double s_mn=0.0;

    double R=0.0;

    double maxR=0.0;

    int count=0;

        for(int m=0;m<t_height*t_width;m++){

            tt+=(double)t_pixels[m]*t_pixels[m];

            t+=(double)t_pixels[m];

        }

        for(int j=0;j<=s_height-t_height;j++){

            for(inti=0;i<=s_width-t_width;i++){

                double ts=0.0;

                double ss=0.0;

                double s=0.0;

                for(intm=0;m<t_height;m++){

                    for(intn=0;n<t_width;n++){

                       t_mn=t_pixels[m*t_width+n];

                       s_mn=s_pixels[(j+m)*s_width+i+n];

                       ts+=t_mn*s_mn;

                       ss+=s_mn*s_mn;

                        s+=s_mn;

                        }

                    }

                R=(ts-s*t/rc)/Math.sqrt((tt-t*t/rc)*(ss-s*s/rc));

                if(R>maxR){

   

                    maxR=R;

                    maxWidth=i;

                    maxHeight=j;

                    }

                }

            }

        System.out.println("最大归一化积相关系数为:"+maxR+匹配位置横坐标为:"+maxWidth+;匹配位置纵坐标为:"+maxHeight );

 

        }

Pic类的定义:

class Pic{

       int height;//模拟图片高度

       int width;//模拟图像宽度

       int pixels[];//图像内的像素点用int数组来表示

       public  Pic(int h,int w,int[] pix){

           height=h;

           width=w;

           pixels=pix;

       }

       public int getHeight() {

           returnheight;

       }

       public void setHeight(int height) {

           this.height = height;

       }

       public int getWidth() {

           returnwidth;

       }

       public void setWidth(int width) {

           this.width = width;

       }

       public int[] getPixels() {

           returnpixels;

       }

       public void setPixels(int[] pixels) {

           this.pixels = pixels;

       }  

    }

Pic的实例化:

int t_pixels[]={//模拟实时图像

              1,2,3,

              4,5,6,

              7,8,9

       };

new Pic(3,3,t_pixels);

基准图像的图像实例化类似。


0 0
原创粉丝点击