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

📄 rsipview.cpp

📁 基于小波的SAR斑点处理
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// RSIPView.cpp : implementation of the CRSIPView class
//

#include "stdafx.h"
#include "RSIP.h"
#include "MainFrm.h"

#include "RSIPDoc.h"
#include "RSIPView.h"
#include "RotateDlg.h"
#include "Progress.h"
#include "lib\\Comput.h"
#include "ImgFunction.h"
#include "CalcultateImgDlg.h"
#include "GeneralPage.h"
#include "HistogramDlg.h"
#include "ClassInfoDlg.h"	
#include "ClassifyInfoDlg.h"
#include "ThresholdDlg.h"
#include "FilterDlg.h"
#include "UserDefFilterDlg.h"
#include "SelfClusterDlg.h"
#include "EqualMixedDistDlg.h"
#include "ClassifyInfoDlg.h"
#include "FreeStrechDlg.h"
#include "KLTransformDlg.h"
#include "GeoCorPage.h"
#include "RadiationCorrectDlg.h"
#include "KeyCutImg.h"
#include "WaveletTransformDlg.h"
#include "WaveletTransform.h"
#include "CustHistogramDlg.h"
#include "MADDialog.h"
#include "Statistic.h"
#include "math.h"
#include "removeLayerDlg.h"
#include "waveEditDlg.h"
#include "filterfuseDlg.h"
#include "GeneralPage.h"
#include "openWaveletFileDlg.h"
#include "stdlib.h"
#include "comput.h"
#include "textSpanDlg.h"

#include "RSIPTic.h"

#define DEFSAMRATE	4

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

/////////////////////////////////////////////////////////////////////////////
// CRSIPView

IMPLEMENT_DYNCREATE(CRSIPView, CScrollView)

