#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <math.h>
using namespace std;
/********************************************************************************
多尺度Retinex图像增强程序 (一般选用3尺度)
src为待处理图像
sigma为高斯模糊标准差
scale为对比度系数
*********************************************************************************/
void MSR(IplImage* src,int sigma_1,int sigma_2,int sigma_3,int scale)
{
IplImage* src_fl = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,src->nChannels);
IplImage* src_fl1 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,src->nChannels);
IplImage* src_fl2 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,src->nChannels);
IplImage* src1_fl = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,src->nChannels);
IplImage* src1_fl1 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,src->nChannels);
IplImage* src1_fl2 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,src->nChannels);
IplImage* src2_fl = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,src->nChannels);
IplImage* src2_fl1 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,src->nChannels);
IplImage* src2_fl2 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,src->nChannels);
cvConvertScale(src,src_fl,1.0,1.0);//转换范围,所有图像元素增加1.0保证cvlog正常
src1_fl=cvCloneImage(src_fl);
src2_fl=cvCloneImage(src_fl);
cvLog(src_fl,src_fl1);
cvLog(src1_fl,src1_fl1);
cvLog(src2_fl,src2_fl1);
cvSmooth(src_fl,src_fl2,CV_GAUSSIAN,0,0,sigma_1); //MSR算法的核心之一,高斯模糊
cvSmooth(src1_fl,src1_fl2,CV_GAUSSIAN,0,0,sigma_2);
cvSmooth(src2_fl,src2_fl2,CV_GAUSSIAN,0,0,sigma_3);
cvLog(src_fl2,src_fl2);
cvLog(src1_fl2,src1_fl2);
cvLog(src2_fl2,src2_fl2);
cvSub(src_fl1,src_fl2,src_fl);//Retinex公式,Log(R(x,y))=Log(I(x,y))-Log(Gauss(I(x,y)))
cvSub(src1_fl1,src1_fl2,src1_fl1);
cvSub(src2_fl1,src2_fl2,src2_fl1);
cvConvertScale(src_fl,src_fl,1.0/3.0,0.0);//每个尺度对应的权值为1/3
cvConvertScale(src1_fl1,src1_fl1,1.0/3.0,0.0);
cvConvertScale(src2_fl1,src2_fl1,1.0/3.0,0.0);
cvAdd(src_fl,src1_fl1,src1_fl1);
cvAdd(src1_fl1,src2_fl1,src2_fl1);
//计算图像的均值、方差,MSR算法的核心之二
//使用GIMP中转换方法:使用图像的均值方差等信息进行变换
//没有添加溢出判断
CvScalar mean;
CvScalar dev;
cvAvgSdv(src2_fl1,&mean,&dev,NULL);//计算图像的均值和标准差
double min[3];
double max[3];
double maxmin[3];
for (int i=0;i<3;i++)
{
min[i]=mean.val[i]-scale*dev.val[i];
max[i]=mean.val[i]+scale*dev.val[i];
maxmin[i]=max[i]-min[i];
}
float* data2=(float*)src2_fl1->imageData;
for (int i=0;i<src2_fl1->width;i++)
{
for(int j=0;j<src2_fl1->height;j++)
{
data2[j*src2_fl1->widthStep/4+3*i+0]=255*(data2[j*src2_fl1->widthStep/4+3*i+0]-min[0])/maxmin[0];
data2[j*src2_fl1->widthStep/4+3*i+1]=255*(data2[j*src2_fl1->widthStep/4+3*i+1]-min[1])/maxmin[1];
data2[j*src2_fl1->widthStep/4+3*i+2]=255*(data2[j*src2_fl1->widthStep/4+3*i+2]-min[2])/maxmin[2];
}
}
cvConvertScale(src2_fl1,src,1,0);
cvReleaseImage(&src_fl);
cvReleaseImage(&src_fl1);
cvReleaseImage(&src_fl2);
cvReleaseImage(&src1_fl);
cvReleaseImage(&src1_fl1);
cvReleaseImage(&src1_fl2);
cvReleaseImage(&src2_fl);
cvReleaseImage(&src2_fl1);
cvReleaseImage(&src2_fl2);
}
void main()
{
char* filename="C:\\Documents and Settings\\Administrator\\桌面\\待分析的图像\\DSCF0494.bmp";
IplImage* frog=cvLoadImage(filename,1);
IplImage* frog1=cvCreateImage(cvGetSize(frog),IPL_DEPTH_32F,frog->nChannels);
cvConvertScale(frog,frog1,1.0/255,0);
SSR(frog,sigma_1,sigma_2,sigma_3,2);
cvNamedWindow("增强后图像");
cvNamedWindow("原始图像");
cvShowImage("原始图像",frog1);
cvShowImage("增强后图像",frog);
cvSaveImage( "C:/Documents and Settings/Administrator/桌面/待分析的图像/SSR-2D.bmp", frog ); // 并保存结果文件
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&frog);
cvReleaseImage(&frog1);
}
Retinex SSR算法opencv
4星 · 超过85%的资源 需积分: 31 131 浏览量
2014-05-26
08:51:07
上传
评论 2
收藏 1KB ZIP 举报
hahalicui
- 粉丝: 2
- 资源: 1
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
前往页