5.5.2 拉普拉斯掩模锐化(2)
3.函数调用
在视图类CDemoView中映射“拉普拉斯锐化”事件的处理函数:OnLaplacienSharp(),以下是CDemoView:: :OnLaplacienSharp()函数的代码实现。
void CDemoView::OnLaplacienSharp() { CDemoDoc *pDoc=GetDocument(); ImgCenterDib *pDib=pDoc->GetPDib();
if(pDib->m_nBitCount!=8&{ ::MessageBox(0,"只处理灰度图像",MB_OK,0); return ; } CImgEnhance imgnoise(pDib->GetDimensions(),pDib->m_nBitCount, pDib->m_lpColorTable, pDib->m_pImgData); int TempH, TempW, TempCX, TempCY; float fCoef; float Temp[9]; //设模板为平均模板 Temp[0]=-1.0; Temp[1]=-1.0; Temp[2]=-1.0; Temp[3]=-1.0; Temp[4]=9.0; T[5]=-1.0; T[6]=-1.0; T[7]=-1.0; T[8]=-1.0; //初始化对话框变量 TH=3; TW=3; TCX=1; TCY=1; fCoef=1.0; imgnoise.LapTlate(TH,TW,TCX,TCY,T,fCoef);
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(imgnoise.GetDimensions(),imgnoise.m_nBitCountOut,imgnoise.m_lpColorTable, imgnoise.m_pImgDataOut); pDocNew->SetModifiedFlag(TRUE); pDocNew->UpdateAllViews(pView);
Invalidate(); } |
4.实验结果与分析
图5-10(a)显示了一幅花朵的图片,图5-10(b)显示了用图5-9(a)所示的拉普拉斯模板对该图像滤波后的结果。由图可以看出,将原始图像通过拉普拉斯变换后增强了图像中灰度突变处的对比度,使图像中小的细节部分得到增强并保留了图像的背景色调,使图像的细节比原始图像更加清晰。基于拉普拉斯变换的图像增强已成为图像锐化处理的基本工具。
|
图5-10 拉普拉斯方法的锐化结果 |
【责任编辑: 夏书 TEL:(010)68476606】
|