BEGIN_MESSAGE_MAP(CRSIPView, CScrollView)
	//{{AFX_MSG_MAP(CRSIPView)
	ON_COMMAND(ID_IMAGE_CIRCLE, OnImageCircle)
	ON_COMMAND(ID_IMAGE_CLASSIFYINFO, OnImageClassifyinfo)
	ON_COMMAND(ID_IMAGE_COMBINE, OnImageCombine)
	ON_COMMAND(ID_IMAGE_HISTOGRAM, OnImageHistogram)
	ON_COMMAND(ID_IMAGE_INFOMATION, OnImageInfomation)
	ON_COMMAND(ID_IMAGE_RESAMPLE, OnImageResample)
	ON_COMMAND(ID_IMAGE_HFLIP, OnImageHflip)
	ON_COMMAND(ID_IMAGE_VFLIP, OnImageVflip)
	ON_COMMAND(ID_IMAGE_IHSDECOMPOSE, OnImageIhsdecompose)
	ON_COMMAND(ID_IMAGE_RGBDECOMPOSE, OnImageRgbdecompose)
	ON_COMMAND(ID_IMAGE_CALCULATE, OnImageCalculate)
	ON_COMMAND(ID_IMAGE_POWERINFO, OnImagePowerinfo)
	ON_COMMAND(ID_IMAGE_REVERT, OnImageRevert)
	ON_COMMAND(ID_IMAGE_EQUUALIZE, OnImageEquualize)
	ON_COMMAND(ID_IMAGE_THRESHOLD, OnImageThreshold)
	ON_COMMAND(ID_IMAGE_POSTERIZE, OnImagePosterize)
	ON_COMMAND(ID_FILTER_FILTER, OnFilterFilter)
	ON_COMMAND(ID_FILTER_POWER, OnFilterPower)
	ON_COMMAND(ID_FILTER_EDEGE, OnFilterEdege)
	ON_COMMAND(ID_FILTER_SHARPEN, OnFilterSharpen)
	ON_COMMAND(ID_FILTER_AUTO, OnFilterAuto)
	ON_COMMAND(ID_CLASS_CHARACTER, OnClassCharacter)
	ON_COMMAND(ID_CLASS_FISHERRULE, OnClassFisherrule)
	ON_COMMAND(ID_CLASS_ISODISTANCE, OnClassIsodistance)
	ON_COMMAND(ID_CLASS_MAXLIKENESS, OnClassMaxlikeness)
	ON_COMMAND(ID_CLASS_MINIDISTANCE, OnClassMinidistance)
	ON_COMMAND(ID_CLASS_PRACTICEREGION, OnClassPracticeregion)
	ON_COMMAND(ID_CLASS_END_PRACTICEREGION, OnClassEndPracticeRegion)
	ON_COMMAND(ID_CLASS_SELFORGANIZE, OnClassSelforganize)
	ON_COMMAND(ID_CLASS_STEPCLUSTER, OnClassStepcluster)
	ON_WM_KEYDOWN()
	ON_COMMAND(ID_VIEW_PAN, OnViewPan)
	ON_COMMAND(ID_VIEW_WHOLEIMAGE, OnViewWholeimage)
	ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomin)
	ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomout)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_COMMAND(ID_VIEW_FITWINDOW, OnViewFitwindow)
	ON_COMMAND(ID_PRE_HISTOTRANS, OnPreHistotrans)
	ON_COMMAND(ID_PRE_KAIRWENTRANS, OnPreKairwentrans)
	ON_COMMAND(IDC_PRE_PICKGCP, OnPrePickgcp)
	ON_COMMAND(IDC_END_PICKGCP, OnEndPickgcp)
	ON_COMMAND(IDC_PRE_GEOCORRECT, OnPreGeocorrect)
	ON_COMMAND(ID_PRE_RADIATION, OnPreRadiation)
	ON_COMMAND(ID_SPLIT_MOUSE, OnSplitMouse)
	ON_COMMAND(IDC_DRAWGCP,OnDrawGcp)
	ON_COMMAND(IDC_REFRESH,OnRefresh)
	ON_COMMAND(IDC_NORMAL,OnNormal)
	ON_WM_SETCURSOR()
	ON_UPDATE_COMMAND_UI(IDC_NORMAL, OnUpdateNormal)
	ON_UPDATE_COMMAND_UI(ID_VIEW_ZOOMIN, OnUpdateViewZoomin)
	ON_UPDATE_COMMAND_UI(ID_VIEW_ZOOMOUT, OnUpdateViewZoomout)
	ON_UPDATE_COMMAND_UI(ID_VIEW_PAN, OnUpdateViewPan)
	ON_UPDATE_COMMAND_UI(ID_SPLIT_MOUSE, OnUpdateSplitMouse)
	ON_UPDATE_COMMAND_UI(IDC_PRE_PICKGCP, OnUpdatePrePickgcp)
	ON_UPDATE_COMMAND_UI(ID_CLASS_PRACTICEREGION, OnUpdateClassPracticeregion)
	ON_COMMAND(IDC_PRE_REGISTER, OnPreRegister)
	ON_COMMAND(ID_PRE_KEYCUTIMG, OnPreKeycutimg)
	ON_COMMAND(ID_WAVELET_TRANSFORM, OnWaveletTransform)
	ON_COMMAND(ID_REVERSE_WAVELET, OnReverseWavelet)
	ON_COMMAND(ID_CUSTOMIZE_HISTOGRAM, OnCustomizeHistogram)
	ON_COMMAND(ID_STATIS_RELATION, OnStatisRelation)
	ON_COMMAND(ID_PRE_LOCALCOPY, OnPreLocalcopy)
	ON_COMMAND(ID_TRANS_LOCALPASTE, OnTransLocalpaste)
	ON_COMMAND(ID_STATIS_ENTROPY, OnStatisEntropy)
	ON_COMMAND(ID_STATIS_DISTORT, OnStatisDistort)
	ON_COMMAND(ID_STATIS_AVERAGEGRAD, OnStatisAveragegrad)
	ON_COMMAND(ID_STATIS_ENERGY, OnStatisEnergy)
	ON_COMMAND(ID_STATIS_CORREL, OnStatisCorrel)
	ON_COMMAND(ID_TRANS_LC, OnTransLinghtContrast)
	ON_COMMAND(ID_TRANS_EVCUSTOM, OnTransEvcustom)
	ON_COMMAND(ID_TRANS_WEIGHT, OnTransWeight)
	ON_COMMAND(ID_PRE_EDGEDETCT, OnPreEdgedetct)
	ON_COMMAND(ID_TRANS_COFSELECT, OnTransCoefselect)
	ON_COMMAND(ID_TRANS_ADDCOEFF, OnTransAddcoeff)
	ON_COMMAND(ID_PRE_INVKLTRANSFORM, OnPreInvkltransform)
	ON_COMMAND(ID_STATIS_FILTER, OnStatisFilter)
	ON_COMMAND(ID_PRE_MADTRANSFORM, OnPreMadtransform)
	ON_COMMAND(ID_TRANS_HIGH, OnTransRemoveLayer)
	ON_COMMAND(ID_TRANS_RETAIN, OnTransRetainLayer)
	ON_COMMAND(ID_TRANS_EDIT, OnTransEditWaveLayer)
	ON_COMMAND(ID_SELECT_TEXTURE, OnSelectTexture)
	ON_COMMAND(ID_FILTER_FUSE, OnFilterFuse)
	ON_COMMAND(ID_SELECT_TEXTURE_FIVE, OnSelectTextureFive)
	ON_COMMAND(ID_WAVELET_SOFT_THESHOLD, OnWaveletSoftTheshold)
	ON_COMMAND(ID_WAVELET_SN_DIVIDE, OnWaveletSNDivide)
	ON_COMMAND(ID_WAVELET_NOISE_THRESHOLD, OnWaveletNoiseThreshold)
	ON_COMMAND(ID_TEST, OnTest)
	ON_COMMAND(ID_READ_TEXT, OnReadText)
	ON_COMMAND(ID_WRITE_TEXT, OnWriteText)
	ON_COMMAND(ID_SELECT_TEXTURE_DIV, OnSelectTextureDiv)
	ON_COMMAND(ID_SELECT_TEXTURE_REGION, OnSelectTextureRegion)
	ON_COMMAND(ID_GET_NOISE, OnGetNoise)
	ON_COMMAND(ID_GET_NOISE_TEXTURE, OnGetNoiseTexture)
	ON_COMMAND(ID_SELECT_TEXTURE_SOFT, OnSelectTextureSoft)
	ON_COMMAND(ID_SELECT_TEXTURE_SOFT_RIPE, OnSelectTextureSoft2)
	ON_COMMAND(ID_SELECT_TEXTURE_CUSTOM, OnSelectTextureCustom)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRSIPView construction/destruction

CRSIPView::CRSIPView()
{
	m_nMouseAction = MOUSE_NOTHING;
	m_pClassInfoDlg = NULL;
	m_pPickGCPDlg = NULL;
	m_bTrace = FALSE;
	m_nStartPoint = CPoint(0,0);
	m_nEndPoint = CPoint(0,0);

	m_aPointArray.RemoveAll();
}

CRSIPView::~CRSIPView()
{
	CPoint * pPnt = NULL;
	for(int i=0; i<m_aPointArray.GetSize(); i++)
	{
		pPnt = (CPoint *)m_aPointArray.GetAt(i);
		ASSERT(pPnt != NULL);
		delete pPnt;
	}
	m_aPointArray.RemoveAll();

	if(m_pClassInfoDlg != NULL)
	{
		m_pClassInfoDlg->DestroyWindow();
		delete m_pClassInfoDlg;
	}

	if(m_pPickGCPDlg != NULL)
	{
		m_pPickGCPDlg->DestroyWindow();
		delete m_pPickGCPDlg;
	}
}

BOOL CRSIPView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CRSIPView drawing

void CRSIPView::OnDraw(CDC* pDC)
{
	CRSIPDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	if(NULL!=pDoc->m_pRSImage && 
		NULL!=pDoc->m_pRSImage->m_pImgData)
	{
		pDoc->m_pRSImage->Draw(pDC,0,0,pDoc->m_dZoomedRatio);

		OnDrawGcp();

		OnDrawPracticeRegion();
	}
}

/////////////////////////////////////////////////////////////////////////////
// CRSIPView printing

BOOL CRSIPView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CRSIPView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CRSIPView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CRSIPView diagnostics

#ifdef _DEBUG
void CRSIPView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CRSIPView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CRSIPDoc* CRSIPView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRSIPDoc)));
	return (CRSIPDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CRSIPView message handlers

void CRSIPView::OnInitialUpdate() 
{
	CScrollView::OnInitialUpdate();
	
	CSize totalSize(640,480);
	SetScrollSizes(MM_TEXT,totalSize);
}


void CRSIPView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	switch(nChar)
	{
	case VK_UP:
		OnVScroll(SB_LINEUP,0,NULL);
		break;
	case VK_DOWN:
		OnVScroll(SB_LINEDOWN,0,NULL);
		break;
	case VK_LEFT:
		OnHScroll(SB_LINELEFT,0,NULL);
		break;
	case VK_RIGHT:
		OnHScroll(SB_LINERIGHT,0,NULL);
		break;
	case VK_HOME:
		OnVScroll(SB_TOP,0,NULL);
		OnHScroll(SB_LEFT,0,NULL);
		break;
	case VK_END:
		OnVScroll(SB_BOTTOM,0,NULL);
		OnHScroll(SB_RIGHT,0,NULL);
		break;
	case VK_PRIOR:
		OnVScroll(SB_PAGEUP,0,NULL);
		break;
	case VK_NEXT:
		OnVScroll(SB_PAGEDOWN,0,NULL);
		break;
	default:
		CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
	}	
}

void CRSIPView::OnImageCircle() 
{
	CRSIPDoc * pDoc = GetDocument();
	ASSERT(pDoc != NULL);

	if(pDoc->m_pRSImage!=NULL && 
		pDoc->m_pRSImage->m_pImgData!=NULL)
	{
		CRotateDlg rotateDlg;
		if(rotateDlg.DoModal() == IDOK)
		{
			bool flag;
			if(rotateDlg.m_nDirection == 0)
				flag = FALSE;		//顺时针
			else
				flag = TRUE;		//逆时针
			float degree = rotateDlg.m_fDegree;

			pDoc->m_pRSImage->Rotate(degree,flag);
			pDoc->UpdateAllViews(NULL);
			pDoc->m_bModifiedFlag = TRUE;
			pDoc->m_bHistogramModified = TRUE;
		}
	}
}

void CRSIPView::OnImageClassifyinfo() 
{
	CRSIPDoc * pDoc = (CRSIPDoc *)GetDocument();
	ASSERT(pDoc != NULL);

	if(pDoc->m_pRSImage!=NULL &&  
		pDoc->m_pRSImage->m_pImgData!=NULL)
	{
		// 将类别信息结构指针移到对话框的数组中去
		int classNum = pDoc->m_pRSImage->m_nClassNumber;
		CRsThematicInfo * pInfo = NULL;
		CClassifyInfoDlg classifyInfoDlg(this);
		for(int i=0; i<classNum; i++)
		{
			pInfo = pDoc->m_pRSImage->m_aThemeInfoArray.GetAt(i);
			ASSERT(pInfo != NULL);
			classifyInfoDlg.m_aClassifyInfoArray.Add(pInfo);
			pInfo = NULL;
		}

		// 修改类别信息的数目
		if(classifyInfoDlg.DoModal()==IDOK)
		{
			pDoc->m_pRSImage->m_nClassNumber = 
				classifyInfoDlg.m_aClassifyInfoArray.GetSize();
		}
	}
}

void CRSIPView::OnImageCombine() 
{
	CRSIPDoc * pDoc=(CRSIPDoc *)GetDocument();
	ASSERT(pDoc!=NULL);

	CImgCombineDlg combineDlg;
	if(combineDlg.DoModal()==IDOK)
	{
		int height=combineDlg.m_nImgHeight;
		int width=combineDlg.m_nImgWidth;
		int combineMethod = combineDlg.m_nMethod;
		
		CString pathname[3];
		pathname[0]=combineDlg.m_szRedBand;	  //红
		pathname[1]=combineDlg.m_szGreenBand; //绿
		pathname[2]=combineDlg.m_szBlueBand;  //蓝
		DWORD dwSize = height*width;

		LPBYTE ppData[3] = {NULL,NULL,NULL};
		ppData[0] = (LPBYTE)new BYTE[dwSize]; //红
		ppData[1] = (LPBYTE)new BYTE[dwSize]; //绿
		ppData[2] = (LPBYTE)new BYTE[dwSize]; //蓝
		if(ppData[0]==NULL || ppData[1]==NULL || ppData[2]==NULL)
		{
			AfxMessageBox("内存不足,无法完成操作!");
			
			for(int l=0; l<3; l++)
			{
				if(ppData[l]!=NULL)
				{
					delete ppData[l];
					ppData[l] = NULL;
				}
			}
			
			return;
		}

		CFile file[3];
		for(int i=0; i<3; i++)
		{
			if(0!=file[i].Open(pathname[i],CFile::modeRead))
			{
				file[i].ReadHuge(ppData[i],dwSize);
				file[i].Close();
			}
			else
			{
				AfxMessageBox("无法打开文件!");
				return;
			}
		}

		DWORD	bmpCol = (3*width+3)/4*4;
		BYTE * pData=(LPBYTE)new BYTE[bmpCol*height];
		if(pData == NULL)
		{
			AfxMessageBox("内存不足,无法完成操作!");
			
			for(int l=0; l<3; l++)
			{
				if(ppData[l]!=NULL)
				{
					delete ppData[l];
					ppData[l] = NULL;
				}
			}
			
			return;
		}
		else
		{
			for(DWORD a=0; a<bmpCol*height; a++)
				pData[a] = 0;
		}

		if(combineMethod == 0)
			for(i=0; i<height; i++)
			{
				for(int j=0; j<width; j++)
				{
					pData[i*bmpCol+3*j]   = ppData[0][(height-i-1)*width+j];
					pData[i*bmpCol+3*j+1] = ppData[1][(height-i-1)*width+j];
					pData[i*bmpCol+3*j+2] = ppData[2][(height-i-1)*width+j];
				}
			}
		else if(combineMethod == 1)
			for(i=0; i<height; i++)
			{
				for(int j=0; j<width; j++)
				{
					BYTE rgb[3];
					::GetRGB(rgb,ppData[0][(height-i-1)*width+j],
						ppData[1][(height-i-1)*width+j],ppData[2][(height-i-1)*width+j]);
					pData[i*bmpCol+3*j] = rgb[2];
					pData[i*bmpCol+3*j+1] = rgb[1];
					pData[i*bmpCol+3*j+2] = rgb[0];

⌨️ 快捷键说明

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