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

📄 myimagedbdoc.h

📁 这是一个分水岭程序
💻 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_)

⌨️ 快捷键说明

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