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

📄 fusion_2k.c

📁 该包是在CCS下的用于可见光和红外光的图像融合程序。 融合规则为加权法
💻 C
📖 第 1 页 / 共 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)*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 + -