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

📄 userdeffilterdlg.cpp

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

#include "stdafx.h"
#include "RSIP.h"
#include "UserDefFilterDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CUserDefFilterDlg dialog


CUserDefFilterDlg::CUserDefFilterDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CUserDefFilterDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUserDefFilterDlg)
	m_nBias = 0;
	m_nFactor = 1;
	m_bRevert = FALSE;
	m_nSymmetry = 0;
	//}}AFX_DATA_INIT
}


void CUserDefFilterDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUserDefFilterDlg)
	DDX_Text(pDX, IDC_BIAS, m_nBias);
	DDX_Text(pDX, IDC_FACTOR, m_nFactor);
	DDX_Check(pDX, IDC_REVERT, m_bRevert);
	DDX_Radio(pDX, IDC_NONE_RADIO, m_nSymmetry);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUserDefFilterDlg, CDialog)
	//{{AFX_MSG_MAP(CUserDefFilterDlg)
	ON_EN_CHANGE(IDC_UNIT1, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT2, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT3, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT4, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT5, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT6, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT7, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT8, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT9, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT10, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT11, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT12, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT13, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT14, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT15, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT16, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT17, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT18, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT19, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT20, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT21, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT22, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT23, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT24, OnChangeUnitValue)
	ON_EN_CHANGE(IDC_UNIT25, OnChangeUnitValue)
	ON_BN_CLICKED(IDC_TEMPLATE, OnTemplate)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUserDefFilterDlg message handlers

BOOL CUserDefFilterDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	CheckRadioButton(IDC_NONE_RADIO,IDC_BOTH_RADIO,IDC_BOTH_RADIO);
	m_bIsChged = TRUE;
	for(int i=0; i<25; i++)
	{
		SetDlgItemInt(IDC_UNIT1+i,0);
	}
	SetDlgItemInt(IDC_UNIT13,1);
	m_bIsChged = FALSE;
	
	return TRUE;
}

void CUserDefFilterDlg::OnOK() 
{
	for(int i=0; i<25; i++)
		m_nUnitValue[i] = GetDlgItemInt(IDC_UNIT1+i);
	m_nFactor = GetDlgItemInt(IDC_FACTOR);
	if(m_nFactor==0)
	{
		MessageBox("因子的值不可为零!");
		return;
	}

	CDialog::OnOK();
}

void CUserDefFilterDlg::OnChangeUnitValue() 
{
	UpdateData();
	//int nSymType = GetCheckedRadioButton(IDC_RADIO4,IDC_RADIO7)-IDC_RADIO4;
	if(m_nSymmetry<=0)
		return;
	if(m_bIsChged)
		return;
	m_bIsChged = TRUE;
	int ThisCol;
	int ThisRow;
	int ID = ::GetDlgCtrlID(::GetFocus());
	ThisCol = (ID-IDC_UNIT1)%5;
	ThisRow = (ID-IDC_UNIT1)/5;
	if(m_nSymmetry == 1)//Hor
	{
		int Number = GetDlgItemInt(ID);
		int ChgCol = -(ThisCol-2)+2;
		if(ChgCol != ThisCol)
			SetDlgItemInt(ThisRow*5+ChgCol+IDC_UNIT1,Number);
	}
	else if(m_nSymmetry == 2)//Vert
	{
		int Number = GetDlgItemInt(ID);
		int ChgRow = -(ThisRow-2)+2;
		if(ChgRow != ThisRow)
			SetDlgItemInt(ChgRow*5+ThisCol+IDC_UNIT1,Number);
	}
	else if(m_nSymmetry == 3)//4 Dir
	{
		int Number = GetDlgItemInt(ID);
		int ChgRow = -(ThisRow-2)+2;
		if(ChgRow!=ThisRow)
			SetDlgItemInt(ChgRow*5+ThisCol+IDC_UNIT1,Number);

		int ChgCol = -(ThisCol-2)+2;
		if(ChgCol!=ThisCol)
			SetDlgItemInt(ThisRow*5+ChgCol+IDC_UNIT1,Number);

		if(ChgCol!=ThisCol&&ChgRow!=ThisRow)
			SetDlgItemInt(ChgRow*5+ChgCol+IDC_UNIT1,Number);
	}
	m_bIsChged = FALSE;
}

void CUserDefFilterDlg::OnTemplate() 
{
	CSelTemplateDlg SelTempDlg(this);
	if(SelTempDlg.DoModal() == IDOK)
	{
		for(int i=0; i<25; i++)
			m_nUnitValue[i] = 0;
		m_nBias = 0;
		m_nFactor = 1;

		switch(SelTempDlg.m_nSelectedTemp+1)
		{
		case 1:
			for(i=0; i<25; i++)
				m_nUnitValue[i] = -1;
			m_nUnitValue[12] = 24;
			break;
		case 2:
			for(i=0; i<25; i++)
				m_nUnitValue[i] = 1;
			m_nBias = 0;
			m_nFactor = 25;
			break;
		case 3:
			for(i=0; i<5; i++)
			{
				m_nUnitValue[i] = -1;
				m_nUnitValue[10+i] = 2;
				m_nUnitValue[20+i] = -1;
			}
			break;
		case 4:
			m_nUnitValue[1]=-1;
			m_nUnitValue[2]=-1;
			m_nUnitValue[5]=-1;
			m_nUnitValue[6]=-1;
			m_nUnitValue[10]=-1;
			m_nUnitValue[14]=-1;
			m_nUnitValue[18]=-1;
			m_nUnitValue[19]=-1;
			m_nUnitValue[22]=-1;
			m_nUnitValue[23]=-1;
			m_nUnitValue[4] = 2;
			m_nUnitValue[8] = 2;
			m_nUnitValue[12] = 2;
			m_nUnitValue[16] = 2;
			m_nUnitValue[20] = 2;
			break;
		case 5:
			for(i=0; i<5; i++)
			{
				m_nUnitValue[i*5] = -1;
				m_nUnitValue[i*5+2] = 2;
				m_nUnitValue[i*5+4] = -1;
			}
			break;
		case 6:
			for(i=0; i<5; i++)
				m_nUnitValue[i*6] = 2;
			m_nUnitValue[2] = -1;
			m_nUnitValue[3] = -1;
			m_nUnitValue[8] = -1;
			m_nUnitValue[9] = -1;
			m_nUnitValue[10] = -1;
			m_nUnitValue[14] = -1;
			m_nUnitValue[15] = -1;
			m_nUnitValue[16] = -1;
			m_nUnitValue[21] = -1;
			m_nUnitValue[22] = -1;
			break;
		case 7:
			m_nUnitValue[7] = -1;
			m_nUnitValue[11] = -1;
			m_nUnitValue[12] = 4;
			m_nUnitValue[13] = -1;
			m_nUnitValue[17] = -1;
			break;
		case 8:
			m_nUnitValue[6] = -1;
			m_nUnitValue[7] = -1;
			m_nUnitValue[8] = -1;
			m_nUnitValue[11] = -1;
			m_nUnitValue[12] = 8;
			m_nUnitValue[13] = -1;
			m_nUnitValue[16] = -1;
			m_nUnitValue[17] = -1;
			m_nUnitValue[18] = -1;
			break;
		case 9:
			m_nUnitValue[6] = 1;
			m_nUnitValue[7] = 1;
			m_nUnitValue[8] = 1;
			m_nUnitValue[11] = 1;
			m_nUnitValue[12] = -2;
			m_nUnitValue[13] = 1;
			m_nUnitValue[16] = -1;
			m_nUnitValue[17] = -1;
			m_nUnitValue[18] = -1;
			break;
		case 10:
			m_nUnitValue[6] = 1;
			m_nUnitValue[7] = 1;
			m_nUnitValue[8] = 1;
			m_nUnitValue[11] = -1;
			m_nUnitValue[12] = -2;
			m_nUnitValue[13] = 1;
			m_nUnitValue[16] = -1;
			m_nUnitValue[17] = -1;
			m_nUnitValue[18] = 1;
			break;
		case 11:
			m_nUnitValue[6] = -1;
			m_nUnitValue[7] = 1;
			m_nUnitValue[8] = 1;
			m_nUnitValue[11] = -1;
			m_nUnitValue[12] = -2;
			m_nUnitValue[13] = 1;
			m_nUnitValue[16] = -1;
			m_nUnitValue[17] = 1;
			m_nUnitValue[18] = 1;
			break;
		case 12:
			m_nUnitValue[6] = -1;
			m_nUnitValue[7] = -1;
			m_nUnitValue[8] = 1;
			m_nUnitValue[11] = -1;
			m_nUnitValue[12] = -2;
			m_nUnitValue[13] = 1;
			m_nUnitValue[16] = 1;
			m_nUnitValue[17] = 1;
			m_nUnitValue[18] = 1;
			break;
		case 13:
			m_nUnitValue[6] = -1;
			m_nUnitValue[7] = -1;
			m_nUnitValue[8] = -1;
			m_nUnitValue[11] = 1;
			m_nUnitValue[12] = -2;
			m_nUnitValue[13] = 1;
			m_nUnitValue[16] = 1;
			m_nUnitValue[17] = 1;
			m_nUnitValue[18] = 1;
			break;
		case 14:
			m_nUnitValue[6] = 1;
			m_nUnitValue[7] = -1;
			m_nUnitValue[8] = -1;
			m_nUnitValue[11] = 1;
			m_nUnitValue[12] = -2;
			m_nUnitValue[13] = -1;
			m_nUnitValue[16] = 1;
			m_nUnitValue[17] = 1;
			m_nUnitValue[18] = 1;
			break;
		case 15:
			m_nUnitValue[6] = 1;
			m_nUnitValue[7] = 1;
			m_nUnitValue[8] = -1;
			m_nUnitValue[11] = 1;
			m_nUnitValue[12] = -2;
			m_nUnitValue[13] = -1;
			m_nUnitValue[16] = 1;
			m_nUnitValue[17] = 1;
			m_nUnitValue[18] = -1;
			break;
		case 16:
			m_nUnitValue[6] = 1;
			m_nUnitValue[7] = 1;
			m_nUnitValue[8] = 1;
			m_nUnitValue[11] = 1;
			m_nUnitValue[12] = -2;
			m_nUnitValue[13] = -1;
			m_nUnitValue[16] = 1;
			m_nUnitValue[17] = -1;
			m_nUnitValue[18] = -1;
			break;
		}
		m_bIsChged = TRUE;
		for(i=0; i<25; i++)
			SetDlgItemInt(i+IDC_UNIT1,m_nUnitValue[i]);
		m_bIsChged = FALSE;
		SetDlgItemInt(IDC_FACTOR,m_nFactor);
		SetDlgItemInt(IDC_BIAS,m_nBias);
	}
}


/////////////////////////////////////////////////////////////////////////////
// CSelTemplateDlg dialog


CSelTemplateDlg::CSelTemplateDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSelTemplateDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSelTemplateDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CSelTemplateDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSelTemplateDlg)
	DDX_Control(pDX, IDC_TEMPLATE_LIST, m_TemplateList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSelTemplateDlg, CDialog)
	//{{AFX_MSG_MAP(CSelTemplateDlg)
	ON_LBN_DBLCLK(IDC_TEMPLATE_LIST, OnDblclkTemplateList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSelTemplateDlg message handlers

BOOL CSelTemplateDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	CString szTempName;
	for(int i=IDS_STRING1; i<=IDS_STRING16; i++)
	{
		szTempName.LoadString(i);
		m_TemplateList.AddString(szTempName);
	}
	m_TemplateList.SetCurSel(0);
	
	return TRUE;
}

void CSelTemplateDlg::OnDblclkTemplateList() 
{
	OnOK();	
}

void CSelTemplateDlg::OnOK() 
{
	m_nSelectedTemp = m_TemplateList.GetCurSel();
	if(m_nSelectedTemp < 0)
		return;
	
	CDialog::OnOK();
}

⌨️ 快捷键说明

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