📄 globalapi.h
字号:
#ifndef _GLOBAL_API
#define _GLOBAL_API
#include <math.h>
#include "cdib.h"
#include "ColorTable.h"
#include <complex>
using namespace std;
//----------------------------------------------------------------------
// DIB处理函数
BOOL DIBShow(CFile* pFile);
BOOL ConvertDDBToDIB(HBITMAP hBitmap, CDib* pDibDest, HPALETTE hPal);
BOOL CopyDIB(CDib* pDibSrc, CDib* pDibDst);
BOOL CopyScreenToDIB(LPRECT lpRect, CDib* pDibDest);
HPALETTE GetSystemPalette() ;
HPALETTE CopyPalette(HPALETTE hPalSrc);
BOOL ReadDIB(CFile* pFile, LPBITMAPINFOHEADER lpBMIH, LPBYTE lpImage);
HPALETTE MakeDIBPalette(LPVOID lpvColorTable, LPBITMAPINFOHEADER lpBMIH);
BOOL PaintDIB(CDC* pDC, LPBITMAPINFOHEADER lpBMIH, LPBYTE lpImage, CPoint origin, CSize size, HPALETTE hPalette);
//----------------------------------------------------------------------
// 运动检测
BOOL GetBackground(CString strFilePath, int nTotalFrameNum, int nImageWidth,
int nImageHeight, unsigned char* pUnchBackGround);
BOOL LoadDibSeq(CString strFilePath, int nCurFrameNum, int nTotalFrameNum, CDib* pDib);
CString GetFileName(CString strFilePathName, int nCurFrameNum);
void BinaFrameDiff(unsigned char *pUnchImg1, unsigned char *pUnchImg2,
int nWidth, int nHeight, unsigned char * pUnchResult,
int nThreshold=10);
void ErodeFrameDiff(unsigned char *pUnchImg, int nWidth, int nHeight, int nErodeHalfWin,
int nErodeThreshold, unsigned char *pUnchResult);
//----------------------------------------------------------------------
// 图象分割
void RegionSegFixThreshold(CDib * pDib, int nThreshold=100);
void RobertsOperator(CDib * pDib, double * pdGrad);
void LaplacianOperator(CDib * pDib, double * pdGrad);
void EdgeTrack(CDib * pDib, unsigned char * pUnEdgeTrack);
void RegionGrow(CDib * pDib, unsigned char * pUnRegion, int nThreshold = 10);
void RegionSegAdaptive(CDib * pDib) ;
void SobelOperator(CDib * pDib, double * pdGrad);
void PrewittOperator(CDib * pDib, double * pdGrad);
// canny 算子
void GaussianSmooth(unsigned char *pUnchImg, int nWidth, int nHeight, double sigma, unsigned char * pUnchSmthdImg);
void MakeGauss(double sigma, double **pdKernel, int *pnWindowSize) ;
void DirGrad(unsigned char *pUnchSmthdImg, int nWidth, int nHeight,
int *pnGradX , int *pnGradY);
void GradMagnitude(int *pnGradX, int *pnGradY, int nWidth, int nHeight, int *pnMag) ;
void NonmaxSuppress(int *pnMag, int *pnGradX, int *pnGradY, int nWidth, int nHeight, unsigned char *pUnchRst);
void EstimateThreshold(int *pnMag, int nWidth, int nHeight, int *pnThdHigh,int *pnThdLow,
unsigned char * pUnchEdge, double dRatioHigh, double dRationLow) ;
void Canny(unsigned char *pUnchImage, int nWidth, int nHeight, double sigma,
double dRatioLow, double dRatioHigh, unsigned char *pUnchEdge) ;
void Hysteresis(int *pnMag, int nWidth, int nHeight, double dRatioLow,
double dRatioHigh, unsigned char *pUnchEdge) ;
void TraceEdge (int y, int x, int nLowThd, unsigned char *pUnchEdge, int *pnMag, int nWidth) ;
// 小波变换函数原型
// Daubechies紧致正交小波基
// 不同支撑区间长度下的滤波器系数如下
const double hCoef[10][20] =
{
{ .707106781187, .707106781187},
{ .482962913145, .836516303738, .224143868042, -.129409522551 },
{ .332670552950, .806891509311, .459877502118, -.135011020010, -.085441273882, .035226291882 },
{ .230377813309, .714846570553, .630880767930, -.027983769417,
-.187034811719, .030841381836, .032883011667, -.010597401785 },
{ .160102397974, .603829269797, .724308528438, .138428145901, -.242294887066,
-.032244869585, .077571493840, -.006241490213, -.012580751999, .003335725285 },
{ .111540743350, .494623890398, .751133908021, .315250351709, -.226264693965,
-.129766867567, .097501605587, .027522865530, -.031582039318, .000553842201,
.004777257511, -.001077301085 },
{ .077852054085, .396539319482, .729132090846, .469782287405, -.143906003929,
-.224036184994, .071309219267, .080612609151, -.038029936935, -.016574541631,
.012550998556, .000429577973, -.001801640704, .000353713800 },
{ .054415842243, .312871590914, .675630736297, .585354683654, -.015829105256,
-.284015542962, .000472484574, .128747426620, -.017369301002, -.044088253931,
.013981027917, .008746094047, -.004870352993, -.000391740373, .000675449406,
-.000117476784 },
{ .038077947364, .243834674613, .604823123690, .657288078051, .133197385825,
-.293273783279, -.096840783223, .148540749338, .030725681479, -.067632829061,
.000250947115, .022361662124, -.004723204758, -.004281503682, .001847646883,
.000230385764, -.000251963189, .000039347320 },
{ .026670057901, .188176800078, .527201188932, .688459039454, .281172343661,
-.249846424327, -.195946274377, .127369340336, .093057364604, -.071394147166,
-.029457536822, .033212674059, .003606553567, -.010733175483, .001395351747,
.001992405295, -.000685856695, -.000116466855, .000093588670, -.000013264203 }
};
BOOL DWT_1D(double* pDbSrc, int nMaxLevel,int nDWTSteps, int nInv, int nStep, int nSupp);
BOOL DWTStep_1D(double* pDbSrc, int nCurLevel,int nInv, int nStep, int nSupp);
BOOL DWT_2D(double* pDbSrc, int nMaxWLevel, int nMaxHLevel, int nDWTSteps, int nInv, int nStep, int nSupp);
BOOL DWTStep_2D(double* pDbSrc, int nCurWLevel, int nCurHLevel, int nMaxWLevel, int nMaxHLevel, int nInv, int nStep, int nSupp);
BOOL ImageDWT(LPBYTE lpImage, int nMaxWLevel, int nMaxHLevel,int nDWTSteps, int nInv, int nStep, int nSupp);
int Log2(int n);
BYTE FloatToByte(double f);
char FloatToChar(double f);
//----------------------------------------------------------------------
// 图象增强函数
BOOL GraySegLinTrans(CDib* pDib, int nX1, int nY1,
int nX2, int nY2); // 分段线性变换
BOOL HistogramEqualize(CDib* pDib); // 直方图均衡化
BOOL GeneralTemplate(CDib* pDib, int nTempWidth, int nTempHeight,
int nTempCenX, int nTempCenY,
double* pdbTemp, double dbCoef); // 通用模板操作
BOOL MedianFilter(CDib* pDib, int nTempWidth, int nTempHeight,
int nTempCenX, int nTempCenY); // 中值滤波
unsigned char GetMedianValue(unsigned char * pUnchFltValue, int iFilterLen); // 获取中值
BOOL ReplaceDIBColorTable(CDib* pDib, LPBYTE pColorsTable); // 替换DIB颜色表
void LowPassFilterEnhance(LPBYTE lpImage, int nWidth, int nHeight, int nRadius) ;// 低通滤波
void HighPassFilterEnhance(LPBYTE lpImage, int nWidth, int nHeight, int nRadius);// 高通滤波
void ButterWorthLowPass(LPBYTE lpImage, int nWidth, int nHeight, int nRadius); // ButterWorth低通滤波
void ButterWorthHighPass(LPBYTE lpImage, int nWidth, int nHeight, int nRadius); // ButterWorth高通滤波
void LinearSharpen (LPBYTE lpImage, int nWidth, int nHeight); // 线性锐化增强
//-----------------------------------------------------------------------
// imageview.cpp函数原型
BOOL LimbPatternBayer(CDib *pDib);
BOOL DitherFloydSteinberg(CDib *pDib);
//--------------------------------------------------------------------------
// 图象分析函数原型
BOOL DIBHOLENUMBER(CDib *pDib);
BOOL DIBMOMENT(CDib *pDib);
BOOL DIBBARYCENTERMOMENT(CDib *pDib);
BOOL DIBFREAMEWORK(CDib *pDib);
BOOL DIBCHESSBOARDDISRESTORE(CDib *pDib);
BOOL DIBSTREETDIS(CDib *pDib);
BOOL DIBOUTLINE(CDib *pDib);
BOOL WINAPI DIBTrace(CDib *pDib);
//-------------------------------------------------------------------------------------
// 图象变换函数原型
VOID WINAPI FFT_1D(complex<double> * pCTData, complex<double> * pCFData, int nLevel);
VOID WINAPI IFFT_1D(complex<double> * pCFData, complex<double> * pCTData, int nLevel);
VOID WINAPI IFFT_2D(complex<double> * pCFData, complex<double> * pCTData, int nWidth, int nHeight);
VOID WINAPI IDFT_2D(CDib * pDib,double * pTrRstRpart, double * pTrRstIpart);
VOID WINAPI WINAPI DCT(double *f, double *F, int power);
VOID WINAPI WALSH(double *f, double *F, int r);
VOID WINAPI IWALSH(double *F, double *f, int r);
BOOL WINAPI THREECROSS(double *Matrix, int Rank, double *QMatrix, double *MainCross, double *HypoCross);
BOOL WINAPI BSTQ(int Rank, double *MainCross, double *HypoCross, double *Matrix, double Eqs, int MaxT);
BOOL WINAPI DIBDct(CDib *pDib);
BOOL WINAPI DIBWalsh(CDib *pDib);
BOOL WINAPI DIBHOTELLING(CDib *pDib);
VOID WINAPI DIBDFT_2D(CDib * pDib,double * pTrRstRpart, double * pTrRstIpart);
VOID WINAPI DIBFFT_2D(complex<double> * pCTData, int nWidth, int nHeight, complex<double> * pCFData);
//------------------------------------------------------------------------------------
// 图象复原的函数原型
BOOL WINAPI DIBNoRestriction(CDib *pDib );
BOOL WINAPI DIBInverseFilter (CDib *pDib);
BOOL WINAPI DIBNoiseDegeneration (CDib *pDib);
BOOL WINAPI DIBWinnerFilter (CDib *pDib);
BOOL WINAPI DIBMotionDegeneration(CDib *pDib);
BOOL WINAPI DIBMotionRestore(CDib *pDib);
//-------------------------------------------------------------------------------------
// 图象编码函数原型
BOOL WINAPI WRITE2IMG(CDib * pDib, CFile& file);
BOOL WINAPI LOADIMG(CDib * pDib, CFile& file);
BOOL WINAPI DIBBITPLANE(CDib *pDib,BYTE bBitNum);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -