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

📄 dipdoc.cpp

📁 用C++实现的数字图像处理各个算法源代码 我精心整理的 很难的啊 希望可以给大家带来帮助
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}

void CDipDoc::OnGeomRota() 
{
	//旋转角度
	int nRotateAngle;
	int nIntorType;
	BOOL bIntorType;
	
	//创建对话框
	CDlgGeoRota dlgPara;
	
	//初始化变量值
	dlgPara.m_iRotateAngle = 90;
	dlgPara.m_nIntorType = 0;
	
	//显示对话框,提示用户设定旋转角度
	if(dlgPara.DoModal() != IDOK)
	{
		//返回
		return;
	}
	
	//获取用户设定的角度
	nRotateAngle = dlgPara.m_iRotateAngle;
	nIntorType = dlgPara.m_nIntorType;
	
	//删除对话框
	delete dlgPara;	

	if(nIntorType == 0)
	{
		bIntorType = FALSE;
	}
	else
	{
		bIntorType = TRUE;
	}

	//创建点处理CImageGeoTrans类对象
	CGeoTrans GeoTrans( m_pDibObject );

	// 更改光标形状
	BeginWaitCursor();

	//调用Mirror()函数进行垂直镜像
	GeoTrans.Rotate(nRotateAngle, bIntorType);

	// 设置脏标记
	//	SetModifiedFlag(TRUE);
	
	// 更新视图
	UpdateAllViews(NULL);
	
	// 恢复光标
	EndWaitCursor();
}

void CDipDoc::OnGeomTran() 
{
	// 创建对话框
	CDlgGeoTran dlgPara;
	
	// 初始化变量值
	dlgPara.m_XOffset = 0;
	dlgPara.m_YOffset = 0;
	dlgPara.m_nTransType = 0;
	
	// 显示对话框,提示用户设定平移量
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户设定的平移量
	LONG lXOffset = dlgPara.m_XOffset;
	LONG lYOffset = dlgPara.m_YOffset;
	int nTransType = dlgPara.m_nTransType;
	// 删除对话框
	delete dlgPara;	
	
	//创建点处理CImageGeoTrans类对象
	CGeoTrans GeoTrans( m_pDibObject );

	// 更改光标形状
	BeginWaitCursor();

	if(nTransType == 0)
	{
		// 调用TranslationPixel()函数进行平移
		GeoTrans.TranslationPixel(lXOffset, lYOffset);
	}
	else if(nTransType == 1)
	{
		// 调用TranslationLine()函数进行平移
		GeoTrans.TranslationLine(lXOffset, lYOffset);
	}

	// 设置脏标记
	//	SetModifiedFlag(TRUE);

	// 更新视图
	UpdateAllViews(NULL);
	
	// 恢复光标
	EndWaitCursor();
}

void CDipDoc::OnGeomTrpo() 
{
	//创建点处理CImageGeoTrans类对象
	CGeoTrans GeoTrans( m_pDibObject );

	// 更改光标形状
	BeginWaitCursor();

	//调用Mirror()函数进行垂直镜像
	GeoTrans.Transpose();

	// 设置脏标记
	//	SetModifiedFlag(TRUE);

	// 更新视图
	UpdateAllViews(NULL);
	
	// 恢复光标
	EndWaitCursor();
}

void CDipDoc::OnGeomZoom() 
{
// 缩放比率
	float fXZoomRatio;
	float fYZoomRatio;
	int nIntorType;
	BOOL bIntorType;
	
	// 创建对话框
	CDlgGeoZoom dlgPara;
	
	// 初始化变量值
	dlgPara.m_XZoom = 4.0;
	dlgPara.m_YZoom = 4.0;
	dlgPara.m_nIntorType = 0;
	
	// 显示对话框,提示用户设定平移量
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户设定的平移量
	fXZoomRatio = dlgPara.m_XZoom;
	fYZoomRatio = dlgPara.m_YZoom;
	nIntorType = dlgPara.m_nIntorType;
	
	// 删除对话框
	delete dlgPara;	
	
	if(nIntorType == 0)
	{
		bIntorType = FALSE;
	}
	else
	{
		bIntorType = TRUE;
	}
	
	//创建点处理CImageGeoTrans类对象
	CGeoTrans GeoTrans( m_pDibObject );

	// 更改光标形状
	BeginWaitCursor();
	
	//调用Mirror()函数进行垂直镜像
	GeoTrans.ZoomImage(fXZoomRatio, fYZoomRatio, bIntorType);
	
	// 设置脏标记
	//	SetModifiedFlag(TRUE);
	
	// 更新视图
	UpdateAllViews(NULL);
	
	// 恢复光标
	EndWaitCursor();
}

//以下六个命令更新消息映射,保证图像几何变换只对8位以上的图像进行操作。
void CDipDoc::OnUpdateGeomMirh(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() >= 8);
}

void CDipDoc::OnUpdateGeomMirv(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() >= 8);
}

void CDipDoc::OnUpdateGeomRota(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() >= 8);
}

void CDipDoc::OnUpdateGeomTran(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() >= 8);
}

void CDipDoc::OnUpdateGeomTrpo(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() >= 8);
}

void CDipDoc::OnUpdateGeomZoom(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() >= 8);
}

void CDipDoc::OnFreqDct() 
{
	//创建点处理CImagePro类对象
	CFreqPro FreqPro( m_pDibObject );
	// 更改光标形状
	BeginWaitCursor();

	m_matTransed = FreqPro.DCT2() ;

	if(!isempty(m_matTransed)) m_bDct = TRUE;
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);
}

void CDipDoc::OnFreqNdct() 
{
	//创建点处理CImagePro类对象
	CFreqPro FreqPro( m_pDibObject );
	// 更改光标形状
	BeginWaitCursor();

	if(FreqPro.NDCT2(m_matTransed)) m_bDct = FALSE;
	
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);
}

void CDipDoc::OnFreqFft() 
{
	//创建点处理CImagePro类对象
	CFreqPro FreqPro( m_pDibObject );
	// 更改光标形状
	BeginWaitCursor();

	m_matTransed = FreqPro.FFT2() ;

	if(!isempty(m_matTransed)) m_bFft = TRUE;
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);
}

void CDipDoc::OnFreqNfft() 
{
	//创建点处理CImagePro类对象
	CFreqPro FreqPro( m_pDibObject );
	// 更改光标形状
	BeginWaitCursor();

	if(FreqPro.NFFT2(m_matTransed)) m_bFft = FALSE;
	
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);
}

void CDipDoc::OnFreqFftFilte() 
{
	// 创建对话框
	CDlgFouriorFilte dlgPara;
	
	// 初始化变量值
	dlgPara.m_nFitleParaA = 0.0;
	dlgPara.m_nFilteType = 0;
	
	// 显示对话框,提示用户设定滤波参数
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户设定的滤波参数
	double a = dlgPara.m_nFitleParaA;
	int nType = dlgPara.m_nFilteType;

	// 删除对话框
	delete dlgPara;	
	
	if(nType == 0)
	{
		//低通滤波
		Mm matSize = size(m_matTransed);
		Mm matTemp = mabs(m_matTransed);
		Mm matVector = reshape(m_matTransed, matSize.r(1,1)*matSize.r(1,2) , 1);

		Mm matMax = mmax(matVector);

		matTemp = matTemp / matMax;
		Mm matL = matTemp >= (double)a;
		m_matTransed = times(m_matTransed, matL);
	}
	else if(nType == 1)
	{
		//高通滤波
		Mm matSize = size(m_matTransed);
		Mm matTemp = mabs(m_matTransed);
		Mm matVector = reshape(m_matTransed, matSize.r(1,1)*matSize.r(1,2) , 1);

		Mm matMax = mmax(matVector);

		matTemp = matTemp / matMax;
		Mm matL = matTemp <= (double)a;
		m_matTransed = times(m_matTransed, matL);
	}

	//创建点处理CImagePro类对象
	CFreqPro FreqPro( m_pDibObject );
	// 更改光标形状
	BeginWaitCursor();

	if(FreqPro.NFFT2(m_matTransed)) m_bFft = FALSE;
	
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);

}

void CDipDoc::OnFreqWalh() 
{
	//创建点处理CImagePro类对象
	CFreqPro FreqPro( m_pDibObject );
	// 更改光标形状
	BeginWaitCursor();

	m_matTransed = FreqPro.WHT2() ;

	if(!isempty(m_matTransed)) m_bWht = TRUE;
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);
}

void CDipDoc::OnFreqNwalh() 
{
	//创建点处理CImagePro类对象
	CFreqPro FreqPro( m_pDibObject );
	// 更改光标形状
	BeginWaitCursor();

	if(FreqPro.NWHT2(m_matTransed)) m_bWht = FALSE;
	
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);
}

//以下七个命令更新消息映射,保证频域变换只对8位图像进行操作。
void CDipDoc::OnUpdateFreqDct(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() == 8);
}

void CDipDoc::OnUpdateFreqNdct(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() == 8 && m_bDct);
}

void CDipDoc::OnUpdateFreqFft(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() == 8);
}

void CDipDoc::OnUpdateFreqNfft(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() == 8 && m_bFft);
}

void CDipDoc::OnUpdateFreqFftFilte(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() == 8 && m_bFft);
}

void CDipDoc::OnUpdateFreqWalh(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() == 8);
}

void CDipDoc::OnUpdateFreqNwalh(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pDibObject->GetNumBits() == 8 && m_bWht);
}

void CDipDoc::OnMorphClose() 
{
	//结构元素数组指针(存储的是各结构元素相对于结构中心的坐标)
	int *nMask;

	//结构元素的大小(以结构元素中的点数为单位)
	int nMaskLen = 0;


	// 创建对话框
	CDlgMorph dlgPara;
	
	// 显示对话框,提示用户设定腐蚀方向
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}

	nMask = dlgPara.m_npMask;
	nMaskLen = dlgPara.m_nMaskLen;

	// 删除对话框
	delete dlgPara;	

	//创建形态学处理CMorphPro类对象
	CMorphPro MorphProcesses( m_pDibObject );

	// 更改光标形状
	BeginWaitCursor();

	MorphProcesses.Closing(nMask, nMaskLen);
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);	
}

void CDipDoc::OnMorphDilation() 
{
	//结构元素数组指针(存储的是各结构元素相对于结构中心的坐标)
	int *nMask;

	//结构元素的大小(以结构元素中的点数为单位)
	int nMaskLen = 0;


	// 创建对话框
	CDlgMorph dlgPara;
	
	// 显示对话框,提示用户设定腐蚀方向
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}

	nMask = dlgPara.m_npMask;
	nMaskLen = dlgPara.m_nMaskLen;

	// 删除对话框
	delete dlgPara;	

	//创建形态学处理CMorphPro类对象
	CMorphPro MorphProcesses( m_pDibObject );

	// 更改光标形状
	BeginWaitCursor();

	MorphProcesses.Dilation(nMask, nMaskLen);
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);	
}

void CDipDoc::OnMorphErosion() 
{
	//结构元素数组指针(存储的是各结构元素相对于结构中心的坐标)
	int *nMask;

	//结构元素的大小(以结构元素中的点数为单位)
	int nMaskLen = 0;


	// 创建对话框
	CDlgMorph dlgPara;
	
	// 显示对话框,提示用户设定腐蚀方向
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}

	nMask = dlgPara.m_npMask;
	nMaskLen = dlgPara.m_nMaskLen;

	// 删除对话框
	delete dlgPara;	

	//创建形态学处理CMorphPro类对象
	CMorphPro MorphProcesses( m_pDibObject );

	// 更改光标形状
	BeginWaitCursor();

	MorphProcesses.Erosion(nMask, nMaskLen);
	// 恢复光标
	EndWaitCursor();
	
	// 更新视图
	UpdateAllViews(NULL);	
}

void CDipDoc::OnMorphOpen() 
{
	//结构元素数组指针(存储的是各结构元素相对于结构中心的坐标)
	int *nMask;

	//结构元素的大小(以结构元素中的点数为单位)
	int nMaskLen = 0;


	// 创建对话框
	CDlgMorph dlgPara;
	

⌨️ 快捷键说明

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