用VC++开发实现的图像融合的源代码,用小波变换实现,
代码经测试可以编译运行。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 179606 2011-11-24 17:15 waveleta.tif
文件 61590 2011-11-24 16:10 waveletaaa.JPG
文件 65536 2006-06-15 09:31 waveletBaboon.raw
文件 65536 2006-07-02 20:16 waveletoat.raw
文件 27307 2009-03-25 14:44 waveletDebugImage.obj
文件 0 2009-03-25 14:44 waveletDebugImage.sbr
文件 19771 2009-03-25 14:44 waveletDebugMainFrm.obj
文件 0 2009-03-25 14:44 waveletDebugMainFrm.sbr
文件 105498 2009-03-25 14:44 waveletDebugStdAfx.obj
文件 1374841 2009-03-25 14:44 waveletDebugStdAfx.sbr
文件 214016 2009-03-31 17:09 waveletDebugvc60.idb
文件 364544 2009-03-25 14:54 waveletDebugvc60.pdb
文件 4858880 2009-03-25 14:54 waveletDebugWaveletDemo.bsc
文件 135227 2009-03-25 14:54 waveletDebugWaveletDemo.exe
文件 340400 2009-03-25 14:54 waveletDebugWaveletDemo.ilk
文件 23081 2009-03-25 14:44 waveletDebugWaveletDemo.obj
文件 6936216 2009-03-25 14:44 waveletDebugWaveletDemo.pch
文件 459776 2009-03-25 14:54 waveletDebugWaveletDemo.pdb
文件 7396 2007-11-22 10:42 waveletDebugWaveletDemo.res
文件 0 2009-03-25 14:44 waveletDebugWaveletDemo.sbr
文件 14835 2009-03-25 14:44 waveletDebugWaveletDemoDoc.obj
文件 0 2009-03-25 14:44 waveletDebugWaveletDemoDoc.sbr
文件 31240 2009-03-25 14:54 waveletDebugWaveletDemoView.obj
文件 0 2009-03-25 14:54 waveletDebugWaveletDemoView.sbr
文件 12226 2007-07-19 11:19 waveletImage.cpp
文件 2029 2007-07-19 11:16 waveletImage.h
文件 196662 2011-11-25 08:30 waveletlena.bmp
文件 26424 2007-07-16 10:20 waveletlena1.bmp
文件 65536 2005-03-06 10:01 waveletlena1.raw
文件 2512 2005-10-28 10:37 waveletMainFrm.cpp
............此处省略34个文件信息
// Image.cpp: implementation of the CImage class.
//
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “WaveletDemo.h“
#include “Image.h“
#include “math.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define ff(ij) ip[(i)*lx1+(j)]
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CImage::CImage()
{
}
CImage::~CImage()
{
}
//=================================
/* 一维小波正变换*/
//**********************************************
void CImage::Waveletrow(short int * dstshort int * src int len)
{
int imid;
short int * ptr;
short int * lowf;
short int * highf;
mid=len/2;
ptr=src;
lowf=dst;
highf=dst+mid;
//左边界处理
*highf =(short int)(ptr[1]-(ptr[2]+ptr[0])/2);//预测信号高频
*lowf =(short int)(ptr[0]+(highf[0]+highf[0])/4);//进一步提升
ptr+=2;
highf++;
lowf++;
//无边界各数据开始
for(i=1;i {
*highf =(short int)(ptr[1]-(ptr[2]+ptr[0])/2);
*lowf =(short int)(ptr[0]+(highf[0]+highf[-1])/4);
ptr+=2;
highf++;
lowf++;
}
//右边界处理
*highf =(short int)(ptr[1]-(ptr[0]+ptr[0])/2);
*lowf =(short int)(ptr[0]+(highf[0]+highf[-1])/4);
}
//================================
/* 二维小波正变换*/
//* dst=图像数据首地址指针
//* jp=图像变换结果首地址指针
//int width int height int level图像宽,高,
//***************************************************
void CImage::Wavelet2d(short int * dst short int * jp int width int height int level)
{
int l1;
int ij;
int k;
short int * tmp_columin;
short int * tmp_columout;
tmp_columin=new short int[height+height];
tmp_columout=tmp_columin +height;
//小波变换开始
for(l1=0;l1 {
int w=width>>l1;
int h=height>>l1;
//首先对行进行变换
for(i=0;i {
Waveletrow(jp+i*widthdst+i*widthw);
}
//再对列进行变换
for(i=0;i {
//先取出一列数据
for(j=0;j {
tmp_columin[j]=jp[j*width+i];
}
//对一维列数据进行变换
Waveletrow(tmp_columouttmp_columinh);
//结果存放
for(j=0;j {
jp[j*width+i]=tmp_columout[j];
}
}
//列完成
//完成一层小波变换,再为下一层准备
//上一层结果作为下一层输入
for(k=0;k dst[k]=jp[k];
}
delete tmp_columin;
}
//==========================
//********************************************
/*小波一维逆变换*/
//*dst--行逆变换的输出
//* src--一维变换的输入系数指针
//len=一维信号的长度
void CImage::Iversewavlet1d(short int * dst short int * srcint len)
{
int imid;
short int * ptr;
short int * lowf;
short int * highf;
mid=len/2;
ptr=dst;
lowf=src;
highf=src+mid;
//逆变换左边界处理
*ptr =(short int)(lowf[0]-((highf[0]+highf[0])/4));
ptr+=2;
highf++;
lowf++;
//无边界各系数开始
for(i=0;i {
ptr[0] =(short int)(lowf[0] - ((highf[0]+highf[-1])/4));
ptr[-1] =(short int)(highf[-1] + ((ptr[0]+ptr[-2])/2));
ptr+=2;
highf++;
lowf++;
}
//右边界处理
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 179606 2011-11-24 17:15 waveleta.tif
文件 61590 2011-11-24 16:10 waveletaaa.JPG
文件 65536 2006-06-15 09:31 waveletBaboon.raw
文件 65536 2006-07-02 20:16 waveletoat.raw
文件 27307 2009-03-25 14:44 waveletDebugImage.obj
文件 0 2009-03-25 14:44 waveletDebugImage.sbr
文件 19771 2009-03-25 14:44 waveletDebugMainFrm.obj
文件 0 2009-03-25 14:44 waveletDebugMainFrm.sbr
文件 105498 2009-03-25 14:44 waveletDebugStdAfx.obj
文件 1374841 2009-03-25 14:44 waveletDebugStdAfx.sbr
文件 214016 2009-03-31 17:09 waveletDebugvc60.idb
文件 364544 2009-03-25 14:54 waveletDebugvc60.pdb
文件 4858880 2009-03-25 14:54 waveletDebugWaveletDemo.bsc
文件 135227 2009-03-25 14:54 waveletDebugWaveletDemo.exe
文件 340400 2009-03-25 14:54 waveletDebugWaveletDemo.ilk
文件 23081 2009-03-25 14:44 waveletDebugWaveletDemo.obj
文件 6936216 2009-03-25 14:44 waveletDebugWaveletDemo.pch
文件 459776 2009-03-25 14:54 waveletDebugWaveletDemo.pdb
文件 7396 2007-11-22 10:42 waveletDebugWaveletDemo.res
文件 0 2009-03-25 14:44 waveletDebugWaveletDemo.sbr
文件 14835 2009-03-25 14:44 waveletDebugWaveletDemoDoc.obj
文件 0 2009-03-25 14:44 waveletDebugWaveletDemoDoc.sbr
文件 31240 2009-03-25 14:54 waveletDebugWaveletDemoView.obj
文件 0 2009-03-25 14:54 waveletDebugWaveletDemoView.sbr
文件 12226 2007-07-19 11:19 waveletImage.cpp
文件 2029 2007-07-19 11:16 waveletImage.h
文件 196662 2011-11-25 08:30 waveletlena.bmp
文件 26424 2007-07-16 10:20 waveletlena1.bmp
文件 65536 2005-03-06 10:01 waveletlena1.raw
文件 2512 2005-10-28 10:37 waveletMainFrm.cpp
............此处省略34个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)