一、问题重述
图像融合(Image Fusion)是指将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术等,最大限度的提取各自信道中的有利信息,最后综合成高质量的图像,以提高图像信息的利用率、改善计算机解译精度和可靠性、提升原始图像的空间分辨率和光谱分辨率,利于监测。
利用图像融合实现CT与PET图像的融合,使得观测结果更加客观,更多细节得以体现。
二、实验结果
左图:PET图像 中图:CT图像 右图:两图融合之后的图像
三、实现代码
实现环境:Windows7,OpenCV2.3,VS2010
#include <stdlib.h> #include <stdio.h> #include <math.h> #include <fstream> #include <string> #include <iostream> #include <opencv/cv.h> #include <opencv/highgui.h> using namespace std; int main(int argc, char* argv[]) { IplImage *src1, *src2; src1=cvLoadImage("1.jpg",1); src2=cvLoadImage("2.jpg",1); int x =0; int y =0; int width =127; int height =244; double alpha =0.5; double beta =0.5; double gamma =0.0; cvSetImageROI(src1, cvRect(x,y,width,height)); cvSetImageROI(src2, cvRect(x,y,width,height)); cvAddWeighted(src1, alpha, src2, beta, gamma, src1); //实现图像融合 cvResetImageROI(src1); cvNamedWindow( "Alpha_blend", 1 ); cvShowImage( "Alpha_blend", src1 ); cvSaveImage("Alpha_blend.jpg",src1); cvWaitKey(); cvReleaseImage(&src1); cvReleaseImage(&src2); cvDestroyWindow("Alpha_blend"); return 0; }四、关键函数分析
cvAddWeighted 计算两数组的加权值的和
void cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst );说明:
所有的数组必须有相同的类型相同的大小(或ROI大小)
五、参考链接
[1]http://www.opencv.org.cn/index.php/Cxcore%E6%95%B0%E7%BB%84%E6%93%8D%E4%BD%9C
[2]http://baike.baidu.com/view/1444849.htm
[3]http://3140618.blog.163.com/blog/static/745179720108810151322/
***********转载请注明出处***********