📄 imagelabdoc.cpp
字号:
// ImageLABDoc.cpp : implementation of the CImageLABDoc class
//
#include "stdafx.h"
#include "ImageLAB.h"
#include "AllImage.h"
#include "ImageLABDoc.h"
#include "ImageLABView.h"
#include "UseDlgs.h"
#include "CommonProc.h"
#include "ImageProcess.h"
#include "MainFrm.h"
#include <direct.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// CImageLABDoc
IMPLEMENT_DYNCREATE(CImageLABDoc, CDocument)
BEGIN_MESSAGE_MAP(CImageLABDoc, CDocument)
//{{AFX_MSG_MAP(CImageLABDoc)
ON_COMMAND(ID_CCWROTATE, OnCcwrotate)
ON_COMMAND(ID_CWROTATE, OnCwrotate)
ON_COMMAND(ID_HORFLIP, OnHorflip)
ON_COMMAND(ID_VERTFLIP, OnVertflip)
ON_COMMAND(ID_SHOWBLUECOMPONENT, OnShowbluecomponent)
ON_UPDATE_COMMAND_UI(ID_SHOWBLUECOMPONENT, OnUpdateShowbluecomponent)
ON_COMMAND(ID_SHOWGREENCOMPONENT, OnShowgreencomponent)
ON_UPDATE_COMMAND_UI(ID_SHOWGREENCOMPONENT, OnUpdateShowgreencomponent)
ON_COMMAND(ID_SHOWHUECOMPONENT, OnShowhuecomponent)
ON_UPDATE_COMMAND_UI(ID_SHOWHUECOMPONENT, OnUpdateShowhuecomponent)
ON_COMMAND(ID_SHOWINTCOMPONENT, OnShowintcomponent)
ON_UPDATE_COMMAND_UI(ID_SHOWINTCOMPONENT, OnUpdateShowintcomponent)
ON_COMMAND(ID_SHOWREDCOMPONENT, OnShowredcomponent)
ON_UPDATE_COMMAND_UI(ID_SHOWREDCOMPONENT, OnUpdateShowredcomponent)
ON_COMMAND(ID_SHOWRGBIMAGE, OnShowrgbimage)
ON_UPDATE_COMMAND_UI(ID_SHOWRGBIMAGE, OnUpdateShowrgbimage)
ON_COMMAND(ID_SHOWSATCOMPONENT, OnShowsatcomponent)
ON_UPDATE_COMMAND_UI(ID_SHOWSATCOMPONENT, OnUpdateShowsatcomponent)
ON_COMMAND(ID_INVERSEIMAGE, OnInverseimage)
ON_COMMAND(ID_IMAGEINFO, OnImageinfo)
ON_COMMAND(ID_YCL_SHARPEN_SOBEL, OnYclSharpenSobel)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
ON_COMMAND(ID_YCL_SHARPEN_PREWITT, OnYclSharpenPrewitt)
ON_COMMAND(ID_YCL_SHARPEN_ROBERTS, OnYclSharpenRoberts)
ON_COMMAND(ID_YCL_SEGMENT_MANUALBINARY, OnYclSegmentManualbinary)
ON_COMMAND(ID_YCL_ENHANCEMENT_LAPLACIAN, OnYclEnhancementLaplacian)
ON_COMMAND(ID_YCL_ENHANCEMENT_WALLIS, OnYclEnhancementWallis)
ON_COMMAND(ID_YCL_SMOOTHING_MEAN, OnYclSmoothingMean)
ON_COMMAND(ID_YCL_SMOOTHING_NONRMIDDLE, OnYclSmoothingNonrmiddle)
ON_COMMAND(ID_YCL_SMOOTHING_RMIDDLE, OnYclSmoothingRmiddle)
ON_COMMAND(ID_YCL_SMOOTHING_SUSAN, OnYclSmoothingSusan)
ON_COMMAND(ID_YCL_SMOOTHING_FASTMIDDLE, OnYclSmoothingFastmiddle)
ON_COMMAND(ID_YCL_ENHANCEMENT_LINEAR, OnYclEnhancementLinear)
ON_COMMAND(ID_YCL_ENHANCEMENT_NONLINEAR, OnYclEnhancementNonlinear)
ON_COMMAND(ID_YCL_ENHANCEMENT_HISTOGRAM, OnYclEnhancementHistogram)
ON_COMMAND(ID_EDIT_UNDOALL, OnEditUndoall)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDOALL, OnUpdateEditUndoall)
ON_COMMAND(ID_YCL_SEGMENT_EDGE_SUSANNORMAL, OnYclSegmentEdgeSusannormal)
ON_COMMAND(ID_YCL_SEGMENT_PRINCIPLE_NORMAL, OnYclSegmentPrincipleNormal)
ON_COMMAND(ID_YCL_DESCRIPTION_BINARYHOUGH, OnYclDescriptionBinaryhough)
ON_COMMAND(ID_YCL_DESCRIPTION_BINARYRADON, OnYclDescriptionBinaryradon)
ON_COMMAND(ID_IMAGE_SHOWHISTOGRAM, OnImageShowhistogram)
ON_UPDATE_COMMAND_UI(ID_YCL_DESCRIPTION_BINARYHOUGH, OnUpdate8BitImage)
ON_COMMAND(ID_YCL_MORPHOLOGY_CLOSING, OnYclMorphologyClosing)
ON_COMMAND(ID_YCL_MORPHOLOGY_DILATION, OnYclMorphologyDilation)
ON_COMMAND(ID_YCL_MORPHOLOGY_EROSION, OnYclMorphologyErosion)
ON_COMMAND(ID_YCL_MORPHOLOGY_OPENING, OnYclMorphologyOpening)
ON_COMMAND(ID_YCL_SEGMENT_ROINVAROPERATOR, OnYclSegmentRoinvaroperator)
ON_COMMAND(ID_YCL_SHARPEN_SOBEL_ANGLE, OnYclSharpenSobelAngle)
ON_COMMAND(ID_YCL_DESCRIPTION_EDGEORENTION_ROI, OnYclDescriptionEdgeorentionRoi)
ON_COMMAND(ID_YCL_DESCRIPTION_BINARY_AREALABEL, OnYclDescriptionBinaryArealabel)
ON_COMMAND(ID_CONVERTTOGRAYIMAGE, OnConverttograyimage)
ON_UPDATE_COMMAND_UI(ID_CONVERTTOGRAYIMAGE, OnUpdateConverttograyimage)
ON_COMMAND(ID_IMAGE_SHOWPYRAMIDIMAGE, OnImageShowpyramidimage)
ON_COMMAND(ID_YCL_ENHANCEMENT_GAUSSRING, OnYclEnhancementGaussring)
ON_COMMAND(ID_YCL_SMOOTHING_GAUSSBLUR, OnYclSmoothingGaussblur)
ON_COMMAND(ID_YCL_SEGMENT_EDGE_MARRHILDRETH, OnYclSegmentEdgeMarrhildreth)
ON_COMMAND(ID_YCL_SEGMENT_THIN_HILIDITCH, OnYclSegmentThinHiliditch)
ON_COMMAND(ID_YCL_SEGMENT_THIN_SOMENEW, OnYclSegmentThinSomenew)
ON_COMMAND(ID_YCL_SEGMENT_THIN_ZHANGSUEN, OnYclSegmentThinZhangsuen)
ON_COMMAND(ID_YCL_BINARY_EDGE, OnYclBinaryEdge)
ON_COMMAND(ID_IMAGE_SHOWMOSAICIMAGE, OnImageShowmosaicimage)
ON_COMMAND(ID_YCL_DESCRIPTION_GRAY_DILATION, OnYclDescriptionGrayDilation)
ON_COMMAND(ID_YCL_DESCRIPTION_GRAY_EROSION, OnYclDescriptionGrayErosion)
ON_COMMAND(ID_YCL_DESCRIPTION_GRAY_CLOSING, OnYclDescriptionGrayClosing)
ON_COMMAND(ID_YCL_DESCRIPTION_GRAY_OPENING, OnYclDescriptionGrayOpening)
ON_COMMAND(ID_YCL_SEGMENT_AUTOBINARY, OnYclSegmentAutobinary)
ON_COMMAND(ID_YCL_SEGMENT_AUTOBINARY1, OnYclSegmentAutobinary1)
ON_COMMAND(ID_YCL_SEGMENT_AUTOBINARY2, OnYclSegmentAutobinary2)
ON_COMMAND(ID_IMAGE_SHOWHISTOGRAM2, OnImageShowhistogram2)
ON_COMMAND(ID_YCL_SEGMENT_EDGE_CANNY, OnYclSegmentEdgeCanny)
ON_COMMAND(ID_YCL_SEGMENT_AUTOBINARY3, OnYclSegmentAutobinary3)
ON_COMMAND(ID_YCL_SEGMENT_EDGE_SPATIAL_ZERNIKEMOMENT, OnYclSegmentEdgeSpatialZernikemoment)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_UPDATE_COMMAND_UI(ID_YCL_DESCRIPTION_GRAY_DILATION, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_DESCRIPTION_GRAY_EROSION, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_DESCRIPTION_GRAY_CLOSING, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_DESCRIPTION_GRAY_OPENING, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_DESCRIPTION_BINARYRADON, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_ENHANCEMENT_HISTOGRAM, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_ENHANCEMENT_LAPLACIAN, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_ENHANCEMENT_LINEAR, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_ENHANCEMENT_NONLINEAR, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_ENHANCEMENT_WALLIS, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SEGMENT_AUTOBINARY, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SEGMENT_EDGE_SUSANNORMAL, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SEGMENT_MANUALBINARY, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SEGMENT_PRINCIPLE_NORMAL, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SHARPEN_PREWITT, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SHARPEN_ROBERTS, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SHARPEN_SOBEL, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SMOOTHING_FASTMIDDLE, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SMOOTHING_MEAN, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SMOOTHING_NONRMIDDLE, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SMOOTHING_RMIDDLE, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SMOOTHING_SPIN, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SMOOTHING_SUSAN, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_MORPHOLOGY_DILATION, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_MORPHOLOGY_EROSION, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_MORPHOLOGY_CLOSING, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_MORPHOLOGY_OPENING, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_ENHANCEMENT_GAUSSRING, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SMOOTHING_GAUSSBLUR, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SEGMENT_EDGE_MARRHILDRETH, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SEGMENT_THIN_HILIDITCH, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SEGMENT_THIN_SOMENEW, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SEGMENT_THIN_ZHANGSUEN, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_BINARY_EDGE, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_IMAGE_SHOWPYRAMIDIMAGE, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_IMAGE_SHOWMOSAICIMAGE, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_SHARPEN_SOBEL_ANGLE, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_DESCRIPTION_EDGEORENTION_ROI, OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_IMAGE_DES_INVARIANT_MOMENTS , OnUpdate8BitImage)
ON_UPDATE_COMMAND_UI(ID_YCL_ENHANCEMENT_AUTOLEVELS , OnUpdate8BitImage)
ON_COMMAND(ID_YCL_ENHANCEMENT_AUTOLEVELS, OnYclEnhancementAutolevels)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CImageLABDoc construction/destruction
CImageLABDoc::CImageLABDoc()
{
Channel = 0;
LineNum = 0;
MetalLineGeted = FALSE;
ImageFileName = "未命名图像文件";
//SaveFileDir = "ImageLAB Files";
}
CImageLABDoc::~CImageLABDoc()
{
if(ImageFileName != "未命名图像文件")
SetPathName(LPCTSTR(ImageFileName));
}
BOOL CImageLABDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CImageLABDoc serialization
void CImageLABDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CImageLABDoc diagnostics
#ifdef _DEBUG
void CImageLABDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CImageLABDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CImageLABDoc commands
//打开图像的消息响应函数
BOOL CImageLABDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
ImageFileName = lpszPathName;
ImageDesFileName = ImageFileName + ".txt";
ImageName = GetNameformFullPathName(ImageFileName);
if( Image.ReadImageFromFile(lpszPathName) )
{
Image.BackUp();
return true;
}
else
return false;
}
//保存图像的消息响应函数
BOOL CImageLABDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
ImageFileName = lpszPathName;
ImageDesFileName = ImageFileName + ".txt";
ImageName = GetNameformFullPathName(ImageFileName);
return Image.SaveImageToFile(lpszPathName);
}
//撤销上一步命令的函数
void CImageLABDoc::OnEditUndo()
{
Image.ImgSwap();
UpdateAllViews(NULL);
}
void CImageLABDoc::OnUpdateEditUndo(CCmdUI* pCmdUI)
{
pCmdUI->Enable( IsModified() );
}
//恢复到图像刚调入的时刻
void CImageLABDoc::OnEditUndoall()
{
Image.ReadImageFromFile((LPCTSTR)ImageFileName);
UpdateAllViews(NULL);
SetModifiedFlag(FALSE);
}
void CImageLABDoc::OnUpdateEditUndoall(CCmdUI* pCmdUI)
{
pCmdUI->Enable(IsModified( ));
}
//逆时针旋转图像
void CImageLABDoc::OnCcwrotate()
{
Image.Rotate90(FALSE);
SmallImage.DeleteMe();
int tx, w = m_pView->ScrollSize.cx - 1;
for(int i= 0; i< MAXPINNUM; i++)
{
if( m_pView->m_Pin[i] == NULL ) continue;
tx = m_pView->m_PinPos[i].x;
m_pView->m_PinPos[i].x = m_pView->m_PinPos[i].y;
m_pView->m_PinPos[i].y = w - tx;
m_pView->m_Pin[i]->MoveToPt(m_pView->m_PinPos[i]);
}
UpdateAllViews(NULL);
SetModifiedFlag();
}
//顺时针旋转图像
void CImageLABDoc::OnCwrotate()
{
Image.Rotate90();
SmallImage.DeleteMe();
int ty, h = m_pView->ScrollSize.cy - 1;
for(int i= 0; i< MAXPINNUM; i++)
{
if( m_pView->m_Pin[i] == NULL ) continue;
ty = m_pView->m_PinPos[i].y;
m_pView->m_PinPos[i].y = m_pView->m_PinPos[i].x;
m_pView->m_PinPos[i].x = h - ty;
m_pView->m_Pin[i]->MoveToPt(m_pView->m_PinPos[i]);
}
UpdateAllViews(NULL);
SetModifiedFlag();
}
//水平翻转图像
void CImageLABDoc::OnHorflip()
{
Image.HorizontalFlip();
SmallImage.DeleteMe();
int w = m_pView->ScrollSize.cx;
for(int i= 0; i< MAXPINNUM; i++)
{
if( m_pView->m_Pin[i] == NULL ) continue;
m_pView->m_PinPos[i].x = w - m_pView->m_PinPos[i].x;
m_pView->m_Pin[i]->MoveToPt(m_pView->m_PinPos[i]);
}
UpdateAllViews(NULL);
SetModifiedFlag( );
}
//竖直翻转图像
void CImageLABDoc::OnVertflip()
{
Image.VerticalFlip();
SmallImage.DeleteMe();
int h = m_pView->ScrollSize.cy;
for(int i= 0; i< MAXPINNUM; i++)
{
if( m_pView->m_Pin[i] == NULL ) continue;
m_pView->m_PinPos[i].y = h - m_pView->m_PinPos[i].y;
m_pView->m_Pin[i]->MoveToPt(m_pView->m_PinPos[i]);
}
UpdateAllViews(NULL);
SetModifiedFlag( );
}
//图像负片显示
void CImageLABDoc::OnInverseimage()
{
Image.Inverse();
SmallImage.DeleteMe();
UpdateAllViews(NULL);
SetModifiedFlag( );
}
//正常显示RGB图像
void CImageLABDoc::OnShowrgbimage()
{
if(Channel&(REDCOMPONENT|BLUECOMPONENT|GREENCOMPONENT))
{
Channel = 0;
}
else
{
Channel|= REDCOMPONENT;
}
Image.SelectChannel(Channel);
UpdateAllViews(NULL);
SetModifiedFlag( );
}
void CImageLABDoc::OnUpdateShowrgbimage(CCmdUI* pCmdUI)
{
pCmdUI->Enable(Image.m_wImageDepth==24);
pCmdUI->SetCheck(Channel==0);
}
//显示图像的红色分量
void CImageLABDoc::OnShowbluecomponent()
{
if(Channel&BLUECOMPONENT)
{
Channel&=~BLUECOMPONENT;
}
else
{
Channel|= BLUECOMPONENT;
if( (Channel&REDCOMPONENT)&&(Channel&BLUECOMPONENT)&&(Channel&GREENCOMPONENT) )
Channel&=~(GREENCOMPONENT|REDCOMPONENT);
}
Image.SelectChannel(Channel);
UpdateAllViews(NULL);
SetModifiedFlag( );
}
void CImageLABDoc::OnUpdateShowbluecomponent(CCmdUI* pCmdUI)
{
pCmdUI->Enable(Image.m_wImageDepth==24);
pCmdUI->SetCheck(Channel&BLUECOMPONENT?TRUE:FALSE);
}
//显示图像的绿色分量
void CImageLABDoc::OnShowgreencomponent()
{
if(Channel&GREENCOMPONENT)
{
Channel&=~GREENCOMPONENT;
}
else
{
Channel|= GREENCOMPONENT;
if( (Channel&REDCOMPONENT)&&(Channel&BLUECOMPONENT)&&(Channel&GREENCOMPONENT) )
Channel&=~(BLUECOMPONENT|REDCOMPONENT);
}
Image.SelectChannel(Channel);
UpdateAllViews(NULL);
SetModifiedFlag( );
}
void CImageLABDoc::OnUpdateShowgreencomponent(CCmdUI* pCmdUI)
{
pCmdUI->Enable(Image.m_wImageDepth==24);
pCmdUI->SetCheck(Channel&GREENCOMPONENT?TRUE:FALSE);
}
//显示图像的红色分量
void CImageLABDoc::OnShowredcomponent()
{
if(Channel&REDCOMPONENT)
{
Channel&=~REDCOMPONENT;
}
else
{
Channel|= REDCOMPONENT;
if( (Channel&REDCOMPONENT)&&(Channel&BLUECOMPONENT)&&(Channel&GREENCOMPONENT) )
Channel&=~(BLUECOMPONENT|GREENCOMPONENT);
}
Image.SelectChannel(Channel);
UpdateAllViews(NULL);
SetModifiedFlag( );
}
void CImageLABDoc::OnUpdateShowredcomponent(CCmdUI* pCmdUI)
{
pCmdUI->Enable(Image.m_wImageDepth==24);
pCmdUI->SetCheck(Channel&REDCOMPONENT?TRUE:FALSE);
}
//显示图像的hue分量
void CImageLABDoc::OnShowhuecomponent()
{
if(Channel&HUEIMAGE)
{
Channel =0;
}
else
{
Channel = HUEIMAGE;
}
Image.SelectChannel(Channel);
UpdateAllViews(NULL);
SetModifiedFlag( );
}
void CImageLABDoc::OnUpdateShowhuecomponent(CCmdUI* pCmdUI)
{
pCmdUI->Enable(Image.m_wImageDepth==24);
pCmdUI->SetCheck(Channel&HUEIMAGE?TRUE:FALSE);
}
//显示图像的intensity分量
void CImageLABDoc::OnShowintcomponent()
{
if(Channel&INTENSITYIMAGE)
{
Channel =0;
}
else
{
Channel = INTENSITYIMAGE;
}
Image.SelectChannel(Channel);
UpdateAllViews(NULL);
SetModifiedFlag( );
}
void CImageLABDoc::OnUpdateShowintcomponent(CCmdUI* pCmdUI)
{
pCmdUI->Enable(Image.m_wImageDepth==24);
pCmdUI->SetCheck(Channel&INTENSITYIMAGE?TRUE:FALSE);
}
//显示图像的saturation分量
void CImageLABDoc::OnShowsatcomponent()
{
if(Channel&SATURATIONIMAGE)
{
Channel =0;
}
else
{
Channel = SATURATIONIMAGE;
}
Image.SelectChannel(Channel);
UpdateAllViews(NULL);
SetModifiedFlag( );
}
void CImageLABDoc::OnUpdateShowsatcomponent(CCmdUI* pCmdUI)
{
pCmdUI->Enable(Image.m_wImageDepth==24);
pCmdUI->SetCheck(Channel&SATURATIONIMAGE?TRUE:FALSE);
}
//显示图像信息
void CImageLABDoc::OnImageinfo()
{
Image.ImageInfo();
}
//控制菜单的函数
void CImageLABDoc::OnUpdate8BitImage(CCmdUI* pCmdUI)
{
// pCmdUI->Enable(Image.m_wImageDepth==24);
pCmdUI->Enable(Image.m_wImageDepth==8);
}
//Sobel 算子提取图像边缘
void CImageLABDoc::OnYclSharpenSobel()
{
DoGrayProcess(PT_Sharpen_Sobel);
}
//Prewitt 算子提取图像边缘
void CImageLABDoc::OnYclSharpenPrewitt()
{
DoGrayProcess(PT_Sharpen_Prewitt);
}
//Roberts 算子提取图像边缘
void CImageLABDoc::OnYclSharpenRoberts()
{
DoGrayProcess(PT_Sharpen_Roberts);
}
//Laplacian 算子增强图像
void CImageLABDoc::OnYclEnhancementLaplacian()
{
DoGrayProcess(PT_Sharpen_Laplacian);
}
//Wallis 算子增强图像
void CImageLABDoc::OnYclEnhancementWallis()
{
Image.BackUp();
CWallisParam dlg(this);
if(dlg.DoModal()==IDCANCEL)
{
Image.ImgSwap();
Image.BackUp();
UpdateAllViews(NULL);
}
SetModifiedFlag();
}
// 手动分割灰度图像为二值图像
void CImageLABDoc::OnYclSegmentManualbinary()
{
Image.BackUp();
CManualBinaryDlg dlg(this);
if(dlg.DoModal()==IDCANCEL)
{
Image.ImgSwap();
Image.BackUp();
UpdateAllViews(NULL);
}
SetModifiedFlag();
}
// 自动分割灰度图像为二值图像
void CImageLABDoc::OnYclSegmentAutobinary()
{
DoGrayProcess(PT_Segment_AutoBinary);
}
void CImageLABDoc::OnYclSegmentAutobinary1()
{
DoGrayProcess(PT_Segment_AutoBinary_ME);
}
void CImageLABDoc::OnYclSegmentAutobinary2()
{
DoGrayProcess(PT_Segment_AutoBinary_Qtsu);
}
void CImageLABDoc::OnYclSegmentAutobinary3()
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -