面向?qū)ο蟪绦蛟O(shè)計(c++)圖像銳化處理設(shè)計報告_第1頁
面向?qū)ο蟪绦蛟O(shè)計(c++)圖像銳化處理設(shè)計報告_第2頁
面向?qū)ο蟪绦蛟O(shè)計(c++)圖像銳化處理設(shè)計報告_第3頁
面向?qū)ο蟪绦蛟O(shè)計(c++)圖像銳化處理設(shè)計報告_第4頁
面向?qū)ο蟪绦蛟O(shè)計(c++)圖像銳化處理設(shè)計報告_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、VC+課程設(shè)計 福建工程學(xué)院VC+課程設(shè)計課 題: 圖像銳化處理 班 級: 學(xué) 號: 姓 名: 指導(dǎo)老師: 黃 日 期: 11241128 目錄一設(shè)計題目3二. 目的與要求3三. 工具/準備工作 .3四. 系統(tǒng)分析3 4.1一階微分運算3 4.2二階微分運算.5 4.3景物細節(jié)對應(yīng)關(guān)系.6 4.4一階微分與二階微分的性質(zhì)與區(qū)別 .74.5擴展部分.8 4.6程序設(shè)計總框圖與流程圖.9 4.7 類聲明與核心算法程序代碼.10 五.實驗步驟.19 5.1圖像的讀入.19 5.2模版的選擇.19 5.3圖像銳化.20 5.4圖像的自動保存.20 六.測試與結(jié)論.21 七.課程設(shè)計總結(jié).25 八.參考

2、文獻.25 九.附錄.26 9.1 完整源代碼程序.26 9.2 人機交互界面圖.43 一 設(shè)計題目 圖像銳化處理二 目的與要求目的:n 圖像銳化的目的是加強圖像中景物的細節(jié)邊緣和輪廓。n 銳化的作用是使灰度反差增強。n 因為邊緣和輪廓都位于灰度突變的地方。所以銳化算法的實現(xiàn)是基于微分作用。要求:n 菜單式的人機界面。n 具有文件處理功能n 圖像銳化部分應(yīng)具有拉普拉斯算子和羅布特算子兩個模塊。拉普拉斯算子模塊再分4點與8點。三 工具準備工作在開始實驗前,應(yīng)回顧或復(fù)習(xí)相關(guān)內(nèi)容。需要一臺計算機,其中安裝有 Visual C+ 6 .0 、 Visual C+ 2005 、 Visual C+ 20

3、05 Express、等集成開發(fā)環(huán)境軟件。四 系統(tǒng)分析微分算法銳化從灰度變換曲線上可以得到,畫面逐漸由亮變暗時,其灰度值的變換是斜坡變化;當出現(xiàn)孤立點,一般是噪聲點,其灰度值的變化是一個突起的尖峰;若進入平緩變化的區(qū)域,則其灰度變化為一個平坦段;如果圖像出現(xiàn)一條細線,則其灰度變化是一個比孤立點略顯平緩的尖峰;當圖像由黑突變到亮,則其灰度變化是一個階躍。微分運算是求信號的變化率,由傅立葉變換的微分性質(zhì)可知,微分運算具有較強高頻分量作用3。實際應(yīng)用中,我們常采用一階微分運算和二階微分運算來對圖像進行銳化。4.1一階微分運算一階微分的計算公式非常簡單: 離散化之后的差分方程:n 單方向一階微分銳化1

4、 水平方向一階銳化(擴展)水平方向的銳化非常簡單,通過一個可以檢測出水平方向上的像素值的變化模板來實現(xiàn)。 2 垂直方向一階銳化(擴展)垂直銳化算法的設(shè)計思想與水平銳化算法相同,通過一個可以檢測出垂直方向上的像素值的變化模板來實現(xiàn)。 這種銳化算法需要進行后處理,以解決像素值為負的問題??梢垣@得類似浮雕的效果,可以獲得對邊緣的有方向提取。3 梯度銳化(擴展)圖象處理中最常用的微分方法是求梯度。對于圖象f(x, y), 它在點(x,y)處的梯度是一個矢量。微分運算一般用差分來代替。常用的差分形式有兩種: 1)GM(x,y)=|f(x,y)-f(x+1,y)|+|f(x,y)-f(x,y+1)| 2)

5、GM(x,y)=|f(x,y)-f(x+1,y+1)|+|f(x+1,y)-f(x,y+1)|利用差分運算時,圖象的最后一行和最后一列的象素的梯度無法求得,一般用前一行或前一列的梯度值近似代替。算出梯度后讓梯度圖象的灰度值g(x,y)等于該點的梯度幅度,即g(x,y)=GM(x,y)。n 無方向一階銳化 - 交叉微分4 交叉微分算法(羅布特算法)計算公式如下: 特點:算法簡單 Roberts邊緣檢測算子4.2二階微分運算二階微分一般指拉氏算子。拉氏算子是一個刻畫圖像變化的二階微分算子。它是線性算子,具有各向同步性和位移不變性。拉氏算子是點、線、邊界提取算子。通常圖像和對它實施拉氏算子后的結(jié)果組

6、合后產(chǎn)生一個銳化圖像。拉普拉斯銳化原理拉普拉斯算子是最簡單的各向同性微分算子,具有旋轉(zhuǎn)不變性,比較適用于改善因為光線的漫反射造成的圖像模糊1。其原理是,在攝像記錄圖像的過程中,光點將光漫反射到其周圍區(qū)域,這個過程滿足擴散方程: 經(jīng)過推導(dǎo),可以發(fā)現(xiàn)當圖像的模糊是由光的漫反射造成時,不模糊圖像等于模糊圖像減去它的拉普拉斯變換的常數(shù)倍。另外,人們還發(fā)現(xiàn),即使模糊不是由于光的漫反射造成的,對圖像進行拉普拉斯變換也可以使圖像更清晰2。拉普拉斯銳化的一維處理表達式是: 在二維情況下,拉普拉斯算子使走向不同的輪廓能夠在垂直的方向上具有類似于一維那樣的銳化效應(yīng),其表達式為: 對于離散函數(shù),拉氏算子定義為 其中

7、 類似的有 所以有 寫成模板系數(shù)形式即為Laplacian算子: 5 4領(lǐng)域拉普拉斯銳化 (4領(lǐng)域)它給出了同性的結(jié)果,這里再使用不同的系數(shù)將對角線方向加入到離散拉普拉斯算子定義中,可以得到如下:6 8領(lǐng)域拉普拉斯銳化 (8領(lǐng)域) 由于拉普拉斯是一種微分算子,它的應(yīng)用強調(diào)圖像中灰度的突變即降低灰度緩慢變化的區(qū)域,這將產(chǎn)生一幅把圖像中的淺灰色邊線和突變點疊加到暗背景中的圖像。將原始圖像和拉普拉斯圖像疊加在一起的方法可以保護拉普拉斯銳化處理的效果,同時又能復(fù)原背景信息,因此,記住拉普拉斯定義是很重要的。如果所使用的定義具有負的中心系數(shù),那么就必須將原始圖像減去經(jīng)拉普拉斯變換后的圖像,從而得到銳化的

8、結(jié)果,反之,如果拉普拉斯定義的中心系數(shù)為正,則原始圖像要加上經(jīng)拉普拉斯變換后的圖像2。故使用拉普拉斯算子對圖像增強的基本方法可以表示為下式: 7 高斯拉普拉斯銳化(擴展) 模板 -2,-4,-4,-4,2, -4,0,8,0,-4, -4,8,24,8,-4, -4,0,8,0,-4, -2,-4,-4,-4,2;4.3景物細節(jié)對應(yīng)關(guān)系1) 對于突變形的細節(jié),通過一階微分的極大值點,二階微分的過0點均可以檢測出來。 2)對于細線形的細節(jié),通過一階微分的過0點,二階微分的極小值點均可以檢測出來。 3)對于漸變的細節(jié),一般情況下很難檢測,但二階微分的信息比一階微分的信息略多。 4.4一階微分與二階

9、微分的性質(zhì)與區(qū)別圖像細節(jié)的灰度變化特性灰度漸變孤立點細線灰度躍變圖像細節(jié)的灰度分布特性平坦段如圖,我們看到一階微分和二階微分的區(qū)別:(1)一階微分處理通常會產(chǎn)生較寬的邊緣,二階微分處理得到的邊緣則細。二階微分處理對細節(jié)有較強的響應(yīng),如細線和孤立點。(2)一階微分處理一般時灰度階梯有較強的響應(yīng),二階微分處理對灰度級階梯變化產(chǎn)生雙響應(yīng)。(3)二階微分在圖像中灰度值變化相似時,對線的響應(yīng)要比對階梯強且點比線強。所以,對于突變形的細節(jié),通過一階微分的極大值點,二階微分的過0點均可以檢測出來。對于細線形的細節(jié),通過一階微分的過0點,二階微分的極小值點均可以檢測出來。 大多數(shù)應(yīng)用中,對圖像增強來說,二階微

10、分處理比一階微分好,因為形成細節(jié)的能力強,而一階微分處理主要用于提取邊緣。4.5擴展部分 梯度銳化,垂直方向一階銳化,水平方向一階銳化,高斯拉普拉斯銳化。這四部分的內(nèi)容在4.1和4.2里已有詳細介紹。4.6程序設(shè)計總框圖與流程圖4 總程序流程圖 (1)主函數(shù) (2)銳化子程序拉普拉斯結(jié)構(gòu)框圖:讀取圖片并將其送入緩沖區(qū)4領(lǐng)域8領(lǐng)域?qū)⒏膭拥臄?shù)據(jù)恢復(fù)到原數(shù)據(jù)區(qū)中拉普拉斯初始化拉普拉斯程序流程圖:其他部分的流程圖類似于上面的拉普拉斯框圖和流程圖,這里就不一一列出。4.7 類聲明與核心算法程序代碼一、聲明部分1.頭文件聲明:#include "stdafx.h"#include &q

11、uot;MyDIP.h"#include "MyDIPDoc.h"#include "MyDIPView.h"#include "math.h2.類的聲明:#pragma once#endif / _MSC_VER > 1000class CMyDIPView : public CScrollViewprotected:afx_msg void OnMenuitem32778();/羅布特銳化afx_msg void OnLapulasi();/拉普拉斯銳化afx_msg void OnLapulasi8();/八鄰域拉普拉斯銳

12、化afx_msg void OnLapulasi4();/四鄰域拉普拉斯銳化afx_msg void OnMenuczrh();/垂直方向一階銳化afx_msg void OnMenusprh();/水平方向一階銳化afx_msg void OnMenugslapulas();/高斯拉普拉斯銳化afx_msg void OnTiduruihua();/梯度銳化DECLARE_MESSAGE_MAP();二、核心算法程序代碼部分一.基本要求部分1.羅布特銳化:只能對2值圖像進行處理,如果圖像本身邊緣較細,可能造成信息的損失 for(i = 0; i < lHeight; i+) / 每列

13、for(j = 0; j < lWidth; j+) / 指向DIB第i行,第j個象素的指針lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 指向DIB第i+1行,第j+1個象素的指針lpSrc1 = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 2 - i) + j+1; / 指向DIB第i行,第j+1個象素的指針 lpSrc3 = (unsigned char*)lpDIBBits + lLineBytes * (lHeight -

14、 1 - i) + j + 1; / 指向DIB第i+1行,第j個象素的指針lpSrc2 = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 2 - i) + j; /計算梯度值 bTemp = abs(*lpSrc)-(*lpSrc1) + abs(*lpSrc3)-(*lpSrc2); / 判斷是否小于閾值 if (bTemp < 255) / 判斷是否大于閾值,對于小于情況,灰度值不變。 if (bTemp >= bThre) / 直接賦值為bTemp *lpSrc = bTemp; else/ 直接賦值為255*lpS

15、rc = 255; /最后還要處理一下圖像中最下面那行for(j = 0; j < lWidth; j+) /指向最下邊一行,第j個象素的指針 lpSrc = (unsigned char*)lpDIBBits + lLineBytes * 0 + j; /將此位置的象素設(shè)置為255,即白點*lpSrc=255;2.拉普拉斯銳化:for(i=0;i<h;i+) /列 for(j=0;j<w;j+) /為統(tǒng)計變量賦初始值 sum=0; /對于圖像的4個邊框的象素保持原灰度不變 if( j<(tem_w-1)/2) | j>(w-(tem_w+1)/2) | i<

16、;(tem_h-1)/2) | i>(h-(tem_h+1)/2) ) *(newbuf+i*dw+j)=*(oldbuf+i*dw+j); /對于其他的象素進行模板操作 else /將點(i,j)點作為模板的中心 for(m=i-(tem_h-1)/2);m<=i+(tem_h-1)/2);m+) for(n=j-(tem_w-1)/2);n<=j+(tem_w-1)/2);n+) /將以點(i,j)為中心,與模板大小相同的范圍內(nèi)的象素與模板對用位置的系數(shù) /進行相乘并線形疊加 sum+=*(oldbuf+m*dw+n)* tem(m-i+(tem_h-1)/2)*tem_

17、w+n-j+(tem_w-1)/2); /將結(jié)果乘上總的模板系數(shù) sum=(int)sum*xishu; /計算絕對值 sum = fabs(sum); /如果小于0,強制賦值為0 if(sum<0) sum=0; /如果大于255,強制賦值為255 if(sum>255) sum=255; /將計算的結(jié)果放到新的位圖的相應(yīng)位置 *(newbuf+i*dw+j)=sum; 四鄰域拉普拉斯銳化double tem9=0,-1,0, -1,5,-1, 0,-1,0; /設(shè)定模板系數(shù) double xishu = 1; /進行模板操作pDoc2->m_hDIB =Template(

18、pDoc2->m_hDIB,tem ,3,3, xishu);Invalidate(TRUE);void CMyDIPView:OnLapulasi8() CMyDIPDoc* pDoc3 = GetDocument();八鄰域拉普拉斯銳化double tem9=-1,-1,-1, -1,8,-1, -1,-1,-1; /設(shè)定模板系數(shù) double xishu = 1; /進行模板操作pDoc3->m_hDIB =Template(pDoc3->m_hDIB,tem ,3,3, xishu);Invalidate(TRUE);對圖像進行模板操作:為處理方便起見,模板的寬度和高

19、度都應(yīng)為奇數(shù) HDIB CTRH(HDIB hDIB,double * tem ,int tem_w,int tem_h,double xishu) /統(tǒng)計中間值 double sum; /指向圖像起始位置的指針 BYTE *lpDIB=(BYTE*):GlobalLock(HGLOBAL) hDIB);/指向象素起始位置的指針BYTE *pScrBuff =(BYTE*):FindDIBBits(char*)lpDIB);/獲取圖像的顏色信息 int numColors=(int) :DIBNumColors(char *)lpDIB); /如果圖像不是256色返回 if (numColor

20、s!=256) /解除鎖定 :GlobalUnlock(HGLOBAL) hDIB);/返回return(hDIB); /將指向圖像象素起始位置的指針,賦值給指針變量 BYTE* oldbuf = pScrBuff; /循環(huán)變量 int i,j,m,n;int w, h, dw;/獲取圖像的寬度w = (int) :DIBWidth(char *)lpDIB);/獲取圖像的高度h = (int) :DIBHeight(char *)lpDIB);/計算圖像每行的字節(jié)數(shù)dw = (w+3)/4*4; /建立一個和原圖像大小相同的25色灰度位圖 HDIB newhDIB=NewDIB(w,h,8)

21、; /指向新的位圖的指針BYTE *newlpDIB=(BYTE*):GlobalLock(HGLOBAL) newhDIB);/指向新的位圖的象素起始位置的指針 BYTE *destBuf = (BYTE*)FindDIBBits(char *)newlpDIB); /將指向新圖像象素起始位置的指針,賦值給指針變量 BYTE *newbuf=destBuf; /對圖像進行掃描/行 for(i=0;i<h;i+) /列 for(j=0;j<w;j+) /為統(tǒng)計變量賦初始值 sum=0; /對于圖像的4個邊框的象素保持原灰度不變 if( j<(tem_w-1)/2) | j&g

22、t;(w-(tem_w+1)/2) | i<(tem_h-1)/2) | i>(h-(tem_h+1)/2) ) *(newbuf+i*dw+j)=*(oldbuf+i*dw+j); /對于其他的象素進行模板操作 else /將點(i,j)點作為模板的中心 for(m=i-(tem_h-1)/2);m<=i+(tem_h-1)/2);m+) for(n=j-(tem_w-1)/2);n<=j+(tem_w-1)/2);n+) /將以點(i,j)為中心,與模板大小相同的范圍內(nèi)的象素與模板對用位置的系數(shù) /進行相乘并線形疊加 sum+=*(oldbuf+m*dw+n)* t

23、em(m-i+(tem_h-1)/2)*tem_w+n-j+(tem_w-1)/2); /將結(jié)果乘上總的模板系數(shù) sum=(int)sum*xishu; /計算絕對值 sum = sum+20; /如果小于0,強制賦值為0 if(sum<0) sum=0; /如果大于255,強制賦值為255 if(sum>255) sum=255; /將計算的結(jié)果放到新的位圖的相應(yīng)位置 *(newbuf+i*dw+j)=sum; /解除鎖定:GlobalUnlock(HGLOBAL)hDIB);/返回新的位圖的句柄 return(newhDIB);void CMyDIPView:OnMenuczr

24、h() / TODO: Add your command handler code hereCMyDIPDoc* pDoc3 = GetDocument();二.拓展部分1.梯度銳化1: 只能對2值圖像進行處理,如果圖像本身邊緣較細,可能造成信息的損失 for(i = 0; i < lHeight; i+) / 每列 for(j = 0; j < lWidth; j+) / 指向DIB第i行,第j個象素的指針lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 指向DIB第i+1行,第j個象

25、素的指針lpSrc1 = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 2 - i) + j; / 指向DIB第i行,第j+1個象素的指針 lpSrc2 = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j + 1; /計算梯度值 bTemp = abs(*lpSrc)-(*lpSrc1) + abs(*lpSrc)-(*lpSrc2); / 判斷是否小于閾值 if (bTemp < 255) / 判斷是否大于閾值,對于小于情況,灰度值不變。 if (bT

26、emp >= bThre) / 直接賦值為bTemp *lpSrc = bTemp; else/ 直接賦值為255*lpSrc = 255; /最后還要處理一下圖像中最下面那行for(j = 0; j < lWidth; j+) /指向最下邊一行,第j個象素的指針 lpSrc = (unsigned char*)lpDIBBits + lLineBytes * 0 + j; /將此位置的象素設(shè)置為255,即白點*lpSrc=255;2.垂直方向一階銳化double tem9=1,0,-1, 2,0,-2, 1,0,-1; /設(shè)定模板系數(shù) double xishu = 1; /進行模

27、板操作pDoc3->m_hDIB =Template(pDoc3->m_hDIB,tem ,3,3, xishu);Invalidate(TRUE);void CMyDIPView:OnMenusprh() / TODO: Add your command handler code hereCMyDIPDoc* pDoc3 = GetDocument();3.垂直方向一階銳化double tem9= 1,2,1, 0,0,0, -1,-2,-1; /設(shè)定模板系數(shù) double xishu = 1; /進行模板操作pDoc3->m_hDIB =Template(pDoc3-&g

28、t;m_hDIB,tem ,3,3, xishu);Invalidate(TRUE);void CMyDIPView:OnMenugslapulas() / TODO: Add your command handler code hereCMyDIPDoc* pDoc3 = GetDocument();4.高斯拉普拉斯銳化double tem25=-2,-4,-4,-4, 2, -4, 0, 8 ,0,-4, -4, 8,24,8,-4, -4, 0, 8, 0, -4, -2,-4,-4,-4,2; /設(shè)定模板系數(shù) double xishu = 1; /進行模板操作pDoc3->m_h

29、DIB =Template(pDoc3->m_hDIB,tem ,5,5, xishu);Invalidate(TRUE);void CMyDIPView:OnTiduruihua() CMyDIPDoc* pDoc4 = GetDocument();GradientSharp(pDoc4->m_hDIB);Invalidate(TRUE);五 實現(xiàn)步驟 5.1圖像的讀入此軟件可以對bmp格式的位圖進行銳化,在實驗前需要在指定位置選擇待銳化圖像,在此我們以下圖為例。5.2模版的選擇本次課設(shè)主要研究了3種模版下銳化效果的異同:對角鄰域模版、四鄰域模版、八鄰域模版,即羅布特、四鄰域拉普

30、拉斯和八鄰域拉普拉斯。主要擴展功能有梯度銳化、水平方向一階銳化、垂直方向一階銳化、高斯拉普拉斯銳化。打開工具欄中的“原圖”,會再彈出另一個框圖如下,左邊顯示的是被銳化前的原圖,右邊顯示的是基本功能區(qū)、拓展功能區(qū)和對象操作區(qū)??蛇x擇不同的模板進行操作。也可按下原窗口中“待處理操作對象選擇”按鍵來選擇不同的模板進行操作,效果是一樣的。5.3圖像銳化點擊基本功能區(qū)和拓展功能區(qū)中的按鍵能進行相應(yīng)的銳化,軟件開始自動銳化圖像,銳化結(jié)束后原窗口的圖也會相應(yīng)的變化,然后可與右邊原圖像比較。對象操作區(qū)可清除當前處理對象,然后在打開待處理對象進行銳化。5.4圖像的自動保存銳化結(jié)束后,如要保存,點可擊“保存”按鍵

