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

📄 imagelabdoc.cpp

📁 医学图象处理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -