image fusion

how to find a good mix for e.g. PET and MRI images ?

there are a ton of existing ideas already, the most obvious is averaging :

    Mat fuse_avg(const Mat &im1, const Mat &im2)
    {
        Mat fusion;
        addWeighted(im1, 0.5, im2, 0.5, 0, fusion);
        return fusion;
    }
  

PCA fusing also looks good :

    Mat fuse_pca(const Mat &im1, const Mat &im2)
    {
        Mat c1 = im1.reshape(1, im1.total() * im1.channels());
        Mat c2 = im2.reshape(1, im2.total() * im1.channels());

        Mat dat;
        hconcat(c1,c2,dat);
        dat.convertTo(dat,CV_32F);

        PCA pca(dat, noArray(), 0, 1);
        Mat_ ev = pca.eigenvectors;
        Mat_ mu = pca.mean;

        Mat fusion;
        addWeighted(c1-mu(0,0), ev(0,0), c2-mu(0,1), ev(0,1), 0, fusion);
        return fusion.reshape(im1.channels(), im1.rows);
    }