31、,軟件將銳化后的圖像自動保存在指定位置。點擊“關(guān)于”,會彈出如下窗口。六 測試與結(jié)論一、 基本功能的測試與結(jié)論1、羅布特銳化處理:前后比對分析,羅伯特方法的結(jié)論是: 用4點進行差分,以求得梯度,方法簡單; 算子采用對角線方向相鄰兩像素之差近似梯度幅值檢測邊緣,是一種局部差分算子。檢測水平和垂直邊緣的效果好于斜向邊緣,定位精度高; 缺點是對噪聲較敏感,常用于不含噪聲的圖像邊緣點檢測。 2、四鄰域拉普拉斯銳化處理: 前后對比分析,四鄰域拉普拉斯方法的結(jié)論是: 用4點進行拉普拉斯算子處理,方法簡單; 當鄰域的中心像素灰度低于它所在的鄰域內(nèi)其他像素的平均灰度時,此中心像素的灰度被進一步降低,當鄰域的中

32、心像素灰度高于它所在的鄰域內(nèi)其他像素的平均灰度時,此中心像素的灰度被進一步提高。3、八鄰域拉普拉斯銳化處理 前后比對分析,八鄰域拉普拉斯方法的結(jié)論是: 用8點進行拉普拉斯算子處理,方法簡單; 當鄰域的中心像素灰度低于它所在的鄰域內(nèi)其他像素的平均灰度時,此中心像素的灰度被進一步降低,當鄰域的中心像素灰度高于它所在的鄰域內(nèi)其他像素的平均灰度時,此中心像素的灰度被進一步提高。二、 拓展功能的測試與結(jié)論 1、梯度銳化處理: 前后對比分析,梯度銳化方法的結(jié)論是: 用4點進行差分,以求得梯度,方法簡單。 算子采用垂直和水平方向相鄰兩像素之差近似梯度幅值檢測邊緣,是一種局部差分算子,定位精度高。 缺點和羅伯

33、特方法相同,就是對噪聲較敏感,常用于不含噪聲的圖像邊緣點檢測2、垂直方向一階銳化處理: 前后比對分析,垂直方向一階銳化方法的結(jié)論是: 對垂直方向的邊緣銳化效果較明顯,對水平方向的邊緣銳化效果不明顯; 垂直銳化算法的設(shè)計思想與水平銳化算法相同,通過一個可以檢測出垂直方向上的像素值的變化模板來實現(xiàn)。3、水平方向一階銳化處理: 對水平方向的邊緣銳化效果較明顯,對垂直方向的邊緣銳化效果不明顯; 水平方向的銳化非常簡單,通過一個可以檢測出水平方向上的像素值的變化模板來實現(xiàn)。4、高斯拉普拉斯銳化處理: 此方法銳化效果較差將高斯濾波和拉普拉斯邊緣檢測結(jié)合在一起,即log算子優(yōu)化而成的。先用高斯算子對圖像進行

34、平滑,然后采用拉普拉斯算子根據(jù)二階微分過零點來檢測圖像邊緣。七 課程設(shè)計總結(jié)測試與結(jié)論這次課程設(shè)計我明白了圖像銳化處理的基本原理和MFC設(shè)計界面部分程序的編寫和軟件操作,經(jīng)過最后對程序的理解,我對這次課程設(shè)計有了全方位的認識和理解,掌握了Visual C+ 6.0的windows基本編程功能和原理。 參考文獻1 Visual C+數(shù)字圖像處理/謝鳳英,趙丹培 北京電子工業(yè)出版社,20082 MFC編程技巧與范例詳解/曾凡鋒,苗雨 清華大學(xué)出版社,20083 面向?qū)ο蟪绦蛟O(shè)計(C+版)/董正言,張聰 清華大學(xué)出版社,2010九. 附錄9.1源程序代碼:/ MyDIPView.cpp : impl

