⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diproc.cpp

📁 本程序基于Visual C++6.0环境编写
💻 CPP
📖 第 1 页 / 共 2 页
字号:
       for(int a = -1; a <= 1; a++)
			{
				for(int b= -1; b <= 1; b++)
				{
					if( (y+a) < Scan_y || (x+b) < Scan_x || (y+a) >= End_y || (x+b) >= End_x)
					{
						SUM0 += 0;
						SUM1 += 0;
					}
					else
					{
						SUM0 += (spWvltData0[y + a][x + b]-WndSum0)*(spWvltData0[y + a][x + b]-WndSum0);
						SUM1 += (spWvltData1[y + a][x + b]-WndSum1)*(spWvltData1[y + a][x + b]-WndSum1);
					}            
				}
			}

		   if(SUM0<SUM1)
              spWvltData0[y][x]=spWvltData1[y][x];
           // if(WndSum0<WndSum1)
              //spWvltData0[y][x]=spWvltData1[y][x];





		}
	}

}

void CDiproc::Window_WvltFusionQY(short **spWvltData0, short **spWvltData1, int Scan_y, int Scan_x, int End_y, int End_x)
{
  int y,x; float M;
	int W;
	
	short WndSum0, WndSum1,WndSum2;

	for(y = Scan_y; y < End_y; y ++) 
	{
        for(x = Scan_x; x < End_x; x ++)
		{
			//初始化窗口中小波系数的和
			WndSum0 = 0;	WndSum1 = 0; WndSum2=0;
		      M=0.0;  W=0;
			//计算窗口中小波系数的和
           for(int i = -1; i <= 1; i++)
			{
				for(int j = -1; j <= 1; j++)
				{
					if( (y+i) < Scan_y || (x+j) < Scan_x || (y+i) >= End_y || (x+j) >= End_x)

                    {
						WndSum0 += 0;
						WndSum1 += 0;
					}
					else
					{
						WndSum0 += ((int)spWvltData0[y + i][x + j])*((int)spWvltData0[y + i][x + j]);
						WndSum1 += ((int)spWvltData1[y + i][x + j])*((int)spWvltData1[y + i][x + j]);
						WndSum2 += ((int)spWvltData0[y + i][x + j])*((int)spWvltData1[y + i][x + j]);

					}  
				}
		   }

		 /*  M=(2*WndSum2)/(float)(WndSum1+WndSum0);
		   if(abs(M)>=0.3)
			   if(WndSum0>=WndSum1)
				   W=0.5+0.5*((1-M)/(1-0.3));
			   else
				   W=0.5-0.5*((1-M)/(1-0.3));
		  else
			   if(WndSum0>=WndSum1)
				   W=1;
			   else
				   W=0;*/

           spWvltData0[y][x]=0.5*spWvltData0[y][x]+0.5*spWvltData1[y][x];

		}

	}
}

void CDiproc::DIP_ImageFusion2(short **spImgData0, short **spImgData1, int nHeight, int nWidth)

{
  int iHeight = nHeight, iWidth = nWidth;
	//图像融合所用到的数据空间及数据指针
	short **spOriginData, **spTransData, **spWvltData0, **spWvltData1;
	//分配数据空间
	spTransData = new short *[iHeight];
	spWvltData0 = new short *[iHeight];
	spWvltData1 = new short *[iHeight];
	for(int i = 0; i < iWidth; i ++)
	{
		spTransData[i] = new short [iWidth];
		spWvltData0[i] = new short [iWidth];
		spWvltData1[i] = new short [iWidth];
	}
	//创建小波变换类,完成图像的小波变换
	CWvltTrans *pTrans;
	//获得图像数据空间的指针,完成小波变换
	spOriginData = spImgData0;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//获得图像数据空间的指针,完成另一幅图像的小波变换
	spOriginData = spImgData1;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData1, iHeight,iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//小波系数的融合处理:频带有LL3,LH3,HL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1
	//融合处理将分频带进行,处理方法采用的是3*3的窗口
	//LL3频带小波系数的融合
	Window_WvltFusionH(spWvltData0, spWvltData1, 0, 0, iHeight / 8, iWidth / 8);
	//HL3频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, 0, iWidth / 8, iHeight / 8, iWidth / 4);
	//LH3频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 8, 0, iHeight / 4, iWidth / 8);
	//HH3频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 8, iWidth / 8, iHeight / 4, iWidth / 4);
	//HL2频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, 0, iWidth / 4, iHeight / 4, iWidth / 2);
	//LH2频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 4, 0, iHeight / 2, iWidth / 4);
	//HH2频带小波系数Q的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 4, iWidth / 4, iHeight / 2, iWidth / 2);
	//HL1频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, 0, iWidth / 2, iHeight / 2, iWidth);
	//LH1频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 2, 0, iHeight, iWidth / 2);
	//HH1频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 2, iWidth / 2, iHeight, iWidth);
	//将融合后的小波系数复原,完成图像的融合
	DIP_WvltRevers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//释放临时的数据空间
	//delete spTransData;
	//delete spWvltData0;
	//delete spWvltData1;


}

void CDiproc::DIP_ImageFusion3(short **spImgData0, short **spImgData1, int nHeight, int nWidth)
{
    int iHeight = nHeight, iWidth = nWidth;
	//图像融合所用到的数据空间及数据指针
	short **spOriginData, **spTransData, **spWvltData0, **spWvltData1;
	//分配数据空间
	spTransData = new short *[iHeight];
	spWvltData0 = new short *[iHeight];
	spWvltData1 = new short *[iHeight];
	for(int i = 0; i < iWidth; i ++)
	{
		spTransData[i] = new short [iWidth];
		spWvltData0[i] = new short [iWidth];
		spWvltData1[i] = new short [iWidth];
	}
	//创建小波变换类,完成图像的小波变换
	CWvltTrans *pTrans;
	//获得图像数据空间的指针,完成小波变换
	spOriginData = spImgData0;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//获得图像数据空间的指针,完成另一幅图像的小波变换
	spOriginData = spImgData1;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData1, iHeight,iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//小波系数的融合处理:频带有LL3,LH3,HL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1
	//融合处理将分频带进行,处理方法采用的是3*3的窗口
	//LL3频带小波系数的融合
	Window_WvltFusionH(spWvltData0, spWvltData1, 0, 0, iHeight / 8, iWidth / 8);
	//HL3频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, 0, iWidth / 8, iHeight / 8, iWidth / 4);
	//LH3频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 8, 0, iHeight / 4, iWidth / 8);
	//HH3频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 8, iWidth / 8, iHeight / 4, iWidth / 4);
	//HL2频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, 0, iWidth / 4, iHeight / 4, iWidth / 2);
	//LH2频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 4, 0, iHeight / 2, iWidth / 4);
	//HH2频带小波系数Q的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 4, iWidth / 4, iHeight / 2, iWidth / 2);
	//HL1频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, 0, iWidth / 2, iHeight / 2, iWidth);
	//LH1频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 2, 0, iHeight, iWidth / 2);
	//HH1频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 2, iWidth / 2, iHeight, iWidth);
	//将融合后的小波系数复原,完成图像的融合
	DIP_WvltRevers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//释放临时的数据空间
	//delete spTransData;
	//delete spWvltData0;
	//delete spWvltData1;
}

void CDiproc::DIP_ImageFusion4(short **spImgData0, short **spImgData1, int nHeight, int nWidth)
{
  int iHeight = nHeight, iWidth = nWidth;
	//图像融合所用到的数据空间及数据指针
	short **spOriginData, **spTransData, **spWvltData0, **spWvltData1;
	//分配数据空间
	spTransData = new short *[iHeight];
	spWvltData0 = new short *[iHeight];
	spWvltData1 = new short *[iHeight];
	for(int i = 0; i < iWidth; i ++)
	{
		spTransData[i] = new short [iWidth];
		spWvltData0[i] = new short [iWidth];
		spWvltData1[i] = new short [iWidth];
	}
	//创建小波变换类,完成图像的小波变换
	CWvltTrans *pTrans;
	//获得图像数据空间的指针,完成小波变换
	spOriginData = spImgData0;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//获得图像数据空间的指针,完成另一幅图像的小波变换
	spOriginData = spImgData1;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData1, iHeight,iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//小波系数的融合处理:频带有LL3,LH3,HL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1
	//融合处理将分频带进行,处理方法采用的是3*3的窗口
	//LL3频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, 0, 0, iHeight / 8, iWidth / 8);
	//HL3频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, 0, iWidth / 8, iHeight / 8, iWidth / 4);
	//LH3频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, iHeight / 8, 0, iHeight / 4, iWidth / 8);
	//HH3频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, iHeight / 8, iWidth / 8, iHeight / 4, iWidth / 4);
	//HL2频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, 0, iWidth / 4, iHeight / 4, iWidth / 2);
	//LH2频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, iHeight / 4, 0, iHeight / 2, iWidth / 4);
	//HH2频带小波系数Q的融合
	Window_WvltFusion(spWvltData0, spWvltData1, iHeight / 4, iWidth / 4, iHeight / 2, iWidth / 2);
	//HL1频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, 0, iWidth / 2, iHeight / 2, iWidth);
	//LH1频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, iHeight / 2, 0, iHeight, iWidth / 2);
	//HH1频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, iHeight / 2, iWidth / 2, iHeight, iWidth);
	//将融合后的小波系数复原,完成图像的融合
	DIP_WvltRevers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//释放临时的数据空间
	//delete spTransData;
	//delete spWvltData0;
	//delete spWvltData1;
}

void CDiproc::DIP_ImageFusion5(short **spImgData0, short **spImgData1, int nHeight, int nWidth)
{
  int iHeight = nHeight, iWidth = nWidth;
	//图像融合所用到的数据空间及数据指针
	short **spOriginData, **spTransData, **spWvltData0, **spWvltData1;
	//分配数据空间
	spTransData = new short *[iHeight];
	spWvltData0 = new short *[iHeight];
	spWvltData1 = new short *[iHeight];
	for(int i = 0; i < iWidth; i ++)
	{
		spTransData[i] = new short [iWidth];
		spWvltData0[i] = new short [iWidth];
		spWvltData1[i] = new short [iWidth];
	}
	//创建小波变换类,完成图像的小波变换
	CWvltTrans *pTrans;
	//获得图像数据空间的指针,完成小波变换
	spOriginData = spImgData0;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//获得图像数据空间的指针,完成另一幅图像的小波变换
	spOriginData = spImgData1;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData1, iHeight,iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//小波系数的融合处理:频带有LL3,LH3,HL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1
	//融合处理将分频带进行,处理方法采用的是3*3的窗口
	//LL3频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, 0, 0, iHeight / 8, iWidth / 8);
	//HL3频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, 0, iWidth / 8, iHeight / 8, iWidth / 4);
	//LH3频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 8, 0, iHeight / 4, iWidth / 8);
	//HH3频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 8, iWidth / 8, iHeight / 4, iWidth / 4);
	//HL2频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, 0, iWidth / 4, iHeight / 4, iWidth / 2);
	//LH2频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 4, 0, iHeight / 2, iWidth / 4);
	//HH2频带小波系数Q的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 4, iWidth / 4, iHeight / 2, iWidth / 2);
	//HL1频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, 0, iWidth / 2, iHeight / 2, iWidth);
	//LH1频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 2, 0, iHeight, iWidth / 2);
	//HH1频带小波系数的融合
	Window_WvltFusionQ(spWvltData0, spWvltData1, iHeight / 2, iWidth / 2, iHeight, iWidth);
	//将融合后的小波系数复原,完成图像的融合
	DIP_WvltRevers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//释放临时的数据空间
	//delete spTransData;
	//delete spWvltData0;
	//delete spWvltData1; 
}

void CDiproc::DIP_ImageFusion6(short **spImgData0, short **spImgData1, int nHeight, int nWidth)
{
    int iHeight = nHeight, iWidth = nWidth;
	//图像融合所用到的数据空间及数据指针
	short **spOriginData, **spTransData, **spWvltData0, **spWvltData1;
	//分配数据空间
	spTransData = new short *[iHeight];
	spWvltData0 = new short *[iHeight];
	spWvltData1 = new short *[iHeight];
	for(int i = 0; i < iWidth; i ++)
	{
		spTransData[i] = new short [iWidth];
		spWvltData0[i] = new short [iWidth];
		spWvltData1[i] = new short [iWidth];
	}
	//创建小波变换类,完成图像的小波变换
	CWvltTrans *pTrans;
	//获得图像数据空间的指针,完成小波变换
	spOriginData = spImgData0;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//获得图像数据空间的指针,完成另一幅图像的小波变换
	spOriginData = spImgData1;
	//三层小波变换
	pTrans->DWT_TriLayers(spOriginData, spTransData, spWvltData1, iHeight,iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//小波系数的融合处理:频带有LL3,LH3,HL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1
	//融合处理将分频带进行,处理方法采用的是3*3的窗口
	//LL3频带小波系数的融合
	Window_WvltFusion(spWvltData0, spWvltData1, 0, 0, iHeight / 8, iWidth / 8);
	//HL3频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, 0, iWidth / 8, iHeight / 8, iWidth / 4);
	//LH3频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 8, 0, iHeight / 4, iWidth / 8);
	//HH3频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 8, iWidth / 8, iHeight / 4, iWidth / 4);
	//HL2频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, 0, iWidth / 4, iHeight / 4, iWidth / 2);
	//LH2频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 4, 0, iHeight / 2, iWidth / 4);
	//HH2频带小波系数Q的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 4, iWidth / 4, iHeight / 2, iWidth / 2);
	//HL1频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, 0, iWidth / 2, iHeight / 2, iWidth);
	//LH1频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 2, 0, iHeight, iWidth / 2);
	//HH1频带小波系数的融合
	Window_WvltFusionQY(spWvltData0, spWvltData1, iHeight / 2, iWidth / 2, iHeight, iWidth);
	//将融合后的小波系数复原,完成图像的融合
	DIP_WvltRevers(spOriginData, spTransData, spWvltData0, iHeight, iHeight / 2, iWidth, iWidth / 2, 3, 1.414);
	//释放临时的数据空间
	//delete spTransData;
	//delete spWvltData0;
	//delete spWvltData1; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -