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

📄 wavelettransformdlg.cpp

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

#include "stdafx.h"
#include "RSIP.h"
#include "WaveletTransformDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CWaveletTransformDlg dialog


CWaveletTransformDlg::CWaveletTransformDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CWaveletTransformDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CWaveletTransformDlg)
	m_WTTransform_Times = 1;
	//}}AFX_DATA_INIT
	m_WTBasis_Selected = 0;
	m_operatingMode = FALSE;
}


void CWaveletTransformDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWaveletTransformDlg)
	DDX_Control(pDX, IDC_WAVELET_BASIS_LIST, m_WTTransform_List);
	DDX_Text(pDX, IDC_WAVELET_TRANSFORM_TIMES, m_WTTransform_Times);
	DDV_MinMaxByte(pDX, m_WTTransform_Times, 1, 100);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CWaveletTransformDlg, CDialog)
	//{{AFX_MSG_MAP(CWaveletTransformDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWaveletTransformDlg message handlers

BOOL CWaveletTransformDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	// 设置可供使用的小波基
	m_WTTransform_List.AddString("对称紧支集双正交小波(S1D3)");
	m_WTTransform_List.AddString("对称紧支集双正交小波(S2D2)");
	m_WTTransform_List.AddString("对称紧支集双正交小波(S3D1)");

	// 将第一组小波基设置为确省选择的,或设置某组小波基被选
	m_WTTransform_List.SetCurSel(m_WTBasis_Selected);

	// 设置微调的范围,设置小波变换的次数
	CSpinButtonCtrl * pSpin = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
	pSpin->SetRange(1,100);
	pSpin->SetPos(m_WTTransform_Times);

	// 设置对话框的标题
	if(m_operatingMode)
		SetWindowText("小波变换");
	else
		SetWindowText("小波逆变换");
	
	return TRUE;
}

void CWaveletTransformDlg::OnOK()
{
	UpdateData();

	m_WTBasis_Selected = m_WTTransform_List.GetCurSel();
	if(m_WTBasis_Selected == -1)
	{
		MessageBox("请务必选择一组小波基!");
		return;
	}

	CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
// CWaveletReplaceDlg dialog


CWaveletReplaceDlg::CWaveletReplaceDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CWaveletReplaceDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CWaveletReplaceDlg)
	m_strToImage = _T("");
	m_strFromImage = _T("");
	//}}AFX_DATA_INIT
	m_nFromHeight = 0;
	m_nFromWidth = 0;
	m_nToHeight = 0;
	m_nToWidth = 0;
	m_nFromWTBasis = 0;
	m_nFromWTTimes = 0;
	m_nToWTBasis = 0;
	m_nToWTTimes = 0;

	m_bFlag = TRUE;
	m_nSizeIndex = 0;
}

void CWaveletReplaceDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWaveletReplaceDlg)
	DDX_Control(pDX, IDC_MODALSIZE, m_ctrlSize);
	DDX_Text(pDX, IDC_TO_FILE, m_strToImage);
	DDX_Text(pDX, IDC_FROM_FILE, m_strFromImage);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CWaveletReplaceDlg, CDialog)
	//{{AFX_MSG_MAP(CWaveletReplaceDlg)
	ON_BN_CLICKED(IDC_FROM_IMAGE, OnFromImage)
	ON_BN_CLICKED(IDC_TO_IMAGE, OnToImage)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWaveletReplaceDlg message handlers

BOOL CWaveletReplaceDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//设置对话框标题
	if(m_bFlag==TRUE)
		SetWindowText("高频系数整体选择");
	else
		SetWindowText("高频系数局部选择");

	m_ctrlSize.ResetContent();
	m_ctrlSize.AddString("1 * 1");
	m_ctrlSize.AddString("3 * 3");
	m_ctrlSize.AddString("5 * 5");

	if(m_bFlag == TRUE)
		//禁止下拉列表
		GetDlgItem(IDC_MODALSIZE)->EnableWindow(FALSE);
	else
		GetDlgItem(IDC_MODALSIZE)->EnableWindow(TRUE);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CWaveletReplaceDlg::OnFromImage() 
{
	UpdateData(TRUE);
	//打开文件对话框
	CFileDialog dlg(TRUE,"wtf",NULL,
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		"Wavelet Transform Files(*.wtf)|*.wtf||",NULL);
	if(dlg.DoModal()==IDOK)
	{
		m_strFromImage = dlg.GetPathName();
		
		CFile file;
		if(0 != file.Open(m_strFromImage,CFile::modeRead))
		{
			file.Read(&m_nFromWidth,sizeof(int));
			file.Read(&m_nFromHeight,sizeof(int));
			file.Read(&m_nFromWTBasis,sizeof(int));
			file.Read(&m_nFromWTTimes,sizeof(int));
			file.Close();
		}
		else
		{
			AfxMessageBox("打开文件失败!");
			return;
		}
	}
	UpdateData(FALSE);
}

void CWaveletReplaceDlg::OnToImage() 
{
	UpdateData(TRUE);
	CFileDialog dlg(TRUE,"wtf",NULL,
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		"Wavelet Transform Files(*.wtf)|*.wtf||",NULL);	
	if(dlg.DoModal()==IDOK)
	{
		m_strToImage = dlg.GetPathName();

		CFile file;
		if(0 != file.Open(m_strToImage,CFile::modeRead))
		{
			file.Read(&m_nToWidth,sizeof(int));
			file.Read(&m_nToHeight,sizeof(int));
			file.Read(&m_nToWTBasis,sizeof(int));
			file.Read(&m_nToWTTimes,sizeof(int));
			file.Close();
		}
		else
		{
			AfxMessageBox("打开文件失败!");
			return;
		}
	}
	UpdateData(FALSE);
}

void CWaveletReplaceDlg::OnOK() 
{
	UpdateData(TRUE);

	if( m_strFromImage.GetLength() == 0 ||
		m_strToImage.GetLength() == 0 )
	{
		AfxMessageBox("请选择操作所需的文件!");
		return;
	}

	if( m_nFromWTBasis != m_nToWTBasis ||
		m_nToWTTimes != m_nToWTTimes )
	{
		AfxMessageBox("小波变换的基或者变换次数不相同!");
		return;
	}

	m_nSizeIndex = m_ctrlSize.GetCurSel();

	CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
// CThresWeightDlg dialog


CThresWeightDlg::CThresWeightDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CThresWeightDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CThresWeightDlg)
	m_fLowThreshold = 0.5;
	m_strSpatial = _T("");
	m_strSpectral = _T("");
	//}}AFX_DATA_INIT

	m_nEWidth = 0;
	m_nEHeight = 0;
	m_nEBasis = 0;
	m_nETimes = 0;
	
	m_nAWidth = 0;
	m_nAHeight = 0;
	m_nABasis = 0;
	m_nATimes = 0;

	m_nSizeIndex = 0;
}


void CThresWeightDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CThresWeightDlg)
	DDX_Control(pDX, IDC_LIST_SIZE, m_ctrlSize);
	DDX_Text(pDX, IDC_LOW_THRESHOLD, m_fLowThreshold);
	DDV_MinMaxFloat(pDX, m_fLowThreshold, 0.f, 1.f);
	DDX_Text(pDX, IDC_SPATIAL_EDIT, m_strSpatial);
	DDX_Text(pDX, IDC_SPECTRAL_EDIT, m_strSpectral);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CThresWeightDlg, CDialog)
	//{{AFX_MSG_MAP(CThresWeightDlg)
	ON_BN_CLICKED(IDC_SPATIAL_BUTTON, OnSpatialButton)
	ON_BN_CLICKED(IDC_SPECTRAL_BUTTON, OnSpectralButton)
	ON_WM_VSCROLL()
	ON_LBN_SELCHANGE(IDC_LIST_SIZE, OnSelchangeListSize)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CThresWeightDlg message handlers

BOOL CThresWeightDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	CSpinButtonCtrl * pSpin = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
	pSpin->SetRange(0,100);
	pSpin->SetPos((int)(m_fLowThreshold*100.0));

	m_ctrlSize.ResetContent();
	m_ctrlSize.AddString("1 * 1");
	m_ctrlSize.AddString("3 * 3");
	m_ctrlSize.AddString("5 * 5");

	return TRUE;
}

//更新滑动条
void CThresWeightDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	if(pScrollBar->GetDlgCtrlID() == IDC_SPIN1)
	{
		CString strValue;
		strValue.Format("%.2f",float(nPos/100.0));
		m_fLowThreshold = nPos/100.0;
		((CSpinButtonCtrl *)pScrollBar)->GetBuddy()->SetWindowText(strValue);
	}

	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CThresWeightDlg::OnSpatialButton() 
{
	CFileDialog dlg(TRUE,"wtf",NULL,
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		"Wavelet Transform Files(*.wtf)|*.wtf||",NULL);
	if(dlg.DoModal() == IDOK)
	{
		m_strSpatial = dlg.GetPathName();

		CFile file;
		if(0 != file.Open(m_strSpatial,CFile::modeRead))
		{
			file.Read(&m_nAWidth,sizeof(int));
			file.Read(&m_nAHeight,sizeof(int));
			file.Read(&m_nABasis,sizeof(int));
			file.Read(&m_nATimes,sizeof(int));

			file.Close();
		}
		else
		{
			AfxMessageBox("打开文件失败!");
			return;
		}
	}
	UpdateData(FALSE);
}

void CThresWeightDlg::OnSpectralButton() 
{
	CFileDialog dlg(TRUE,"wtf",NULL,
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		"Wavelet Transform Files(*.wtf)|*.wtf||",NULL);
	if(dlg.DoModal() == IDOK)
	{
		m_strSpectral = dlg.GetPathName();

		CFile file;
		if(0 != file.Open(m_strSpectral,CFile::modeRead))
		{
			file.Read(&m_nEWidth,sizeof(int));
			file.Read(&m_nEHeight,sizeof(int));
			file.Read(&m_nEBasis,sizeof(int));
			file.Read(&m_nETimes,sizeof(int));

			file.Close();
		}
		else
		{
			AfxMessageBox("打开文件失败!");
			return;
		}
	}
	UpdateData(FALSE);
}

void CThresWeightDlg::OnOK() 
{
	UpdateData(TRUE);
	
	if( m_strSpectral.GetLength()==0 || 
		m_strSpatial.GetLength()==0 )
	{
		AfxMessageBox("请选择文件!");
		return;
	}

	if( m_nEWidth != m_nAWidth || 
		m_nEHeight != m_nAHeight || 
		m_nEBasis != m_nABasis || 
		m_nETimes != m_nATimes )
	{
		AfxMessageBox("图像尺寸或小波基或变换次数不同!");
		return;
	}

	m_nSizeIndex = m_ctrlSize.GetCurSel();

	CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
// CExponentDlg dialog


CExponentDlg::CExponentDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CExponentDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CExponentDlg)
	m_fExponent = 0.125f;
	//}}AFX_DATA_INIT
}


void CExponentDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CExponentDlg)
	DDX_Text(pDX, IDC_EXPONENT_EDIT, m_fExponent);
	DDV_MinMaxFloat(pDX, m_fExponent, 0.1f, 0.2f);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CExponentDlg, CDialog)
	//{{AFX_MSG_MAP(CExponentDlg)
	ON_WM_VSCROLL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CExponentDlg message handlers

BOOL CExponentDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	CSpinButtonCtrl * pSpin = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
	pSpin->SetRange(100,200);
	pSpin->SetPos((int)(m_fExponent*1000.0));
	
	return TRUE;
}

void CExponentDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	if(pScrollBar->GetDlgCtrlID() == IDC_SPIN1)
	{
		CString strValue;
		strValue.Format("%.3f",float(nPos/1000.0));
		((CSpinButtonCtrl *)pScrollBar)->GetBuddy()
			->SetWindowText(strValue);
	}

	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CThresWeightDlg::OnSelchangeListSize() 
{
	// TODO: Add your control notification handler code here
}

⌨️ 快捷键说明

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