📄 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_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -