📄 imagelabdoc.cpp
字号:
DoGrayProcess(PT_Segment_AutoBinary_EC);
}
//显示图像的一维直方图
void CImageLABDoc::OnImageShowhistogram()
{
CHistBinDlg dlg(this);
dlg.DoModal();
}
//显示图像的二维直方图
void CImageLABDoc::OnImageShowhistogram2()
{
// TODO: Add your command handler code here
C2DHistogram dlg(this);
dlg.DoModal();
}
//均值滤波
void CImageLABDoc::OnYclSmoothingMean()
{
DoNeedMaskGrayProcess(PT_Smoothing_Mean);
}
//非递归中值滤波
void CImageLABDoc::OnYclSmoothingNonrmiddle()
{
DoNeedMaskGrayProcess(PT_Smoothing_NonRecursiveMiddle);
}
//递归中值滤波
void CImageLABDoc::OnYclSmoothingRmiddle()
{
DoNeedMaskGrayProcess(PT_Smoothing_RecursiveMiddle);
}
//快速中值滤波
void CImageLABDoc::OnYclSmoothingFastmiddle()
{
DoNeedMaskGrayProcess(PT_Smoothing_FastMiddle);
}
//SUSAN 滤波
void CImageLABDoc::OnYclSmoothingSusan()
{
CSusanPramDlg InputParmDlg;
if(InputParmDlg.DoModal()==IDOK)
{
BeginWaitCursor();
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.SusanNormalFilter2(InputParmDlg.m_bt, InputParmDlg.m_dt, p1, p2 );
}
else
{
Image.SusanNormalFilter2(InputParmDlg.m_bt, InputParmDlg.m_dt);
}
EndWaitCursor();
UpdateAllViews(NULL);
SetModifiedFlag();
}
}
//线性增强图像
void CImageLABDoc::OnYclEnhancementLinear()
{
Image.BackUp();
CEhanceLinearDlg dlg(this);
if(dlg.DoModal()==IDCANCEL)
{
Image.ImgSwap();
Image.BackUp();
UpdateAllViews(NULL);
}
SetModifiedFlag();
}
//非线性增强图像
void CImageLABDoc::OnYclEnhancementNonlinear()
{
}
//直方图均横化增强图像
void CImageLABDoc::OnYclEnhancementHistogram()
{
DoGrayProcess(PT_Enhance_Histogram);
}
// SUSAN 算法提取图像边缘(在原图显示)
void CImageLABDoc::OnYclSegmentEdgeSusannormal()
{
CSusanPramDlg InputParmDlg;
if(InputParmDlg.DoModal()==IDOK)
{
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.SusanNormalEdge2(InputParmDlg.m_bt, p1, p2 );
}
else
{
Image.SusanNormalEdge2(InputParmDlg.m_bt);
}
UpdateAllViews(NULL);
SetModifiedFlag( );
}
}
// SUSAN 算法提取图像边缘(初始响应)
void CImageLABDoc::OnYclSegmentPrincipleNormal()
{
CSusanPramDlg InputParmDlg;
if(InputParmDlg.DoModal()==IDOK)
{
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.SusanPrinciple2(InputParmDlg.m_bt, p1, p2 );
}
else
{
Image.SusanPrinciple2(InputParmDlg.m_bt);
}
UpdateAllViews(NULL);
SetModifiedFlag();
EndWaitCursor();
}
}
// 二值图像的hough变换
void CImageLABDoc::OnYclDescriptionBinaryhough()
{
DoBinaryProcess(PT_Binary_Transform_Hough);
}
// 二值图像的radon变换
void CImageLABDoc::OnYclDescriptionBinaryradon()
{
DoBinaryProcess(PT_Binary_Transform_Radon);
}
// 二值图像的 "膨胀" 运算
void CImageLABDoc::OnYclMorphologyDilation()
{
DoMorphProcess(0);
}
// 二值图像的 "腐蚀" 运算
void CImageLABDoc::OnYclMorphologyErosion()
{
DoMorphProcess(1);
}
// 二值图像的 "开" 运算
void CImageLABDoc::OnYclMorphologyOpening()
{
DoMorphProcess(2);
}
// 二值图像的 "闭" 运算
void CImageLABDoc::OnYclMorphologyClosing()
{
DoMorphProcess(3);
}
// 灰度图像的 "膨胀" 运算
void CImageLABDoc::OnYclDescriptionGrayDilation()
{
DoMorphProcess(0, false);
}
// 灰度图像的 "腐蚀" 运算
void CImageLABDoc::OnYclDescriptionGrayErosion()
{
DoMorphProcess(1, false);
}
// 灰度图像的 "开" 运算
void CImageLABDoc::OnYclDescriptionGrayOpening()
{
DoMorphProcess(2, false);
}
// 灰度图像的 "闭" 运算
void CImageLABDoc::OnYclDescriptionGrayClosing()
{
DoMorphProcess(3, false);
}
// 显示FFT变化后的频谱图像
void CImageLABDoc::OnImageShowfftmagniyude()
{
BeginWaitCursor();
Image.BackUp();
Image.ImageProcess(PT_ShowFFTMagnitude);
UpdateAllViews(NULL);
SetModifiedFlag( );
EndWaitCursor();
}
//旋转不变量算子 提取图像的边缘
void CImageLABDoc::OnYclSegmentRoinvaroperator()
{
DoNeedMaskGrayProcess(PT_Segment_RoInvarOperator);
}
//图像边缘局部方向角的显示 (SOBEL)
void CImageLABDoc::OnYclSharpenSobelAngle()
{
DoGrayProcess(PT_EdgeOrention_Sobel);
}
//图像边缘局部方向角的显示(旋转不变量算子)
void CImageLABDoc::OnYclDescriptionEdgeorentionRoi()
{
DoNeedMaskGrayProcess(PT_EdgeOrention_RoInvarOperator);
}
//二值图像上区域的标记
void CImageLABDoc::OnYclDescriptionBinaryArealabel()
{
CTargetgrayDlg dlg;
if(dlg.DoModal()==IDOK)
{
BeginWaitCursor();
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.Binary_AreaLabel(p1, p2, dlg.TargetGray );
}
else
{
Image.Binary_AreaLabel(dlg.TargetGray, MetalLinePt, LineNum);
//MetalLineGeted = TRUE;
}
EndWaitCursor();
UpdateAllViews(NULL);
SetModifiedFlag( );
}
}
//转换图像为灰度图像
void CImageLABDoc::OnConverttograyimage()
{
Image.ConvertToGrayImage();
UpdateAllViews(NULL);
}
void CImageLABDoc::OnUpdateConverttograyimage(CCmdUI* pCmdUI)
{
pCmdUI->Enable(Image.GetImageType() != IndexGrayImage);
}
// 以金字塔形式显示图像
void CImageLABDoc::OnImageShowpyramidimage()
{
DoGrayProcess(PT_ShowPyramidImage);
}
// 图像马赛克显示
void CImageLABDoc::OnImageShowmosaicimage()
{
DoNeedMaskGrayProcess(PT_ShowMosaicImage);
}
// Guass 算子增强图像
void CImageLABDoc::OnYclEnhancementGaussring()
{
CGaussSigmaDlg dlg;
if(dlg.DoModal()==IDOK)
{
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.Gauss_Sharpen2(dlg.m_Sigma, p1, p2);
}
else
{
Image.Gauss_Sharpen2(dlg.m_Sigma);
}
UpdateAllViews(NULL);
SetModifiedFlag( );
}
}
// Guass 算子模糊图像
void CImageLABDoc::OnYclSmoothingGaussblur()
{
CGaussSigmaDlg dlg;
if(dlg.DoModal()==IDOK)
{
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.Gauss_Blur2(dlg.m_Sigma, p1, p2);
}
else
{
Image.Gauss_Blur2(dlg.m_Sigma);
}
UpdateAllViews(NULL);
SetModifiedFlag( );
}
}
// Marr Hildreth 算子提取边缘
void CImageLABDoc::OnYclSegmentEdgeMarrhildreth()
{
CGaussSigmaDlg dlg;
if(dlg.DoModal()==IDOK)
{
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.Marr_Hildreth2(dlg.m_Sigma, p1, p2);
}
else
{
Image.Marr_Hildreth2(dlg.m_Sigma);
}
UpdateAllViews(NULL);
SetModifiedFlag( );
}
}
//Hiliditch 方法细化二值图像
void CImageLABDoc::OnYclSegmentThinHiliditch()
{
DoBinaryProcess(PT_Binary_Thin_Hilditch);
}
//somebody 方法细化二值图像
void CImageLABDoc::OnYclSegmentThinSomenew()
{
DoBinaryProcess(PT_Binary_Thin_Somebody);
}
//ZhangSuen 方法细化二值图像
void CImageLABDoc::OnYclSegmentThinZhangsuen()
{
DoBinaryProcess(PT_Binary_Thin_ZhangSuen);
}
//提取二值图像的边缘
void CImageLABDoc::OnYclBinaryEdge()
{
DoBinaryProcess(PT_Binary_Edge_Simple);
}
//二值图像形态学处理的执行函数
void CImageLABDoc::DoMorphProcess(int type, BOOL IsBinaryImage)
{
Image.BackUp();
CMorphparam dlg(this, IsBinaryImage);
dlg.m_Type = type;
if(dlg.DoModal()==IDCANCEL)
{
Image.ImgSwap();
Image.BackUp();
UpdateAllViews(NULL);
}
SetModifiedFlag();
}
//二值图像处理的执行函数
void CImageLABDoc::DoBinaryProcess(eProcessType type)
{
CTargetgrayDlg dlg;
if(dlg.DoModal()==IDOK)
{
BeginWaitCursor();
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.Binary_Process(type, dlg.TargetGray, p1, p2);
}
else
{
Image.Binary_Process(type, dlg.TargetGray);
}
EndWaitCursor();
UpdateAllViews(NULL);
SetModifiedFlag( );
}
}
//灰度图像处理的执行函数
void CImageLABDoc::DoGrayProcess(eProcessType type)
{
Image.BackUp();
//BeginWaitCursor();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.ImageProcess(p1, p2, type);
}
else
{
Image.ImageProcess(type);
}
UpdateAllViews(NULL);
SetModifiedFlag( );
//EndWaitCursor();
}
//需要模板的灰度图像处理执行函数
void CImageLABDoc::DoNeedMaskGrayProcess(eProcessType type)
{
CMaskSizeDlg MaskSizedlg;
if(MaskSizedlg.DoModal()==IDOK)
{
BeginWaitCursor();
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.ImageNeedMaskProcess(type, MaskSizedlg.m_MaskSize, p1, p2 );
}
else
{
Image.ImageNeedMaskProcess(type, MaskSizedlg.m_MaskSize);
}
EndWaitCursor();
UpdateAllViews(NULL);
SetModifiedFlag();
}
}
void CImageLABDoc::OnJgimageRadon()
{
Image.BackUp();
Image.VerticalFlip();
Image_Improve_Radon(Image.m_lpDibArray, Image.m_nDibWidth, Image.m_nDibHeight, 5);
Image.VerticalFlip();
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CImageLABDoc::OnUpdateJgimageRadon(CCmdUI* pCmdUI)
{
}
void CImageLABDoc::OnYclSegmentEdgeCanny()
{
CCannyParam dlg;
if(dlg.DoModal()==IDOK)
{
BeginWaitCursor();
Image.BackUp();
float sigma = float( dlg.m_sigma );
float noise = 0.1f;
Image_Edge_Canny(Image, sigma, noise, dlg.m_lambda, dlg.m_tau, dlg.m_Operator_Type);
UpdateAllViews(NULL);
SetModifiedFlag();
EndWaitCursor();
}
}
void CImageLABDoc::OnYclSegmentEdgeSpatialZernikemoment()
{
DoGrayProcess(PT_Edge_Spatial_Zernike_Moment);
}
void CImageLABDoc::OnFileSaveAs()
{
CLABSaveDlg dlgFile(CImageLABApp::DriveNum);
if(dlgFile.DoModal()==IDOK)
{
CString FullDir, FileFullName;
FullDir.Format("%c:\\%s", 'C'+ dlgFile.SelectDrive, CImageLABApp::SaveFileDir);
if(!IsExistFile(FullDir))
{
_mkdir(FullDir);
}
FileFullName.Format("%c:\\%s\\%s.jpg", 'C'+ dlgFile.SelectDrive,
CImageLABApp::SaveFileDir, dlgFile.m_FileName);
if(IsExistFile(FileFullName))
{
int Answer;
CString Warning;
Warning.Format("%s已经存在!\n要替换吗?", FileFullName);
Answer = AfxMessageBox(Warning, MB_OKCANCEL|MB_ICONINFORMATION );
if(Answer != IDOK) return;
}
OnSaveDocument(FileFullName);
ImageFileName = FileFullName;
SetPathName(FileFullName);
SetModifiedFlag(false);
}
}
void CImageLABDoc::OnFileSave()
{
if( ImageFileName == "未命名图像文件" )
{
CLABSaveDlg dlgFile(CImageLABApp::DriveNum);
if(dlgFile.DoModal()==IDOK)
{
CString FullDir, FileFullName;
FullDir.Format("%c:\\%s", 'C'+ dlgFile.SelectDrive, CImageLABApp::SaveFileDir);
if(!IsExistFile(FullDir))
{
_mkdir(FullDir);
}
CString m_FileNameExt;
if (dlgFile.m_FileNameExt=="压缩格式")
m_FileNameExt="jpg";
else m_FileNameExt="bmp";
FileFullName.Format("%c:\\%s\\%s.%s", 'C'+ dlgFile.SelectDrive,
CImageLABApp::SaveFileDir, dlgFile.m_FileName,
m_FileNameExt);
if(IsExistFile(FileFullName))
{
int Answer;
CString Warning;
Warning.Format("%s已经存在!\n要替换吗?", FileFullName);
Answer = AfxMessageBox(Warning, MB_OKCANCEL|MB_ICONINFORMATION );
if(Answer != IDOK) return;
}
OnSaveDocument(FileFullName);
ImageFileName = FileFullName;
SetPathName(FileFullName);
SetModifiedFlag(false);
}
}
else
DoFileSave();
}
void CImageLABDoc::OnYclEnhancementAutolevels()
{
Image.BackUp();
if(m_pView!=NULL&&m_pView->DashRectDrawed)
{
CPoint p1, p2;
m_pView->GetSelectArea(p1, p2);
Image.EnhaceLinear(p1, p2, 0, 255, 1);
}
else
{
Image.EnhaceLinear( 0, 255, 1);
}
UpdateAllViews(NULL);
SetModifiedFlag( );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -