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

📄 superviseddlg.cpp

📁 基于小波的SAR斑点处理
💻 CPP
字号:
// SupervisedDlg.cpp : implementation file
//

#include "stdafx.h"
#include "RSIP.h"
#include "ImgFunction.h"
#include "SupervisedDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSupervisedDlg dialog

CSupervisedDlg::CSupervisedDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSupervisedDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSupervisedDlg)
	m_nImgHeight = 0;
	m_nImgWidth = 0;
	//}}AFX_DATA_INIT
}

void CSupervisedDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSupervisedDlg)
	DDX_Control(pDX, IDC_IMAGELIST, m_ImageList);
	DDX_Text(pDX, IDC_IMAGEHEIGHT, m_nImgHeight);
	DDX_Text(pDX, IDC_IMAGEWIDTH, m_nImgWidth);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSupervisedDlg, CDialog)
	//{{AFX_MSG_MAP(CSupervisedDlg)
	ON_BN_CLICKED(IDC_BROWSEFILE, OnBrowsefile)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSupervisedDlg message handlers

void CSupervisedDlg::OnBrowsefile() 
{
	CFileDialog fileDlg(TRUE,"*.cls",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
		"Class Files(*.cls)|*.cls|Info Files(*.inf)|*.inf||",this);
	if(fileDlg.DoModal() == IDOK)
	{
		CString szFileName = fileDlg.GetPathName();

		m_RsClassInfoFile.Reset();

		szFileName.MakeUpper();
		int Length = szFileName.GetLength();

		if( szFileName[Length-3] == 'C' &&
			szFileName[Length-2] == 'L' &&
			szFileName[Length-1] == 'S' )
		{
			CFile File;
			if(0 == File.Open(szFileName,CFile::modeRead))
			{
				MessageBox("不能打开文件!");
				return;
			}
			if(!m_RsClassInfoFile.ReadFrom(File))
			{
				MessageBox("打开分类信息文件失败!");
				return;
			}
			
			File.Close();

			m_RsClassInfoFile.Calculate();
		}
		else
		{
			CFile File;

			if(0 == File.Open(szFileName,CFile::modeRead))
			{
				MessageBox("不能打开文件!");
				return;
			}
			CRSImage *pRSImage = new CRSImage();
			if(!pRSImage->LoadRsInfo(&File))
			{
				delete pRSImage;
				MessageBox("打开图象信息文件失败!");
				return;
			}
			if(pRSImage->m_nImgType != IMAGE_THEMATIC)
			{
				MessageBox("非专题影象的信息文件!");
				delete pRSImage;
				return;
			}

			m_RsClassInfoFile.m_nImageWidth = pRSImage->m_nImgWidth;
			m_RsClassInfoFile.m_nImageHeight = pRSImage->m_nImgHeight;

			m_RsClassInfoFile.m_nImageCount = pRSImage->m_nLinkedImage;
			
			CString *pszTemp;
			for(int i=0; i<m_RsClassInfoFile.m_nImageCount; i++)
			{
				pszTemp = new CString(*(CString *)(pRSImage->m_aLinkedImageNameArray[i]));
				m_RsClassInfoFile.m_aImageNameArray.Add(pszTemp);
			}

			m_RsClassInfoFile.m_nClassCount = pRSImage->m_nClassNumber;

			CRsThematicInfo *pThematicInfo;
			CRSClassInfo *pClassInfo;
			
			for(i=0; i<m_RsClassInfoFile.m_nClassCount; i++)
			{
				pThematicInfo = (CRsThematicInfo *)(pRSImage->m_aThemeInfoArray[i]);

				pClassInfo = new CRSClassInfo();

				pClassInfo->m_nValue = pThematicInfo->m_nValue;
				pClassInfo->m_szClassName = pThematicInfo->m_szClassName;
				pClassInfo->m_clrColor = pThematicInfo->m_clrColor;
				pClassInfo->m_pdCenter = new double[m_RsClassInfoFile.m_nImageCount];
				for(int j=0; j<m_RsClassInfoFile.m_nImageCount; j++)
				{
					pClassInfo->m_pdCenter[j] = pThematicInfo->m_pdCenter[j];
				}
				pClassInfo->m_pdCovariance = new double[m_RsClassInfoFile.m_nImageCount*m_RsClassInfoFile.m_nImageCount];
				for(j=0; j<m_RsClassInfoFile.m_nImageCount*m_RsClassInfoFile.m_nImageCount; j++)
				{
					pClassInfo->m_pdCovariance[j] = pThematicInfo->m_pdCovariance[j];
				}
			
				m_RsClassInfoFile.m_aClassInfoArray.Add(pClassInfo);
			}
			
			delete pRSImage;
		}
		
		if(!IsAllFileExist(m_RsClassInfoFile.m_aImageNameArray))
		{
			MessageBox("文件中所列的部分图象不存在!",
				"错误",	MB_OK|MB_ICONINFORMATION);
			return;
		}
		//Set the content of the item
		m_ImageList.ResetContent();

		CString *pszTemp;
		for(int i=0; i<m_RsClassInfoFile.m_nImageCount; i++)
		{
			pszTemp = (CString *)(m_RsClassInfoFile.m_aImageNameArray[i]);
			m_ImageList.AddString(*pszTemp);
		}
		SetDlgItemInt(IDC_IMAGEWIDTH,m_RsClassInfoFile.m_nImageWidth);
		SetDlgItemInt(IDC_IMAGEHEIGHT,m_RsClassInfoFile.m_nImageHeight);

		SetDlgItemInt(IDC_CLASSNUMBER,m_RsClassInfoFile.m_nClassCount);
	}	
}
/////////////////////////////////////////////////////////////////////////////
// CTrainingAreaDlg dialog


CTrainingAreaDlg::CTrainingAreaDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTrainingAreaDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTrainingAreaDlg)
	m_nImgHeight = 0;
	m_nImgWidth = 0;
	//}}AFX_DATA_INIT
	m_pView = (CView *)pParent;
}


void CTrainingAreaDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTrainingAreaDlg)
	DDX_Control(pDX, IDC_CLASS_LIST, m_ClassList);
	DDX_Text(pDX, IDC_IMAGEHEIGHT, m_nImgHeight);
	DDX_Text(pDX, IDC_IMAGEWIDTH, m_nImgWidth);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTrainingAreaDlg, CDialog)
	//{{AFX_MSG_MAP(CTrainingAreaDlg)
	ON_BN_CLICKED(IDC_IMAGELIST, OnImagelist)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTrainingAreaDlg message handlers

BOOL CTrainingAreaDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_ClassList.InsertColumn( 1 , "名字", LVCFMT_LEFT, 60 ,0 );
	m_ClassList.InsertColumn( 2 , "颜色", LVCFMT_LEFT, 60 ,0 );
	m_ClassList.InsertColumn( 3 , "点数", LVCFMT_LEFT, 60 ,0 );
	
	CImageList *pimagelist;
	pimagelist = new CImageList();
	
	HICON hIcon;
	pimagelist->Create(16, 16, TRUE/*bMask*/, 1, 1);
	hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	pimagelist->Add(hIcon);
	
	m_ClassList.SetImageList(pimagelist,LVSIL_SMALL);

	m_RsClassInfoFile.m_nImageHeight = m_nImgHeight;
	m_RsClassInfoFile.m_nImageWidth = m_nImgWidth;
	
	return TRUE;
}

void CTrainingAreaDlg::OnImagelist() 
{
	CImgListDlg ImageListDlg(this);

	CString *pszTemp;
	for(int i=0; i<m_RsClassInfoFile.m_nImageCount; i++)
	{
		pszTemp = new CString(*(CString *)(m_RsClassInfoFile.m_aImageNameArray[i]));
		ImageListDlg.m_aImageArray.Add(pszTemp);
	}
	ImageListDlg.m_nImgHeight = m_nImgHeight;
	ImageListDlg.m_nImgWidth = m_nImgWidth;

	if(ImageListDlg.DoModal()==IDOK)
	{
		for(i=0; i<m_RsClassInfoFile.m_nImageCount; i++)
		{
			pszTemp = (CString *)(m_RsClassInfoFile.m_aImageNameArray[i]);
			delete pszTemp;
		}
		m_RsClassInfoFile.m_aImageNameArray.RemoveAll();

		for(i=0; i<ImageListDlg.m_aImageArray.GetSize(); i++)
		{
			pszTemp = new CString(*(CString *)ImageListDlg.m_aImageArray[i]);
			m_RsClassInfoFile.m_aImageNameArray.Add(pszTemp);
		}
		m_RsClassInfoFile.m_nImageCount = ImageListDlg.m_aImageArray.GetSize();
	}	
}

void CTrainingAreaDlg::OnOK() 
{
	if(m_RsClassInfoFile.m_nImageCount==0 || m_RsClassInfoFile.m_nClassCount==0)
	{
		MessageBox("没有选取图象或者图象没有分类!");
		return;
	}
	CFileDialog fileDlg(FALSE,"*.cls",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
		"Class Info Files(*.cls)|*.cls||",this);
	if(fileDlg.DoModal() == IDOK)
	{
		CFile File;
		if(0 == File.Open(fileDlg.GetPathName(),CFile::modeCreate|CFile::modeWrite))
		{
			MessageBox("不能创建影象!");
			return;
		}
		m_RsClassInfoFile.WriteTo(File);

		File.Close();
	}

	m_pView->PostMessage(WM_COMMAND,IDD_TRAININGAREADLG,0L);	
	
	CDialog::OnOK();
}

BOOL CTrainingAreaDlg::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::Create(IDD, pParentWnd);
}

void CTrainingAreaDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	
}

void CTrainingAreaDlg::OnCancel() 
{
	m_pView->PostMessage(WM_COMMAND,IDD_TRAININGAREADLG,0L);
	
	CDialog::OnCancel();
}

BOOL CTrainingAreaDlg::AddTrainingArea(POINT *pptPoint,int nPointCount,CString szClassName,COLORREF clrColor)
{
	int nOrder = m_RsClassInfoFile.AddTrainingRegion(pptPoint,nPointCount,szClassName,clrColor);

	CRSClassInfo * pInfo = (CRSClassInfo *)(m_RsClassInfoFile.m_aClassInfoArray[nOrder]);

	LV_ITEM Item;
	Item.pszText = new char[64];
	
	Item.mask = LVIF_IMAGE | LVIF_TEXT ;
	Item.iItem = nOrder;
	Item.iSubItem = 0;
	Item.state = 0;
	Item.stateMask = 0;
	Item.iImage = 0;
	Item.cchTextMax = 0;
	strcpy(Item.pszText , pInfo->m_szClassName);
	if(nOrder == m_RsClassInfoFile.m_nClassCount-1)
		m_ClassList.InsertItem( &Item );
	else
		m_ClassList.SetItem( &Item );

	Item.mask = LVIF_TEXT ;
	Item.iSubItem = 1;
	sprintf(Item.pszText,"(%d,%d,%d)",GetRValue(clrColor),
		GetGValue(clrColor),
		GetBValue(clrColor));
	m_ClassList.SetItem( &Item  );
	
	Item.iSubItem = 2;
	sprintf(Item.pszText,"%d",pInfo->m_nPointNumber);
	m_ClassList.SetItem( &Item  );
	
	delete Item.pszText;

	return TRUE;
}

void CTrainingAreaDlg::ListClassName(CPtrArray &aClassInfoArray)
{
	CString *pszTemp;
	CRSClassInfo *pInfo;
	for(int i=0; i<m_RsClassInfoFile.m_nClassCount; i++)
	{
		pInfo = (CRSClassInfo *)(m_RsClassInfoFile.m_aClassInfoArray[i]);
		pszTemp = new CString(pInfo->m_szClassName);
		aClassInfoArray.Add(pszTemp);
	}
}

/////////////////////////////////////////////////////////////////////////////
// CImgListDlg dialog


CImgListDlg::CImgListDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CImgListDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CImgListDlg)
	m_nImgHeight = 0;
	m_nImgWidth = 0;
	//}}AFX_DATA_INIT
}

CImgListDlg::~CImgListDlg()
{
	CString *pszTemp;
	for(int i=0;i<m_aImageArray.GetSize();i++)
	{
		pszTemp = (CString *)m_aImageArray[i];
		delete pszTemp;
	}
	m_aImageArray.RemoveAll();
}

void CImgListDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CImgListDlg)
	DDX_Control(pDX, IDC_IMAGE_LIST, m_ImgList);
	DDX_Text(pDX, IDC_IMAGEHEIGHT, m_nImgHeight);
	DDX_Text(pDX, IDC_IMAGEWIDTH, m_nImgWidth);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CImgListDlg, CDialog)
	//{{AFX_MSG_MAP(CImgListDlg)
	ON_BN_CLICKED(IDC_BROWSEFILE, OnBrowsefile)
	ON_BN_CLICKED(IDC_REMOVEIMAGE, OnRemoveimage)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CImgListDlg message handlers

void CImgListDlg::OnBrowsefile() 
{
	CFileDialog fileDlg(TRUE,"*.dat",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
		"Image Files(*.dat)|*.dat||",this);
	if(fileDlg.DoModal() == IDOK)
	{
		CString *pszFileName = new CString();
		*pszFileName = fileDlg.GetPathName();

		CFile File;
		if(0 == File.Open(*pszFileName,CFile::modeRead))
			return;
		if(File.GetLength() != m_nImgWidth*m_nImgHeight)
		{
			MessageBox("影象大小不匹配!",
				"错误",
				MB_OK|MB_ICONINFORMATION);
			File.Close();
			delete pszFileName;
			return;
		}
		File.Close();

		m_aImageArray.Add(pszFileName);

		m_ImgList.AddString(*pszFileName);
		m_ImgList.SetCurSel(m_aImageArray.GetSize()-1);
	}	
}

void CImgListDlg::OnRemoveimage() 
{
	int nCurSel = m_ImgList.GetCurSel();
	if(nCurSel<0)
		return;

	CString *pszTemp;
	pszTemp = (CString *)(m_aImageArray[nCurSel]);
	delete pszTemp;

	m_aImageArray.RemoveAt(nCurSel);
	
	m_ImgList.DeleteString(nCurSel);
	m_ImgList.SetCurSel(0);
}

BOOL CImgListDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	CString *pszTemp;
	for(int i=0; i<m_aImageArray.GetSize(); i++)
	{
		pszTemp = (CString *)m_aImageArray[i];
		m_ImgList.AddString(*pszTemp);
	}
	m_ImgList.SetCurSel(0);
	
	return TRUE; 
}

⌨️ 快捷键说明

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