📄 demoview.cpp
字号:
// demoView.cpp : implementation of the CDemoView class
//
#include "stdio.h"
#include "stdafx.h"
#include "demo.h"
#include "demoDoc.h"
#include "demoView.h"
#include"math.h"
#include "MainFrm.h"
#include "ImageCenterDib.h"//dib类头文件
#include "SpecialEffectShow.h"//图象的特效显示的头文件
#include "GrayTrans.h"//灰度变换类
#include "linearStretchParamDlg.h"//线性拉伸参数设置对话框
#include "histogram.h"//直方图类
#include "HistogramDrawDlg.h"//直方图绘制对话框
#include "GeometryTrans.h"//几何变换类
#include "GeometryMoveDlg.h"//平移设置对话框
#include "FFT.h"//快速傅立叶变换类
#include "Morphology.h"//形态学处理类
#include "MaskDefineDlg.h"//模板自定义对话框
#include "ThreshSegmentDlg.h"//阈值分割对话框
#include "Segment.h"//图像分割类
#include "RotateSetDlg.h"//旋转设置对话框
#include "Match.h"//匹配类
#include "NonlinearStretchDlg.h"//非线性拉伸(对数或指数)参数设置对话框
#include "RegionGrowDlg.h" //区域生长参数设置对话框
#include "Watershed.h"//水域分割类
#include "WatershedParaDlg.h"//水域分割参数设置对话框
#include "ImageRestore.h"//运动模糊恢复类
#include "ProjectRestoreDlg.h"//投影法运动模糊恢复设置对话框
#include "WienterFilterDlg.h"//维纳滤波设置对话框
#include "InverseFilterDlg.h"//逆旅滤波设置对话框
#include "transeform.h"//小波变换
#include "MedianDialog.h"//中值滤波选择模板对话框
#include "AvgDialog.h"//均值滤波选择模板对话框
#include "ImgEnhance.h"//图像增强类
#include "transform_DCT.h"//离散余弦变换
#include "Register.h"
#include "Zoomdlg.h"//缩放设置对话框
#include "Register.h"
#include "PhaseCorre.h"
//全局变量
Transform_FFT FFTTrans;//傅立叶变换类的对象
transeform_wavelet wltTrans;//小波变换类的对象
transform_DCT DIBDCT;//DCT变换类对象
ImgCenterDib DIB1;//配准算法的输入图像1
ImgCenterDib DIB2;//配准算法的输入图像2
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDemoView
IMPLEMENT_DYNCREATE(CDemoView, CScrollView)
BEGIN_MESSAGE_MAP(CDemoView, CScrollView)
//{{AFX_MSG_MAP(CDemoView)
ON_COMMAND(ID_SOBEL, OnSobel)
ON_COMMAND(id_ImgReverse, OnImgReverse)
ON_COMMAND(id_ColorToGray, OnColorToGray)
ON_COMMAND(id_Binary, OnBinary)
ON_COMMAND(id_GrayToColor, OnGrayToColor)
ON_COMMAND(id_LinearStrecth, OnLinearStrecth)
ON_COMMAND(id_HistgramAver, OnHistgramAver)
ON_COMMAND(id_HistogramDraw, OnHistogramDraw)
ON_COMMAND(ID_FFT, OnFft)
ON_COMMAND(id_IFFT, OnIfft)
ON_COMMAND(id_Clockwise90, OnClockwise90)
ON_COMMAND(id_Anticlockwise90, OnAnticlockwise90)
ON_COMMAND(id_Rotate180, OnRotate180)
ON_COMMAND(id_Zoom, OnZoom)
ON_COMMAND(id_Rotate, OnRotate)
ON_COMMAND(id_ErosionForBinary, OnErosionForBinary)
ON_COMMAND(ID__DilationForBinary, OnDilationForBinary)
ON_COMMAND(id_OpenForBinary, OnOpenForBinary)
ON_COMMAND(id_CloseForBinary, OnCloseForBinary)
ON_COMMAND(id_InnerEdgeForBinary, OnInnerEdgeForBinary)
ON_COMMAND(id_OuterEdgeForBinary, OnOuterEdgeForBinary)
ON_COMMAND(id_HitMissThinning, OnHitMissThinning)
ON_COMMAND(id_ErosionForGray, OnErosionForGray)
ON_COMMAND(id_DilationForGray, OnDilationForGray)
ON_COMMAND(id_OpenForGray, OnOpenForGray)
ON_COMMAND(id_CloseForGray, OnCloseForGray)
ON_COMMAND(id_MorphoGradientForGray, OnMorphoGradientForGray)
ON_COMMAND(id_TopHatPeak, OnTopHatPeak)
ON_COMMAND(id_TopHatVally, OnTopHatVally)
ON_COMMAND(id_TopHatPeakAndVally, OnTopHatPeakAndVally)
ON_COMMAND(id_InteractiveThresh, OnInteractiveThresh)
ON_COMMAND(id_OtusThreshold, OnOtusThreshold)
ON_COMMAND(id_Robert, OnRobert)
ON_COMMAND(id_Prewitt, OnPrewitt)
ON_COMMAND(id_EdgeSelectTemplete, OnEdgeSelectTemplete)
ON_COMMAND(id_HoughTransform, OnHoughTransform)
ON_COMMAND(id_LineDetectByHough, OnLineDetectByHough)
ON_COMMAND(id_RegionGrow, OnRegionGrow)
ON_COMMAND(id_ContourExtract, OnContourExtract)
ON_COMMAND(id_Gauss_laplacian, OnGausslaplacian)
ON_COMMAND(id_WatershedSegment, OnWatershedSegment)
ON_COMMAND(id_DuiShuStretch, OnDuiShuStretch)
ON_COMMAND(id_ZhiShuStretch, OnZhiShuStretch)
ON_COMMAND(id_Move, OnMove)
ON_COMMAND(id_ZhuanZhi, OnZhuanZhi)
ON_COMMAND(id_HorizontalMirror, OnHorizontalMirror)
ON_COMMAND(id_VerticalMirror, OnVerticalMirror)
ON_COMMAND(id_FFTEx, OnFFTEx)
ON_COMMAND(id_IFFTEx, OnIFFTEx)
ON_COMMAND(id_Laplacian, OnLaplacian)
ON_COMMAND(id_Krisch, OnKrisch)
ON_COMMAND(id_ContourTrace, OnContourTrace)
ON_COMMAND(id_MorphoContourForBinary, OnMorphoContourForBinary)
ON_COMMAND(ID_SCAN, OnScan)
ON_COMMAND(ID_SLIDE, OnSlide)
ON_COMMAND(ID_FADEIN, OnFadeIn)
ON_COMMAND(ID_MOSAIK, OnMosaik)
ON_COMMAND(ID_ProjRestore, OnProjRestore)
ON_COMMAND(ID_WienerFilter, OnWienerFilter)
ON_COMMAND(ID_InverseFilter, OnInverseFilter)
ON_COMMAND(ID_SET2ZERO_DENOISE, OnSet2zeroDenoise)
ON_COMMAND(ID__HARDTHRESHOLD, OnHardthreshold)
ON_COMMAND(ID_SOFTTHRESHOLD, OnSoftthreshold)
ON_COMMAND(ID_PepperSaltNoise, OnPepperSaltNoise)
ON_COMMAND(ID_Random, OnRandom)
ON_COMMAND(ID_AveSmooth, OnAveSmooth)
ON_COMMAND(id_MiddleSmooth, OnMiddleSmooth)
ON_COMMAND(ID_LaplacienSharp, OnLaplacienSharp)
ON_COMMAND(ID_CHOOSE_MASK, OnChooseMask)
ON_COMMAND(ID_POWER_SMOOTH, OnPowerSmooth)
ON_COMMAND(id_HarrWaveletTrans, OnHarrWaveletTrans)
ON_COMMAND(id_HarrWaveletITrans, OnHarrWaveletITrans)
ON_COMMAND(ID_DCT, OnDct)
ON_COMMAND(ID_GRADESHARP, OnGradesharp)
ON_COMMAND(ID_SNR, OnSnr)
ON_COMMAND(id_IDCT, OnIdct)
ON_COMMAND(ID_SECONDIMAGE, OnSecondimage)
ON_COMMAND(ID_FIRSTIMAGE, OnFirstimage)
ON_COMMAND(id_MatchConner, OnMatchConner)
ON_COMMAND(id_MatchTemplet, OnMatchTemplet)
ON_COMMAND(id_ConnerDetect, OnConnerDetect)
ON_COMMAND(ID_MOTION_FOPEN1, OnMotionFopen1)
ON_COMMAND(ID_MOTION_FOPEN2, OnMotionFopen2)
ON_COMMAND(ID_MOTION_FEST, OnMotionFest)
ON_COMMAND(ID_MITON_DEST, OnMitonDest)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDemoView construction/destruction
CDemoView::CDemoView()
{
}
CDemoView::~CDemoView()
{
}
BOOL CDemoView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDemoView drawing
void CDemoView::OnDraw(CDC* pDC)
{
//获取文档类指针
CDemoDoc* pDoc = GetDocument();
if(!pDoc->isAvi){
//返回m_dib的指针
ImgCenterDib *pDib=pDoc->GetPDib();
//获取DIB的尺寸
CSize sizeFileDib = pDib->GetDimensions();
//显示DIB
pDib->Draw(pDC, CPoint(0, 0), sizeFileDib);
}
else
{
}
}
void CDemoView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
//获取文档类指针
CDemoDoc* pDoc = GetDocument();
//获取DIB的指针
ImgCenterDib *pDib=pDoc->GetPDib();
//根据DIB尺寸设置视窗大小
if(pDib!=NULL)
SetScrollSizes(MM_TEXT, pDib->GetDimensions());
else{
//如果m_dib为空,则设置一个固定的尺寸
CSize sizeTotal;
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
}
/////////////////////////////////////////////////////////////////////////////
// CDemoView printing
BOOL CDemoView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CDemoView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDemoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CDemoView diagnostics
#ifdef _DEBUG
void CDemoView::AssertValid() const
{
CScrollView::AssertValid();
}
void CDemoView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CDemoDoc* CDemoView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDemoDoc)));
return (CDemoDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDemoView message handlers
void CDemoView::OnImgReverse()
{
//获取文档类指针
CDemoDoc *pDoc=GetDocument();
//获取ImgCenterDib类对象的指针,访问当前DIB数据
ImgCenterDib *pDib=pDoc->GetPDib();
//DIB类型判断
if(pDib->m_nBitCount!=24&&pDib->m_nBitCount!=8){
::MessageBox(0,"只处理彩色和灰度图像",MB_OK,0);
return ;
}
//将pDib中的图像数据作为输入数据,调用带参数的构造函数,
//定义GrayTrans类的对象graytrans
GrayTrans graytrans(pDib->GetDimensions(),
pDib->m_nBitCount,pDib->m_lpColorTable,pDib->m_pImgData);
//调用ReverseImg()对图像求反
graytrans.ReverseImg();
//建立一个新视图,显示分割结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
//发送新建文件的消息,创建一个新的文档-视图
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
//获取新建视图指针
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
//获取相关联的新的文档类指针
CDemoDoc* pDocNew=pView->GetDocument();
//获取新文档中的ImgCenterDib类对象指针
ImgCenterDib *dibNew=pDocNew->GetPDib();
//将变换后的输出图像作为新建文档的DIB进行显示
dibNew->ReplaceDib(graytrans.GetDimensions(),graytrans.m_nBitCountOut,graytrans.m_lpColorTableOut, graytrans.m_pImgDataOut);
//设置滚动窗口
pView->OnInitialUpdate();
//文档数据置脏,提示存盘信息
pDocNew->SetModifiedFlag(TRUE);
//各视图刷新显示
pDocNew->UpdateAllViews(pView);
}
void CDemoView::OnColorToGray()
{
//获取文档类指针
CDemoDoc *pDoc=GetDocument();
//获取ImgCenterDib类对象m_dib的指针,访问当前DIB数据
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理彩色图像
if(pDib->m_nBitCount!=24){
::MessageBox(0,"只处理彩色图像",MB_OK,0);
return ;
}
//将pDib中的图像数据作为输入数据,调用带参数的构造函数,
//定义GrayTrans类的对象graytrans
GrayTrans graytrans(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//彩色变灰度格式
graytrans.ColorToGray();
//建立一个新视图,显示分割结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
//发送新建文件的消息,创建一个新的文档-视图
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
//获取新建视图指针
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
//获取相关联的新的文档类指针
CDemoDoc* pDocNew=pView->GetDocument();
//获取新文档中的ImgCenterDib类对象指针
ImgCenterDib *dibNew=pDocNew->GetPDib();
//将变换后的输出图像作为新建文档的DIB进行显示
dibNew->ReplaceDib(graytrans.GetDimensions(),graytrans.m_nBitCountOut,graytrans.m_lpColorTableOut, graytrans.m_pImgDataOut);
//设置滚动窗口
pView->OnInitialUpdate();
//文档数据置脏,提示存盘信息
pDocNew->SetModifiedFlag(TRUE);
//各视图刷新显示
pDocNew->UpdateAllViews(pView);
}
void CDemoView::OnBinary()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//异常判断
if(pDib->m_nBitCount!=24&&pDib->m_nBitCount!=8){
::MessageBox(0,"只处理彩色和灰度图像",MB_OK,0);
return ;
}
//将pDib中的图像数据作为输入数据,调用带参数的构造函数,
//定义GrayTrans类的对象graytrans
GrayTrans graytrans(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//调用Binary()对图像进行二值化,缺省状态下阈值为
graytrans.Binary();
//建立一个新视图,显示分割结果
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
ImgCenterDib *dibNew=pDocNew->GetPDib();
dibNew->ReplaceDib(graytrans.GetDimensions(),graytrans.m_nBitCountOut,graytrans.m_lpColorTableOut, graytrans.m_pImgDataOut);
pView->OnInitialUpdate();
pDocNew->SetModifiedFlag(TRUE);
pDocNew->UpdateAllViews(pView);
}
void CDemoView::OnGrayToColor()
{
//获取文档类中m_dib的指针,访问当前DIB数据
CDemoDoc *pDoc=GetDocument();
ImgCenterDib *pDib=pDoc->GetPDib();
//只处理灰度图像
if(pDib->m_nBitCount!=8){
::MessageBox(0,"只处理灰度图像",MB_OK,0);
return ;
}
//将pDib中的图像数据作为输入数据,调用带参数的构造函数,
//定义GrayTrans类的对象graytrans
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -