📄 data_compress_systemview.cpp
字号:
// 更新视图
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用户
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
}
///////////////////////////////////////////
// 对图像实施线形平滑滤波(G1) //
///////////////////////////////////////////
void CData_Compress_SystemView::OnLineSmoothFilter()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 进行线形平滑滤波处理
CSpaceFilter clsSpaceFilter;
clsSpaceFilter.StencilFilter(pDoc->GetHDIB(), &Line_Filter[0]);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
Invalidate();
}
void CData_Compress_SystemView::OnLineSmoothFilter2()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 进行线形平滑滤波处理
CSpaceFilter clsSpaceFilter;
clsSpaceFilter.StencilFilter(pDoc->GetHDIB(), &Line_Filter[1]);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
Invalidate();
}
void CData_Compress_SystemView::OnLineSmoothFilter3()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 进行线形平滑滤波处理
CSpaceFilter clsSpaceFilter;
clsSpaceFilter.StencilFilter(pDoc->GetHDIB(), &Line_Filter[2]);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
Invalidate();
}
///////////////////////////////////////////
// 对图像实施非线形平滑滤波(G2) //
///////////////////////////////////////////
void CData_Compress_SystemView::OnMedianFilter()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 进行线形平滑滤波处理
CSpaceFilter clsSpaceFilter;
clsSpaceFilter.MedianFilter(pDoc->GetHDIB());
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
Invalidate();
}
///////////////////////////////////////////
// 对图像实施线形锐化滤波(G3) //
///////////////////////////////////////////
void CData_Compress_SystemView::OnLineQuickFilter()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 进行线形平滑滤波处理
CSpaceFilter clsSpaceFilter;
clsSpaceFilter.StencilFilter(pDoc->GetHDIB(), &Line_Filter[3]);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
Invalidate();
}
///////////////////////////////////////////
// 对图像实施超限滤波 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnOverrunFilter()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 进行线形平滑滤波处理
CSpaceFilter clsSpaceFilter;
clsSpaceFilter.OverRun(pDoc->GetHDIB(), &OverRun_Filter, 10);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
Invalidate();
}
///////////////////////////[正交变换处理]////////////////////////////////////////////
///////////////////////////////////////////
// 对图像实施傅立叶变换处理 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnFreqFour()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
CFreqCalculate clsFreqCalculate;
// 调用DIBFourier()函数进行付立叶变换
if (clsFreqCalculate.DIBFourier(pDoc->GetHDIB()))
{
// 标识为频谱图
pDoc->m_bIsFrequency = TRUE;
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用户
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
}
///////////////////////////////////////////
// 对图像实施离散余弦变换处理 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnFreqDct()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
CFreqCalculate clsFreqCalculate;
// 调用DIBFourier()函数进行付立叶变换
if (clsFreqCalculate.DIBDCT(pDoc->GetHDIB()))
{
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用户
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
}
///////////////////////////////////////////
// 对图像实施沃尔什——哈达玛变换处理 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnFreqWalh()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
CFreqCalculate clsFreqCalculate;
// 调用DIBFourier()函数进行付立叶变换
if (clsFreqCalculate.DIBWalsh(pDoc->GetHDIB()))
{
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用户
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
}
///////////////////////////[图像频域滤波部分]////////////////////////////////////////////
///////////////////////////////////////////
// 对图像实施巴特沃斯低通滤波 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnButterworthL()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 由对话框输入截止频率
CDLGSetFreq dlg;
dlg.m_fValue = 250.0f;
if(dlg.DoModal() == IDOK)
{
// 更新数据
UpdateData(TRUE);
// 对图象进行巴特沃斯低通滤波
CFreqFilter clsFreqFilter;
clsFreqFilter.ButterworthL(pDoc->GetHDIB(), dlg.m_fValue);
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
}
///////////////////////////////////////////
// 对图像实施巴特沃斯高通滤波 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnButterworthH()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 由对话框输入截止频率
CDLGSetFreq dlg;
dlg.m_fValue = 5.0f;
if(dlg.DoModal() == IDOK)
{
// 更新数据
UpdateData(TRUE);
// 对图象进行巴特沃斯高通滤波
CFreqFilter clsFreqFilter;
clsFreqFilter.ButterworthH(pDoc->GetHDIB(), dlg.m_fValue);
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
}
///////////////////////////////////////////
// 对图像实施交互式带阻滤波 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnMutualFilter()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
if (pDoc->m_bIsFrequency == FALSE)
{
// 提示用户
MessageBox("请先在频谱图指定滤波区域!", "系统提示" , MB_ICONINFORMATION | MB_OK);
return;
}
// 重新打开文档
pDoc->SetModifiedFlag(FALSE);
pDoc->OnFileReopen();
// 对图象进行交互式带阻滤波
CFreqFilter clsFreqFilter;
clsFreqFilter.MutualFilter(pDoc->GetHDIB(), pDoc->m_rect, pDoc->m_nRgnNum);
pDoc->m_nRgnNum = 0;
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
///////////////////////////////////////////
// 对图像实施巴特沃斯低通滤波的逆滤波 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnRetrorseFilter()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 由对话框输入截止频率
CDLGSetFreq dlg;
dlg.m_fValue = 250.0f;
if(dlg.DoModal() == IDOK)
{
// 更新数据
UpdateData(TRUE);
// 对图象进行巴特沃斯低通滤波
CFreqFilter clsFreqFilter;
clsFreqFilter.RetrorseFilter(pDoc->GetHDIB(), dlg.m_fValue);
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
}
///////////////////////////////////////////
// 对图像实施维纳滤波 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnWienerFilter()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 由对话框输入截止频率
CDLGSetFreq dlg;
dlg.m_fValue = 250.0f;
if(dlg.DoModal() == IDOK)
{
// 更新数据
UpdateData(TRUE);
// 对图象进行巴特沃斯低通滤波
CFreqFilter clsFreqFilter;
clsFreqFilter.WienerFilter(pDoc->GetHDIB(), dlg.m_fValue);
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
}
///////////////////////////////////////////
// 对图像实施功率谱均衡滤波 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnPSE_Filter()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 由对话框输入截止频率
CDLGSetFreq dlg;
dlg.m_fValue = 250.0f;
if(dlg.DoModal() == IDOK)
{
// 更新数据
UpdateData(TRUE);
// 对图象进行巴特沃斯低通滤波
CFreqFilter clsFreqFilter;
clsFreqFilter.PSE_Filter(pDoc->GetHDIB(), dlg.m_fValue);
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
}
///////////////////////////////////////////
// 对图像实施最小均方滤波 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnMinPower()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 由对话框输入截止频率
CDLGSetFreq dlg;
dlg.m_fValue = 250.0f;
if(dlg.DoModal() == IDOK)
{
// 更新数据
UpdateData(TRUE);
// 对图象进行巴特沃斯低通滤波
CFreqFilter clsFreqFilter;
clsFreqFilter.MinPower(pDoc->GetHDIB(), dlg.m_fValue);
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
}
///////////////////////////////////////////
// 对空间失真图像进行矫正(从角度) //
///////////////////////////////////////////
void CData_Compress_SystemView::OnRotate()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 由对话框输入旋转角度
CDLGSetAngle dlg;
dlg.m_fAngle = 0.0f;
if(dlg.DoModal() == IDOK)
{
// 更新数据
UpdateData(TRUE);
// 对图象进行角度矫正
CGeoTrans clsGeoTrans;
clsGeoTrans.Rotate(pDoc->GetHDIB(), dlg.m_fAngle);
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
}
///////////////////////////////////////////
// 对空间失真图像进行校直(从空间角度) //
///////////////////////////////////////////
void CData_Compress_SystemView::OnRectinication()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 由对话框输入旋转角度
CDLGSetAngle dlg;
dlg.m_fAngle = 0.0f;
if(dlg.DoModal() == IDOK)
{
// 更新数据
UpdateData(TRUE);
// 对图象进行角度矫正
CGeoTrans clsGeoTrans;
clsGeoTrans.Rectinication(pDoc->GetHDIB(), dlg.m_fAngle);
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
}
///////////////////////////////////////////
// 向图像添加随机噪声 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnRandomNoise()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 对图象进行巴特沃斯低通滤波
CNoise clsNoise;
clsNoise.RandomNoise(pDoc->GetHDIB());
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
///////////////////////////////////////////
// 向图象添加盐性噪声 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnSaltNoise()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
// 对图象进行巴特沃斯低通滤波
CNoise clsNoise;
clsNoise.SaltNoise(pDoc->GetHDIB());
// 重画视图
Invalidate();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
}
///////////////////////////[数学形态学部分]//////////////////////////////////////////
///////////////////////////////////////////
// 对图像实施水平腐蚀处理 //
///////////////////////////////////////////
void CData_Compress_SystemView::OnHErosion()
{
// 获取文档
CData_Compress_SystemDoc* pDoc = GetDocument();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -