📄 imageprocessingview.cpp
字号:
// 更改光标形状
BeginWaitCursor();
// 调用GrayStretch()函数进行灰度拉伸
GraySegLinTrans(pDoc->m_pDibInit, nX1, nY1, nX2, nY2);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
void CImageProcessingView::OnEnhanceHistequ()
{
// 直方图均衡
// 获取文档
CImageProcessingDoc* pDoc = GetDocument();
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的直方图均衡,其它的可以类推)
if(pDoc->m_pDibInit->m_nColorTableEntries != 256)
{
// 提示用户
MessageBox("目前只支持256色位图的伪彩色变换!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 更改光标形状
BeginWaitCursor();
// 调用HistogramEqualize()函数进行直方图均衡
HistogramEqualize(pDoc->m_pDibInit);
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 恢复光标
EndWaitCursor();
}
/*************************************************************************
*
* \函数名称:
* OnRegReg()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 该函数实现图象的配准
*
*************************************************************************
*/
void CImageProcessingView::OnRegReg()
{
// 获得文档类句柄
CImageProcessingDoc* pDoc;
pDoc = GetDocument();
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的水平镜像,其它的可以类推)
if(pDoc->m_pDibInit->m_nColorTableEntries != 256)
{
// 提示用户
MessageBox("目前只支持256色位图的图象配准!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 打开图象配准对话框
CDlgReg* pDlg=new CDlgReg(NULL,pDoc);
pDlg->DoModal();
delete pDlg;
}
/*************************************************************************
*
* \函数名称:
* OnEnhanceSharp()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 该函数利用Laplacian算子实现图象的锐化
*
*************************************************************************
*/
void CImageProcessingView::OnEnhanceSharp()
{
//更改光标形状
BeginWaitCursor();
CImageProcessingDoc * pDoc = (CImageProcessingDoc *)this->GetDocument();
CDib * pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 循环控制变量
int y;
int x;
CSize sizeImage = pDib->GetDimensions();
int nWidth = sizeImage.cx ;
int nHeight= sizeImage.cy ;
int nSaveWidth = pDib->GetDibSaveDim().cx;
// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
}
}
// 调用LinearSharpen函数进行图象锐化增强
LinearSharpen(pUnchImage, nWidth, nHeight) ;
// 增强以后的图象拷贝到pDib中,进行显示
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
}
}
// 释放内存
delete []pUnchImage;
pUnchImage = NULL ;
// 恢复光标形状
EndWaitCursor();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
/*************************************************************************
*
* \函数名称:
* OnEnhanceSmoothFr()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 该函数利用低通滤波实现图象平滑
*
************************************************************************
*/
void CImageProcessingView::OnEnhanceSmoothFr()
{
// TODO: Add your command handler code here
//更改光标形状
BeginWaitCursor();
CImageProcessingDoc * pDoc = (CImageProcessingDoc *)this->GetDocument();
CDib * pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 循环控制变量
int y;
int x;
CSize sizeImage = pDib->GetDimensions();
int nWidth = sizeImage.cx ;
int nHeight= sizeImage.cy ;
int nSaveWidth = pDib->GetDibSaveDim().cx;
// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
}
}
// 调用低通滤波函数进行图象增强
LowPassFilterEnhance(pUnchImage, nWidth, nHeight, nWidth/16) ;
// 增强以后的图象拷贝到pDib中,进行显示
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
}
}
// 释放内存
delete []pUnchImage;
pUnchImage = NULL ;
// 恢复光标形状
EndWaitCursor();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
/*************************************************************************
*
* \函数名称:
* OnEnhanceButtLow()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 该函数利用Butterworth低通滤波实现图象平滑
*
************************************************************************
*/
void CImageProcessingView::OnEnhanceButtLow()
{
// TODO: Add your command handler code here
//更改光标形状
BeginWaitCursor();
CImageProcessingDoc * pDoc = (CImageProcessingDoc *)this->GetDocument();
CDib * pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 循环控制变量
int y;
int x;
CSize sizeImage = pDib->GetDimensions();
int nWidth = sizeImage.cx ;
int nHeight= sizeImage.cy ;
int nSaveWidth = pDib->GetDibSaveDim().cx;
// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
}
}
// 调用ButterWorth低通滤波函数进行图象增强
ButterWorthLowPass(pUnchImage, nWidth, nHeight, nWidth/2) ;
// 增强以后的图象拷贝到pDib中,进行显示
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
}
}
// 释放内存
delete []pUnchImage;
pUnchImage = NULL ;
// 恢复光标形状
EndWaitCursor();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
/*************************************************************************
*
* \函数名称:
* OnEnhanceSharpFreq()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 该函数利用高通滤波实现图象增强
*
************************************************************************
*/
void CImageProcessingView::OnEnhanceSharpFreq()
{
// TODO: Add your command handler code here
//更改光标形状
BeginWaitCursor();
CImageProcessingDoc * pDoc = (CImageProcessingDoc *)this->GetDocument();
CDib * pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 循环控制变量
int y;
int x;
CSize sizeImage = pDib->GetDimensions();
int nWidth = sizeImage.cx ;
int nHeight= sizeImage.cy ;
int nSaveWidth = pDib->GetDibSaveDim().cx;
// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
}
}
// 调用高通滤波函数进行图象增强
HighPassFilterEnhance(pUnchImage, nWidth, nHeight, 50) ;
// 增强以后的图象拷贝到pDib中,进行显示
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
}
}
// 释放内存
delete []pUnchImage;
pUnchImage = NULL ;
// 恢复光标形状
EndWaitCursor();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
/*************************************************************************
*
* \函数名称:
* OnEnhanceButtHight()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 该函数利用Butterworth高通滤波实现图象平滑
*
************************************************************************
*/
void CImageProcessingView::OnEnhanceButtHight()
{
//更改光标形状
BeginWaitCursor();
CImageProcessingDoc * pDoc = (CImageProcessingDoc *)this->GetDocument();
CDib * pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 循环控制变量
int y;
int x;
CSize sizeImage = pDib->GetDimensions();
int nWidth = sizeImage.cx ;
int nHeight= sizeImage.cy ;
int nSaveWidth = pDib->GetDibSaveDim().cx;
// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
}
}
// 调用ButterWorth高通滤波函数进行图象增强
ButterWorthHighPass(pUnchImage, nWidth, nHeight, nWidth/2) ;
// 增强以后的图象拷贝到pDib中,进行显示
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
}
}
// 释放内存
delete []pUnchImage;
pUnchImage = NULL ;
// 恢复光标形状
EndWaitCursor();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
/*************************************************************************
*
* \函数名称:
* OnRegionsegFix()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 实现并行区域分割
*
************************************************************************
*/
void CImageProcessingView::OnRegionsegFix()
{
// TODO: Add your command handler code here
//更改光标形状
BeginWaitCursor();
CImageProcessingDoc * pDoc = (CImageProcessingDoc *)this->GetDocument();
CDib * pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 调用函数实现固定阈值分割
RegionSegFixThreshold(pDib,200);
// 恢复光标形状
EndWaitCursor();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
/*************************************************************************
*
* \函数名称:
* OnAdaRegionSeg()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 实现自适应区域分割算法
*
************************************************************************
*/
void CImageProcessingView::OnAdaRegionSeg()
{
// TODO: Add your command handler code here
//更改光标形状
BeginWaitCursor();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -