⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 curveletutils.h

📁 Edge detection in microscopy images using curvelets
💻 H
字号:
/* *  CurveletUtils.h * *  Created by Tobias Gebäck on 12.9.2007. *  Copyright 2007 ETH Zurich. All rights reserved. * */using namespace std;#include "nummat.hpp"#include "numvec.hpp"#ifndef NO3D_CURVELETSnamespace fdct3d_ns {	#include "numtns.hpp"}#endif#include "fdct_wrapping_inc.hpp"namespace CurveletUtils {		typedef std::vector< std::vector<fdct_wrapping_ns::CpxNumMat> > CurveletData;#ifndef NO3D_CURVELETS	typedef std::vector< std::vector<fdct3d_ns::CpxNumTns> > CurveletData3D;#endif		enum CurvUtilError { CUError_NoError = 0, CUError_BadParams = 1 };		void VarAndMean(const fdct_wrapping_ns::DblNumVec &vec, double &mean, double &var);		/* Mapping of indices and coordinates to closest index on other level */	void MapXYToLevel(const CurveletData &cdata, double x, double y, int tolev, int &ti, int &tj, int dir);	void MapToLevel(const CurveletData &cdata, int fromlev, int fromdir, int fi, int fj, int tolev, int &ti, int &tj, int dir);	void MapXYToGrid(int m, int n, double x, double y, int &ti, int &tj);	void MapToGrid(int m, int n, const CurveletData &cdata, int fromlev, int fromdir, int fi, int fj, int &ti, int &tj);	int GetQuadrant(const CurveletData &cdata, int level, int diridx);		/* Compute an all zero fdct, i.e. create the correct data structure */	CurvUtilError zero_fdct(int m, int n, CurveletData &cdata, int allcurvelets=0, int nscales=-1, int nangles_coarse=-1);		/* count nr of nonzero elements in CurveletData */	void countnnz(const CurveletData &cdata, int &nnz, int &nel);	CurvUtilError countnnz(const CurveletData &cdata, const fdct_wrapping_ns::IntNumVec &levels, int &nnz, int &nel);	int countnnz(const CurveletData &cdata);	CurvUtilError countnnz(const CurveletData &cdata, const fdct_wrapping_ns::IntNumVec &levels, int &nnz);		/* count nr of elements only */	int countnel(const CurveletData &cdata);	CurvUtilError countnel(const CurveletData &cdata, const fdct_wrapping_ns::IntNumVec &levels, int &nel);		/* combinations of real/imaginary parts of curvelets */	enum CurvFilterType { CF_Abs = 0, CF_Real, CF_Imag, CF_Sum }; 	 	/* Options passed to ExtractMultipleDirFields */	struct DirFieldOptions {		int CurveletSize;  // The number of positions away that a curvelet coefficient influences		int CircSumOffset; // running circular sum over -CSO..CSO		int LocMaxGap;  // the required gap between maximums (for multiple field extraction)		CurvFilterType FilterType;	};		/* Extract a directional field describing preferred direction at each grid point */	CurvUtilError ExtractMultipleDirFields(int m, int n, const CurveletData &cdata, const fdct_wrapping_ns::IntNumVec &levels, int nrfields, std::vector< std::vector<fdct_wrapping_ns::DblNumMat> > &dirfields, DirFieldOptions *opts = NULL);		/* Extract magnitude and direction (as index 0..7) at each grid point */	CurvUtilError ExtractDirAndMag(int m, int n, const CurveletData &cdata, const fdct_wrapping_ns::IntNumVec &levels, fdct_wrapping_ns::DblNumMat &mag, fdct_wrapping_ns::IntNumMat &dir);		/* Extract directional field, using only projections onto x- and y-axes */	CurvUtilError ExtractDirections(int m, int n, const CurveletData &cdata, const fdct_wrapping_ns::IntNumVec &levels, fdct_wrapping_ns::DblNumMat &xcmp, fdct_wrapping_ns::DblNumMat &ycmp);		/* Get magnitudes on specified levels, summed over all directions */	CurvUtilError GetMagnitude(int m, int n, const CurveletData &cdata, const fdct_wrapping_ns::IntNumVec &levels, fdct_wrapping_ns::DblNumMat &mag, int crvlt_size);		/* For mirror-extended curvelets: Get magnitudes on specified levels, summed over all directions */	CurvUtilError GetMagnitudeME(int m, int n, const CurveletData &cdata, const fdct_wrapping_ns::IntNumVec &levels, fdct_wrapping_ns::DblNumMat &mag, int crvlt_size);	#ifndef NO3D_CURVELETS	/* Extract directional field (normals to surfaces) at each grid point on (m x n x p) grid */	CurvUtilError ExtractDirFields3D(int m, int n, int p, const CurveletData3D &cdata3, const fdct_wrapping_ns::IntNumVec &levels, int nrfields,  std::vector< std::vector<fdct3d_ns::DblNumTns> > &dirfields, DirFieldOptions *opts = NULL);		/* Get magnitudes of 3D curvelets, summed over all directions, on (m x n x p) grid */	CurvUtilError GetMagnitude3D(int m, int n, int p, const CurveletData3D &cdata3, const fdct_wrapping_ns::IntNumVec &levels, fdct3d_ns::DblNumTns &mag, int crvlt_size);#endif		/* find Nth largest coefficient */	double FindNthCoeffSize(const CurveletData &c, int Ncoeffs);		/* threshold coefficients */	void ThresholdCoeffs(CurveletData &c, double thrsh);	CurvUtilError ThresholdCoeffs(CurveletData &c, double thrsh, const fdct_wrapping_ns::IntNumVec &levels);		void ChooseByCurvature(CurveletData &c, double T1, double T2, int lastklev);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -