图像处理系列——图像融合之乘积性变换(Multiply)

乘积性变换融合算法是一种简单的融合算法,其原理是直接将不同空间分辨率的影像上对应像素灰度值进行乘积运算,从而获得新的影像对应像素灰度值。该算法能够在保留就多光谱信息的前提下,较大程度的提高影像的空间分辨率,其表达式如下:

 基于此,本文主要展示的是:乘积性融合算法的实现以及该算法试验结果图、改进算法(线性复合与乘积性融合算法)的实现以及其试验结果图。

一、MulitiplyFusion

1.具体实现

for (int i = 0;i < height;i++)
{
   for (int j = 0;j < width;j++)
   {
	 for (int k = 0;k < nRastercount;k++)
	 {
	    tempimg[k][i*width+j] = pPANImage[i*width+j]*pMSImage[k][i*width+j];
	 }
   }
}

其中,tempimg是定义的double型中间过程影像存储。主要注意的是融合过程中的数据类型问题,最后需要对中间结果进行线性拉伸处理,不然乘积操作必然会造成像元灰度值的溢出。

2.效果图

其试验的不同分辨率数据与前博文中的数据一致,得到的结果图如下:

图像处理系列——图像融合之乘积性变换(Multiply)_第1张图片

二、改进算法

线性复合与乘积性融合算法,即在对影像源数据整体线性复合后,再进行的相似乘积性融合处理。

1.具体实现

for (int i = 0;i < height;i++)
{
	for (int j = 0;j < width;j++)
        {
		panvalue += pPANImage[i*width+j];
		for (int k = 0;k < nRastercount;k++)
		{
			RGBsum += pMSImage[k][i*width+j];
		}	
	}
}//统计整体影像像素值之和

for (int i = 0;i < height;i++)
{
    for (int j = 0;j < width;j++)
    {
	    double m = (RGBsum-3*panvalue)/(width*height);//线性化
	    for (int k = 0;k < nRastercount;k++)
            {        
                tempimg[k][i*width+j]=m+(sqrt((double)(pMSImage[k][i*width+j]* pPANImage[i*width+j])))*0.95;
            }

    } 
}

2.结果图

图像处理系列——图像融合之乘积性变换(Multiply)_第2张图片

 

你可能感兴趣的:(图像处理)