#include "saliency_map.h"
VAMToolbox::VAMToolbox() {
m_typeOfVAMNormalize = VAM_ITERATIVE;
m_numOfPyrLevel = 9;
m_numOfOri = 4;
m_featWeight.val[0] = 1/3.0;
m_featWeight.val[1] = 1/3.0;
m_featWeight.val[2] = 1/3.0;
m_gaborSize = 9;
m_numOfGaborScale = 4;
m_gaborUL = 0.04;
m_gaborUH = 0.5;
m_pOriginImg = NULL;
m_ppImgPyr = NULL;
m_ppIntPyr = NULL;
m_pIntMap = NULL;
m_pColorMap = NULL;
m_pOriMap = NULL;
m_pSaliencyMapOfInt = NULL;
m_pSaliencyMapOfCol = NULL;
m_pSaliencyMapOfOri = NULL;
}
VAMToolbox::~VAMToolbox() {
Release();
}
void VAMToolbox::Release() {
cvReleaseMat(&m_pIntMap);
cvReleaseMat(&m_pColorMap);
cvReleaseMat(&m_pOriMap);
ReleaseBatch(&m_ppImgPyr, m_numOfPyrLevel);
ReleaseBatch(&m_ppIntPyr, m_numOfPyrLevel);
cvReleaseMatHeader(&m_pSaliencyMapOfInt);
cvReleaseMatHeader(&m_pSaliencyMapOfCol);
cvReleaseMatHeader(&m_pSaliencyMapOfOri);
}
IplImage* VAMToolbox::LoadImage(char* path) {
IplImage* img = cvLoadImage(path);
if(img == NULL){
return NULL;
}
LoadImage(img);
return img;
}
void VAMToolbox::LoadImage(IplImage* img) {
if(m_pOriginImg != NULL){
cvReleaseImage(&m_pOriginImg);
}
CvSize imgSize = cvGetSize(img);
int minLen = cvCeil(pow(2.0, m_numOfPyrLevel-1));
int minSrc = min(img->width, img->height);
if(minSrc < minLen){
double zoom = (double)minLen / (double)minSrc;
imgSize.height = cvCeil(imgSize.height * zoom);
imgSize.width = cvCeil(imgSize.width * zoom);
IplImage* zoomImg = cvCreateImage(imgSize, img->depth, img->nChannels);
assert(zoomImg != NULL);
cvResize(img, zoomImg);
m_pOriginImg = cvCreateImage(imgSize, IPL_DEPTH_32F, img->nChannels);
assert(m_pOriginImg != NULL);
cvConvertScale(zoomImg, m_pOriginImg, 1.0/255.0);
cvReleaseImage(&zoomImg);
}
else{
m_pOriginImg = cvCreateImage(imgSize, IPL_DEPTH_32F, img->nChannels);
assert(m_pOriginImg != NULL);
cvConvertScale(img, m_pOriginImg, 1.0/255.0);
}
}
IplImage* VAMToolbox::GetSaliencyMap(IplImage* pSrcImg) {
if(pSrcImg != NULL){
LoadImage(pSrcImg);
}
else if(m_pOriginImg == NULL){
return NULL;
}
CvMat *pDstMap;
BuildImgPyr();
m_pSaliencyMapOfInt = GetIntMap();
m_pSaliencyMapOfCol = GetColMap();
m_pSaliencyMapOfOri = GetOriMap();
pDstMap = cvCreateMat(m_pSaliencyMapOfInt->rows, m_pSaliencyMapOfInt->cols, CV_32FC1);
cvAddWeighted(m_pSaliencyMapOfInt, m_featWeight.val[0], m_pSaliencyMapOfCol, m_featWeight.val[1], 0, pDstMap);
cvAddWeighted(m_pSaliencyMapOfOri, m_featWeight.val[2], pDstMap, 1.0, 0, pDstMap);
CvMat* pDstMap_oriSize = cvCreateMat(cvGetSize(m_pOriginImg).height, cvGetSize(m_pOriginImg).width, CV_32FC1);
cvResize(pDstMap, pDstMap_oriSize, CV_INTER_LINEAR);
cvNormalize(pDstMap_oriSize, pDstMap_oriSize, 1.0, 0.0, CV_MINMAX, NULL);
IplImage* pDstImg = MatToImage(pDstMap_oriSize);
//cvReleaseMatHeader(&pDstMap_oriSize);
return pDstImg;
}
IplImage* VAMToolbox::GetSaliencyMapOfIntensity(IplImage* pSrcImg) {
if(m_pSaliencyMapOfInt == NULL){
LoadImage(pSrcImg);
BuildImgPyr();
m_pSaliencyMapOfInt = GetIntMap();
}
CvMat* pDstMap_oriSize = cvCreateMat(cvGetSize(m_pOriginImg).height, cvGetSize(m_pOriginImg).width, CV_32FC1);
cvResize(m_pSaliencyMapOfInt, pDstMap_oriSize, CV_INTER_LINEAR);
cvNormalize(pDstMap_oriSize, pDstMap_oriSize, 1.0, 0.0, CV_MINMAX, NULL);
IplImage* pDstImg = MatToImage(pDstMap_oriSize);
//cvReleaseMatHeader(&pDstMap_oriSize);
return pDstImg;
}
IplImage* VAMToolbox::GetSaliencyMapOfColor(IplImage* pSrcImg) {
if(m_pSaliencyMapOfCol == NULL){
LoadImage(pSrcImg);
BuildImgPyr();
m_pSaliencyMapOfCol = GetColMap();
}
CvMat* pDstMap_oriSize = cvCreateMat(cvGetSize(m_pOriginImg).height, cvGetSize(m_pOriginImg).width, CV_32FC1);
cvResize(m_pSaliencyMapOfCol, pDstMap_oriSize, CV_INTER_LINEAR);
cvNormalize(pDstMap_oriSize, pDstMap_oriSize, 1.0, 0.0, CV_MINMAX, NULL);
IplImage* pDstImg = MatToImage(pDstMap_oriSize);
//cvReleaseMatHeader(&pDstMap_oriSize);
return pDstImg;
}
IplImage* VAMToolbox::GetSaliencyMapOfOrientation(IplImage* pSrcImg) {
if(m_pSaliencyMapOfOri == NULL){
LoadImage(pSrcImg);
BuildImgPyr();
m_pSaliencyMapOfOri = GetOriMap();
}
CvMat* pDstMap_oriSize = cvCreateMat(cvGetSize(m_pOriginImg).height, cvGetSize(m_pOriginImg).width, CV_32FC1);
cvResize(m_pSaliencyMapOfOri, pDstMap_oriSize, CV_INTER_LINEAR);
cvNormalize(pDstMap_oriSize, pDstMap_oriSize, 1.0, 0.0, CV_MINMAX, NULL);
IplImage* pDstImg = MatToImage(pDstMap_oriSize);
//cvReleaseMatHeader(&pDstMap_oriSize);
return pDstImg;
}
CvMat* VAMToolbox::GetIntMap() {
int numOfMaps;
CvMat** ppIntFeatMap;
CvMat *pTempMat, *pSumMat;
BuildIntPyr();
ppIntFeatMap = CalcIntFeatMap(m_ppIntPyr, &numOfMaps);
pTempMat = cvCreateMat(m_ppIntPyr[4]->rows, m_ppIntPyr[4]->cols, CV_32FC1);
assert(pTempMat != NULL);
pSumMat = cvCreateMat(m_ppIntPyr[4]->rows, m_ppIntPyr[4]->cols, CV_32FC1);
assert(pSumMat != NULL);
cvResize(ppIntFeatMap[0], pSumMat);
for(int i=1; i < numOfMaps; i++){
if(ppIntFeatMap[i]->rows == m_ppIntPyr[4]->rows){
cvAdd(pSumMat, ppIntFeatMap[i], pSumMat);
}
else{
cvResize(ppIntFeatMap[i], pTempMat, CV_INTER_LINEAR);
cvAdd(pSumMat, pTempMat, pSumMat);
}
}
VAMNormalize(pSumMat, pSumMat);
cvReleaseMat(&pTempMat);
ReleaseBatch(&ppIntFeatMap, numOfMaps);
return pSumMat;
}
CvMat* VAMToolbox::GetColMap() {
int numOfMaps;
CvMat** ppColFeatMap;
CvMat *pTempMat, *pSumMat;
CvMat **Rpyr, **Gpyr, **Bpyr, **Ypyr;
if(m_ppIntPyr == NULL){
BuildIntPyr();
}
BuildColPyr(&Rpyr, &Gpyr, &Bpyr, &Ypyr);
ppColFeatMap = CalcColFeatMap(Rpyr, Gpyr, Bpyr, Ypyr, &numOfMaps);
pTempMat = cvCreateMat(m_ppIntPyr[4]->rows, m_ppIntPyr[4]->cols, CV_32FC1);
assert(pTempMat != NULL);
pSumMat = cvCreateMat(m_ppIntPyr[4]->rows, m_ppIntPyr[4]->cols, CV_32FC1);
assert(pSumMat != NULL);
cvResize(ppColFeatMap[0], pSumMat);
for(int i=1; i<numOfMaps; i++){
if(ppColFeatMap[i]->rows == m_ppIntPyr[4]->rows){
cvAdd(pS
图像处理SaliencyMap
需积分: 50 150 浏览量
2012-12-12
18:21:17
上传
评论
收藏 457KB RAR 举报
ds3p2
- 粉丝: 0
- 资源: 2
最新资源
- QuestionTwo.java
- QuestionOne.java
- OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR).rar
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- 南京邮电大学数学实验:熟练掌握 Matlab 软件的基本命令和操作
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- 2017校招真题校园招聘真题算法题(37道)Python源码.zip
- 基于单片机protues仿真的多功能自动饮水机系统设计(仿真图、源代码、演示视频)
- 论文《一种修复流程挖掘事件日志中缺失活动标签的深度学习方法》翻译
- 智慧电厂相关资料发电控制的方式
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