• 大小: 23KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-11-15
  • 语言: C/C++
  • 标签:

资源简介

saliency图像显著性特征提取,多空间颜色特征提取,颜色直方图

资源截图

代码片段和文件信息

#include “stdafx.h“
#include “ExtractFeature.h“
#include 
#include 
#include “opencv2/imgproc/imgproc.hpp“
#include 
#include 
#include 
#include

using namespace std;
using namespace cv;

ExtractFeature::ExtractFeature(){

}

ExtractFeature::ExtractFeature(string Path int idx int saliency int RGB int OPP int rg int HSV int LAB){
//ExtractFeature::srcImage = srcImage;
ExtractFeature::Path = Path;
ExtractFeature::HSV = HSV;
ExtractFeature::idx = idx;
ExtractFeature::saliency = saliency;
ExtractFeature::RGB = RGB;
ExtractFeature::OPP = OPP;
ExtractFeature::rg = rg;
ExtractFeature::LAB = LAB;


}

ExtractFeature::~ExtractFeature()
{
}



void ExtractFeature::fft2(IplImage *src IplImage *dst)
{   //实部、虚部
IplImage *image_Re = 0 *image_Im = 0 *Fourier = 0;
//   int i j;
image_Re = cvCreateImage(cvGetSize(src) IPL_DEPTH_64F 1);  //实部
//Imaginary part
image_Im = cvCreateImage(cvGetSize(src) IPL_DEPTH_64F 1);  //虚部
//2 channels (image_Re image_Im)
Fourier = cvCreateImage(cvGetSize(src) IPL_DEPTH_64F 2);

/************************************************************************/
/*
void cvConvertScale( const CvArr* src CvArr* dst double scale=1 double shift=0 );
src
原数组.
dst
输出数组
scale
比例因子.
shift
原数组元素按比例缩放后添加的值。

函数 cvConvertScale 有多个不同的目的因此就有多个意义,
函数按比例从一个数组中拷贝元素到另一个元素这种操作是最先执行的,
或者任意的类型转换,正如下面的操作:

dst(I)=src(I)*scale + (shiftshift...)

多通道的数组对各个地区通道是独立处理的。
*/
/************************************************************************/

//实部的值初始设为源图像,虚部的值初始设为0
// Real part conversion from u8 to 64f (double)
cvConvertScale(src image_Re 1 0);
// Imaginary part (zeros)
cvZero(image_Im);
// Join real and imaginary parts and stock them in Fourier image
cvMerge(image_Re image_Im 0 0 Fourier);
// Application of the forward Fourier transform
cvDFT(Fourier dst CV_DXT_FORWARD);
cvReleaseImage(&image_Re);
cvReleaseImage(&image_Im);
cvReleaseImage(&Fourier);
}

Mat ExtractFeature::setSliency(){
//string imagePath = “G:\\工程\\MATLAB工程\\annotation_corel\\eccv_2002_image_files\\1000\\1000.jpeg“;


//amplitude和phase分别是图像的振幅谱和相位谱
int i j nRow nCol;
//float range[2];
//src = cvLoadImage(imagePath.c_str() 1);
Mat salD;
if (saliency == 1){
IplImage *ImageRe *ImageIm *Fourier *Inverse *LogAmplitude *Sine *Cosine *src;
IplImage *Saliency *Residual;
IplImage *tmp1 *tmp2 *tmp3;
double minNum = 0 maxNum = 0 scale shift;

src = cvLoadImage(Path.c_str() 0);

//显著性计算
//参考论文:Saliency Detection: A Spectral Residual Approach
//加载源图像,第二个参数为0表示将输入的图片转为单通道,大于0为三通道
//src = cvLoadImage(imagePath.c_str() 0);
//注意Fourier是一个两通道的图像,一个通道为实部,一个为虚部
Fourier = cvCreateImage(cvGetSize(src) IPL_DEPTH_64F 2);
Inverse = cvCreateImage(cvGetSize(src) IPL_DEPTH_64F 2);
//频谱的实部
Imag

评论

共有 条评论