35、ementation of the CMyDIPView class/#include "stdafx.h"#include "MyDIP.h"#include "MyDIPDoc.h"#include "MyDIPView.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/* 函數(shù)名稱:* GradientSharp() *參數(shù) :

36、* HDIB hDIB -待處理圖像的句柄* 返回值:* 無*功能:* 現(xiàn)圖像的梯度銳化*說明:* 只能對2值圖像進行處理,如果圖像本身邊緣較細,可能造成信息的損失*/void GradientSharp1(HDIB hDIB)/ 指向DIB的指針LPSTR lpDIB=(LPSTR) :GlobalLock(HGLOBAL)hDIB);/ 指向DIB象素指針LPSTR lpDIBBits;/ 找到DIB圖像象素起始位置lpDIBBits = :FindDIBBits(lpDIB); /獲取圖像的寬度LONG lWidth=:DIBWidth (char*)lpDIB); /獲取圖像的長度LO

37、NG lHeight=:DIBHeight (char*)lpDIB); / 閾值BYTEbThre = 2;/ 調(diào)用GradSharp()函數(shù)進行梯度板銳化/ 指向源圖像的指針unsigned char*lpSrc;unsigned char*lpSrc1;unsigned char*lpSrc2;/ 循環(huán)變量LONGi;LONGj;/ 圖像每行的字節(jié)數(shù)LONGlLineBytes;/ 中間變量BYTEbTemp;/ 計算圖像每行的字節(jié)數(shù)lLineBytes = WIDTHBYTES(lWidth * 8);/ 每行 for(i = 0; i < lHeight; i+) / 每列 f

38、or(j = 0; j < lWidth; j+) / 指向DIB第i行,第j個象素的指針lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 指向DIB第i+1行,第j個象素的指針lpSrc1 = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 2 - i) + j; / 指向DIB第i行,第j+1個象素的指針 lpSrc2 = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 -

39、i) + j + 1; /計算梯度值 bTemp = abs(*lpSrc)-(*lpSrc1) + abs(*lpSrc)-(*lpSrc2); / 判斷是否小于閾值 if (bTemp < 255) / 判斷是否大于閾值,對于小于情況,灰度值不變。 if (bTemp >= bThre) / 直接賦值為bTemp *lpSrc = bTemp; else/ 直接賦值為255*lpSrc = 255; /最后還要處理一下圖像中最下面那行for(j = 0; j < lWidth; j+) /指向最下邊一行,第j個象素的指針 lpSrc = (unsigned char*)l

40、pDIBBits + lLineBytes * 0 + j; /將此位置的象素設(shè)置為255,即白點*lpSrc=255; /解除鎖定:GlobalUnlock (HGLOBAL)hDIB);/* 函數(shù)名稱:* GradientSharp() *參數(shù) :* HDIB hDIB -待處理圖像的句柄* 返回值:* 無*功能:* 現(xiàn)圖像的羅布特銳化*說明:* 只能對2值圖像進行處理,如果圖像本身邊緣較細,可能造成信息的損失*/void GradientSharp(HDIB hDIB)/ 指向DIB的指針LPSTR lpDIB=(LPSTR) :GlobalLock(HGLOBAL)hDIB);/ 指向

41、DIB象素指針LPSTR lpDIBBits;/ 找到DIB圖像象素起始位置lpDIBBits = :FindDIBBits(lpDIB); /獲取圖像的寬度LONG lWidth=:DIBWidth (char*)lpDIB); /獲取圖像的長度LONG lHeight=:DIBHeight (char*)lpDIB); / 閾值BYTEbThre = 2;/ 調(diào)用GradSharp()函數(shù)進行梯度板銳化/ 指向源圖像的指針unsigned char*lpSrc;unsigned char*lpSrc1;unsigned char*lpSrc2;unsigned char*lpSrc3;/

42、循環(huán)變量LONGi;LONGj;/ 圖像每行的字節(jié)數(shù)LONGlLineBytes;/ 中間變量BYTEbTemp;/ 計算圖像每行的字節(jié)數(shù)lLineBytes = WIDTHBYTES(lWidth * 8);/ 每行 for(i = 0; i < lHeight; i+) / 每列 for(j = 0; j < lWidth; j+) / 指向DIB第i行,第j個象素的指針lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 指向DIB第i+1行,第j+1個象素的指針lpSrc1 = (unsigned char*)lpDIBBits + lLineBytes * (lHei

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論