图像融合实现CT与PET图像的融合 OpenCV实现(附实验结果)

一、问题重述

图像融合(Image Fusion)是指将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术等,最大限度的提取各自信道中的有利信息,最后综合成高质量的图像,以提高图像信息的利用率、改善计算机解译精度和可靠性、提升原始图像的空间分辨率和光谱分辨率,利于监测。 

利用图像融合实现CT与PET图像的融合,使得观测结果更加客观,更多细节得以体现。

二、实验结果

左图:PET图像 中图:CT图像 右图:两图融合之后的图像

图像融合实现CT与PET图像的融合 OpenCV实现(附实验结果)_第1张图片

三、实现代码

实现环境: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 );
说明:
src1 第一个原数组.
alpha 第一个数组元素的权值
src2 第二个原数组
beta 第二个数组元素的权值
dst 输出数组
gamma 添加的常数项。
函数 cvAddWeighted 计算两数组的加权值的和:
dst(I)=src1(I)*alpha+src2(I)*beta+gamma

所有的数组必须有相同的类型相同的大小(或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/


***********转载请注明出处***********



你可能感兴趣的:(图像融合实现CT与PET图像的融合 OpenCV实现(附实验结果))