www.pudn.com > MyImageDB(imageobject).rar > MyImageDBDoc.h


 // MyImageDBDoc.h : interface of the CMyImageDBDoc class 
// 
///////////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_MYIMAGEDBDOC_H__EDD7FAB3_11F0_4203_811A_68466ED4CF05__INCLUDED_) 
#define AFX_MYIMAGEDBDOC_H__EDD7FAB3_11F0_4203_811A_68466ED4CF05__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include "include\ado.h" 
#include "include\imageobject.h" 
#include "include\imageload.h" 
#include "MyColorFeature.h" 
#include "MyColorSpace.h" 
#include "mymath.h" 
#include "mytexture.h" 
#include "myregutex.h" 
#include "SegmenterMS.h"//meanshift算法; 
#include "resultimagedlg.h"//输出meanshift结果图像; 
 
//#define NEIRADIUS 16;//邻域半径,必须与MyTexture.CPP中的定义保持一致 
 
typedef struct tagMyFeatureVector{ 
	CString classname; 
	DOUBLE colorl; 
	DOUBLE colorlw; 
	DOUBLE coloru; 
    DOUBLE coloruw; 
	DOUBLE colorv; 
	DOUBLE colorvw; 
	DOUBLE minmaxtexl; 
	DOUBLE minmaxtexlw; 
	DOUBLE minmaxtexu; 
	DOUBLE minmaxtexuw; 
	DOUBLE minmaxtexv; 
	DOUBLE minmaxtexvw; 
}MyFeatureVector;	 
 
typedef struct tagMyPtNei{ 
	BYTE* ptneiarr; 
}MyPtNei; 
 
typedef struct tagRgnInfo{ 
	BOOL  isflag;//备用标记; 
	INT   ptcount;//该区所含的点数; 
	FLOAT   l;//该区l均值 
	FLOAT   u;//该区u均值 
	FLOAT   v;//该区v均值 
}MyRgnInfo;//分割后各个区的一些统计信息,图像中各点所属区域的信息存放在flag数组中; 
 
class CMyImageDBDoc : public CDocument 
{ 
protected: // create from serialization only 
	CMyImageDBDoc(); 
	DECLARE_DYNCREATE(CMyImageDBDoc) 
 
// Attributes 
public: 
	CString imageName; 
    BOOL isImageLoaded; 
	BYTE* imageData; 
	MyLUV* luvData; 
	MyPtNei* imageNei; 
	LONG  imageWidth; 
	LONG  imageHeight; 
	CImageObject* myImageObject; 
 
// Operations 
public: 
    void GetNearPixelsExt(INT xPos, INT yPos 
	    , BYTE* inPixels, INT picWidth, INT picHeight 
	    , INT radius, BYTE** outArr);//得到邻域像素值(正方形),输入位置从0开始计数, 边缘处对称延拓; 
    void GetNearPixelsGreenExt(INT xPos, INT yPos 
	    , BYTE* inPixels, INT picWidth, INT picHeight 
	    , INT radius, BYTE** outArr);//得到邻域像素值(正方形,G通道),输入位置从0开始计数, 边缘处对称延拓; 
	MyLUV GetMinmaxTexLUV(INT posx, INT posy);//得到指定点处的最小最大纹理,用LUV计算; 
	void SquareFuzzy(); 
    void RefreshView(); 
    void AddImageToDb(); 
	void SetClassVectors();//设置用于分割的类中心向量; 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CMyImageDBDoc) 
	public: 
	virtual BOOL OnNewDocument(); 
	virtual BOOL OnOpenDocument(LPCTSTR lpszPathName); 
	virtual BOOL OnSaveDocument(LPCTSTR lpszPathName); 
 
 
	//}}AFX_VIRTUAL 
 
// Implementation 
public: 
	virtual ~CMyImageDBDoc(); 
#ifdef _DEBUG 
	virtual void AssertValid() const; 
	virtual void Dump(CDumpContext& dc) const; 
#endif 
 
private: 
	MyColorFeature myColorFeature; 
	MyColorSpace   myColorSpace; 
	CMyTexture      myTexture; 
protected: 
	CResultImageDlg resultDlg; 
	MyMath myMath; 
	LONG dataLen; 
	MyFeatureVector* myClassVector;//存放各类中心矢量; 
	INT  vtCount;//中心矢量数组中的元素个数; 
 
	CADORecordset* myImagedataRs;//图像数据记录集; 
 
// Generated message map functions 
protected: 
    void Getorder(INT in1, INT in2);//若第一个数小于第二个数,则直接返回,否则掉换此二数顺序; 
    void MergeNearest(INT curid, MyRgnInfo* rginfoarr, CString* neiarr, INT* mergearr);//合并相似区域; 
    INT  FindMergedRgnMaxbias(INT idint, INT* mergearr, INT bias);//大阈值终止查找合并区,用于coarse watershed; 
    INT  FindMergedRgn(INT idint, INT* mergearr);//找到idint最终所合并到的区号; 
    void AddBNeiToANei(INT curid, INT nearid, CString* neiarr, INT* mergearr);//将nearid的邻域加到curid的邻域中去; 
    void MergeTwoRgn(INT curid, INT nearid, CString* neistr 
		, MyRgnInfo* rginfoarr, INT* mergearr);//将nearid合并到curid中去,更新合并后的区信息,并记录该合并; 
    INT FindNearestNei(INT curid, CString neistr, MyRgnInfo* rginfoarr, INT* mergearr);//寻找neistr中与curid最接近的区,返回该区id号; 
    void AddNeiOfCur(INT curid, INT left, INT right, INT up, INT down, INT* flag, CString* neiarr);//刷新当前点的所有相邻区; 
    void AddNeiRgn(INT curid, INT neiid, CString* neiarr);//增加neiid为curid的相邻区 
    void MergeRgs(MyRgnInfo* rginfoarr, INT rgnumber, INT* flag, INT width, INT height, INT* outmerge, INT& rgnum);//合并相似区域; 
    void ImgToRasterIp(RasterIpChannels** signal);//将图像转换成为RasterIpChannels对象,用于meanshift算法; 
    void FloodVincent(MyImageGraPt* imiarr, INT* graddarr, INT minh, INT maxh, INT* flagarr, INT& outrgnumber);//vincent的分水岭分割算法; 
	void GetGradient(BYTE* image, INT width, INT height 
		, FLOAT* deltar, FLOAT* deltasita);//得到输入图像的梯度; 
    BOOL LocalThresholding(BYTE* buf, int nWidth, int nHeight 
		, int nTempWidth=7, int nTempHeight=7 
		, int nTempCenX=3, int nTempCenY=3); 
	FLOAT GetDistance(MyLUV luv, MyLUV minmaxtex, MyFeatureVector vect);//LUV和特征向量距离; 
    INT DeterPtClass(MyLUV luv, MyLUV minmaxtex, MyFeatureVector* myClassVector, INT numberInArr);//决定每个点所属的类; 
    void SegmentByPt();//执行基于点的分割; 
	BOOL isStrInArr(CString str, CString* arr, LONG arrnumber);//检查指定字符串是否存在于数组中; 
    D1ColorBin* GetHisd1FromDB(CString imageid);//从数据库中读指定图像的一维直方图; 
    void GetHisd1FromDB(INT minid, INT maxid, D1ColorBin** outhisarr, INT& outnumber);//读入此id范围内图像的直方图 
    void GetAllHisd1FromDB(D1ColorBin** outhisarr, INT& outnumber);//读入数据库中所有图像的直方图, 如果某一BIN中count<0,则应将其处理为0; 
 
	BYTE* GetNearPixels(INT xPos, INT yPos 
		, BYTE* inPixels, INT picWidth, INT picHeight 
		, INT inScale, INT& outWidth, INT& outHeight);//得到指定位置和范围内的邻域,边缘处不进行延拓; 
	MyLUV* GetNearPixelsLUV(INT xPos, INT yPos 
		, MyLUV* inLUVs, INT picWidth, INT picHeight 
		, INT inScale, INT& outWidth, INT& outHeight);//得到LUV邻域; 
		 
		 
		void RefreshImageObject();//刷新图像对象的颜色数据; 
	//{{AFX_MSG(CMyImageDBDoc) 
	afx_msg void OnSquareFuzzy(); 
	afx_msg void OnFileSaveAs(); 
	afx_msg void OnHis1d2Db(); 
	afx_msg void OnQueryByHisd1(); 
	afx_msg void OnResetRank(); 
	afx_msg void OnCancelProcess(); 
	afx_msg void OnColorChannel(); 
	afx_msg void OnGreenLuminosity(); 
	afx_msg void OnItuLuminosity(); 
	afx_msg void OnLofLuv(); 
	afx_msg void OnVofHsv(); 
	afx_msg void OnNeiError(); 
	afx_msg void OnMinmaxTex(); 
	afx_msg void OnInverseImage(); 
	afx_msg void OnImageSegment(); 
	afx_msg void OnGaborTransform(); 
	afx_msg void OnLightUp(); 
	afx_msg void OnDirectionHis(); 
	afx_msg void OnEntropy(); 
	afx_msg void OnDirectionHisAll(); 
	afx_msg void OnHsiPic(); 
	afx_msg void OnReverseCopy(); 
	afx_msg void OnOrderDetect(); 
	afx_msg void OnEdgeDetect();//使用LocalThresholding(from cg) 
	afx_msg void OnGridient(); 
	afx_msg void OnQuickSort(); 
	afx_msg void OnWaterShedSegment();//分水岭分割; 
	afx_msg void OnWatershedSegmentInver(); 
	afx_msg void OnWatershedSegmentVincent(); 
	afx_msg void OnFifoQueue(); 
	afx_msg void OnMeanShift(); 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_MYIMAGEDBDOC_H__EDD7FAB3_11F0_4203_811A_68466ED4CF05__INCLUDED_)