📄 fusion_2k.c
字号:
for (j=0;j<(WIDTH-2); j+=2)
{
for(u=0;u<=2;u++)
{
for(v=0;v<=2;v++)
{
InterDiff_ir1[i+u][j+v]=(2-u)*(2-v)*DS_ir1[i/2][j/2]+
u*(2-v)*DS_ir1[i/2+1][j/2] +
v*(2-u)*DS_ir1[i/2][j/2+1] +
u*v*DS_ir1[i/2+1][j/2+1] ;
}
}
}
} // end for i
//补最后的一行和一列
for(i=0;i<=(WIDTH-2);i++)
InterDiff_ir1[HEIGTH-1][i]=InterDiff_ir1[HEIGTH-2][i] ; // 补行
for(i=0;i<=(HEIGTH-1) ; i++)
InterDiff_ir1[i][WIDTH-1]=InterDiff_ir1[i][WIDTH-2] ; // 补列
for (i=0; i<HEIGTH; i++)
{
for (j=0; j<WIDTH; j++)
{
InterDiff_ir1[i][j]=InterDiff_ir1[i][j]>>2 ;
}
}
//---------------------------------------------------------------------------
//求图像差InterDiff_ir1[80][60]即为 ee1
for (i=0; i<HEIGTH; i++)
{
for (j=0; j<WIDTH; j++)
{
if ( image_ir[i][j]>=InterDiff_ir1[i][j] )
InterDiff_ir1[i][j]=image_ir[i][j]-InterDiff_ir1[i][j] ;
else
InterDiff_ir1[i][j]=0 ;
}
}
//对降采样图像DS_ir1[40][30]进行处理
//并得到二次降采样图DS_ir2[20][15]和图像差InterDiff_vi2[40][30]即为e2
value_dd=0;
for( i=1;i<=(HEIGTH/2-2);i++)
{
for(j=1; j<=(WIDTH/2-2);j++)
{
for( x=-1;x<=1;x++)
{ for (y=-1;y<=1 ;y++)
{
value_dd+= window[x+1][y+1]*DS_ir1[i+x][j+y] ;
}
}
DS_ir1[i][j]=value_dd/16 ;
value_dd=0;
}
}
//滤波后对红外光图像的第一次降采样图像进行第二次降采样,即ff1(x,y)
for (i=0; i<HEIGTH/4; i++)
{
for (j=0; j<WIDTH/4; j++)
{
DS_ir2[i][j]=DS_ir1[2*i][2*j] ;
}
}
DS_ir2[0][0]= DS_ir2[0][0] ; //防止编译出错
//对第二次降采样图像进行插值放大----------------------------------------------
for(i=0;i<(HEIGTH/2-2);i+=2 )
{
for (j=0;j<(WIDTH/2-2); j+=2)
{
for(u=0;u<=2;u++)
{
for(v=0;v<=2;v++)
{
InterDiff_ir2[i+u][j+v]=(2-u)*(2-v)*DS_ir2[i/2][j/2]+
u*(2-v)*DS_ir2[i/2+1][j/2] +
v*(2-u)*DS_ir2[i/2][j/2+1] +
u*v*DS_ir2[i/2+1][j/2+1] ;
}
}
}
} // end for i
//补最后的一行和一列
for(i=0;i<=(WIDTH/2-2);i++)
InterDiff_ir2[HEIGTH/2-1][i]=InterDiff_ir2[HEIGTH/2-2][i] ; // 补行
for(i=0;i<=(HEIGTH/2-1) ; i++)
InterDiff_ir2[i][WIDTH/2-1]=InterDiff_ir2[i][WIDTH/2-2] ; // 补列
// 对公式法求插值放大后的图像的每个像素值缩小4倍
for (i=0; i<HEIGTH/2; i++)
{
for (j=0; j<WIDTH/2; j++)
{
InterDiff_ir2[i][j]=InterDiff_ir2[i][j]>>2 ;
}
}
//---------------------------------------------------------------------------
//求图像差InterDiff_ir2[40][30]即为 ee2
for (i=0; i<HEIGTH/2; i++)
{
for (j=0; j<WIDTH/2; j++)
{
if ( DS_ir1[i][j]>=InterDiff_ir2[i][j] )
InterDiff_ir2[i][j]=DS_ir1[i][j]-InterDiff_ir2[i][j] ;
else
InterDiff_ir2[i][j]=0 ;
}
}
i=0;
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// 至此,得到了可见光的分解子图系列e1,e2,f1(x,y)
// 和红外光的分解子图系列ee1,ee2,ff1(x,y)
// 也即InterDiff_vi1[80][60],InterDiff_vi2[40][30]和DS_vi2[20][15] .
// 和 InterDiff_ir1[80][60],InterDiff_ir2[40][30]和DS_ir2[20][15]
// 也就是说,分解过程到此就结束了。下面就是融合两个子图系列,得到一个大的图集。
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
//2.0 融合两幅图像的子图系列
// 为了节省空间,融合后的大的图集放在e1,e2,f1(x,y)中
// 融合e1和ee1,也即InterDiff_vi1[80][60]和InterDiff_ir1[80][60]
for (i=0; i<HEIGTH; i++)
{
for (j=0; j<WIDTH; j++)
{
temp=k1*InterDiff_vi1[i][j]+k2*InterDiff_ir1[i][j] ;
InterDiff_vi1[i][j]=temp/10;
}
}
// 融合e2和e22,也即InterDiff_vi2[40][30]和InterDiff_ir2[40][30]
for (i=0; i<HEIGTH/2; i++)
{
for (j=0; j<WIDTH/2; j++)
{
temp=k1*InterDiff_vi2[i][j]+k2*InterDiff_ir2[i][j] ;
InterDiff_vi2[i][j]=temp/10;
}
}
// 融合f1(x,y)和f2(x,y),也即DS_vi2[20][15]和DS_ir2[20][15]
for (i=0; i<HEIGTH/4; i++)
{
for (j=0; j<WIDTH/4; j++)
{
temp=k1*DS_vi2[i][j]+k2*DS_ir2[i][j] ;
DS_vi2[i][j]=temp/10 ;
}
}
i=0;
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// 至此,得到了两个子图系列e1,e2,f1(x,y)和e1,ee2,ff1(x,y)的融合集.
// 记作eee1,eee2,fff1(x,y)
// 也即InterDiff_vi1[80][60],InterDiff_vi2[40][30]和DS_vi2[20][15] .
// 下面就是对这个融合集进行重构
InterDiff_vi1[80][60],InterDiff_vi2[40][30]和DS_vi2[20][15]****
InterDiff_ir1[80][60],InterDiff_ir2[40][30]和DS_ir2[20][15]
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
//3.0 重构图像
//对fff1(x,y)即DS_vi2[20][15]进行插值放大,数据暂时存放在InterDiff_ir2[40][30]
for(i=0;i<(HEIGTH/2-2);i+=2 )
{
for (j=0;j<(WIDTH/2-2); j+=2)
{
for(u=0;u<=2;u++)
{
for(v=0;v<=2;v++)
{
InterDiff_ir2[i+u][j+v]=(2-u)*(2-v)*DS_vi2[i/2][j/2]+
u*(2-v)*DS_vi2[i/2+1][j/2] +
v*(2-u)*DS_vi2[i/2][j/2+1] +
u*v*DS_vi2[i/2+1][j/2+1] ;
}
}
}
} // end for i
//补最后的一行和一列
for(i=0;i<=(WIDTH/2-2);i++)
InterDiff_ir2[HEIGTH/2-1][i]=InterDiff_ir2[HEIGTH/2-2][i] ; // 补行
for(i=0;i<=(HEIGTH/2-1) ; i++)
InterDiff_ir2[i][WIDTH/2-1]=InterDiff_ir2[i][WIDTH/2-2] ; // 补列
// 对公式法求插值放大后的图像的每个像素值缩小4倍
for (i=0; i<HEIGTH/2; i++)
{
for (j=0; j<WIDTH/2; j++)
{
InterDiff_ir2[i][j]=InterDiff_ir2[i][j]>>2 ;
}
}
//将插值放大后的图像InterDiff_ir2[40][30]加到eee2,即InterDiff_vi2[40][30]中
//结果暂时存放在InterDiff_vi2[40][30]中。
//也即实现了fff1(x,y)*2+eee2
for (i=0; i<HEIGTH/2; i++)
{
for (j=0; j<WIDTH/2; j++)
{
InterDiff_ir2[i][j]+=InterDiff_vi2[i][j] ;
}
}
//对fff1(x,y)*2+eee2 再插值放大,数据暂时存放在InterDiff_ir1[80][60]中
for(i=0;i<(HEIGTH-2);i+=2 )
{
for (j=0;j<(WIDTH-2); j+=2)
{
for(u=0;u<=2;u++)
{
for(v=0;v<=2;v++)
{
InterDiff_ir1[i+u][j+v]=(2-u)*(2-v)*InterDiff_ir2[i/2][j/2]+
u*(2-v)*InterDiff_ir2[i/2+1][j/2] +
v*(2-u)*InterDiff_ir2[i/2][j/2+1] +
u*v*InterDiff_ir2[i/2+1][j/2+1] ;
}
}
}
} // end for i
//补最后的一行和一列
for(i=0;i<=(WIDTH-2);i++)
InterDiff_ir1[HEIGTH-1][i]=InterDiff_ir1[HEIGTH-2][i] ; // 补行
for(i=0;i<=(HEIGTH-1) ; i++)
InterDiff_ir1[i][WIDTH-1]=InterDiff_ir1[i][WIDTH-2] ; // 补列
for (i=0; i<HEIGTH; i++)
{
for (j=0; j<WIDTH; j++)
{
InterDiff_ir1[i][j]=InterDiff_ir1[i][j]>>2 ;
}
}
//将插值放大后的图像InterDiff_ir1[80][60]加到eee1,即InterDiff_vi1[80][60]中
//也即实现 (fff1(x,y)*2+eee2)*2+eee1
//结果存放在InterDiff_vi1[80][60],也即得到了最终的结果图像。
for (i=0; i<HEIGTH; i++)
{
for (j=0; j<WIDTH;j++)
{
InterDiff_vi1[i][j]+=InterDiff_ir1[i][j] ;
}
}
i=0;
} // end for main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -