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

📄 imagelabdoc.cpp

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