摘要:該文圍繞基于 DSP 的邊緣檢測與圖像銳化算法展開研究與實現。在邊緣檢測方面,實現了 Sobel、Roberts 和 Prewitt 三種算子算法。Sobel 算子通過計算水平和垂直方向的梯度并求和來檢測邊緣,對噪聲有一定抑制能力;Roberts 算子基于交叉差分計算梯度,計算簡單但對噪聲敏感;Prewitt 算子通過 3x3 模板計算梯度,對邊緣定位較準確。在圖像銳化方面,實現了 Laplace 算子的三種變體算法,包括標準 Laplace、8 鄰域 Laplace 和加權 Laplace。標準 Laplace 使用 4 鄰域模板,8 鄰域 Laplace 考慮了對角鄰域,加權 Laplace 則引入了銳化強度系數以增強銳化效果。這些算法均在 DSP 環境下實現,并針對 160×160 和 180×120 等不同尺寸的圖像進行處理,通過指針操作實現了高效的圖像處理,同時對處理結果進行了范圍限制以確保輸出在有效像素范圍內。實驗結果表明,這些算法能夠有效檢測圖像邊緣并增強圖像清晰度,為基于 DSP 的圖像處理應用提供了有力的算法支持。
關鍵詞:圖像銳化;邊緣檢測;加權處理
引??言
在數字圖像處理領域,邊緣檢測與圖像銳化是基礎且關鍵的技術,廣泛應用于計算機視覺、醫學影像等領域。邊緣作為圖像中像素值急劇變化的區域,是目標識別等高級處理的基礎;銳化則能增強圖像細節,提升視覺效果。隨著嵌入式與實時處理需求增長,在 DSP 上高效實現這些算法成為研究熱點。
DSP 憑借高速數據處理與實時性優勢,成為圖像處理重要平臺。工業檢測、智能監控等場景不僅要求算法精準,更對處理速度提出嚴格要求。經典邊緣檢測算子(如 Sobel、Roberts 等)與 Laplace 銳化算子雖理論成熟,但應用于 DSP 時需結合其體系結構優化,如利用并行處理能力、高效內存訪問模式提升效率。
本研究聚焦 DSP 平臺的邊緣檢測與銳化算法實現,分析改進經典算法,結合 DSP 硬件特性優化 Sobel、Prewitt 等邊緣算子及 Laplace 變體,通過實驗驗證算法有效性,為 DSP 在圖像處理中的應用提供技術支撐。
2、圖像銳化算法及實現
2.1 圖像銳化技術概述
圖像銳化是數字圖像處理中的關鍵技術,其核心目標是通過增強圖像中像素值的突變區域(即邊緣和細節),提升圖像的視覺清晰度和細節表現力。從信號處理的角度來看,圖像模糊本質上是圖像信號經過低通濾波的結果,而銳化則通過高通濾波或微分運算,對圖像的高頻成分(邊緣、紋理等)進行增強,抑制低頻成分(平滑區域)。
圖像銳化的核心是通過增強像素值的突變區域(邊緣與細節)提升圖像清晰度。本代碼基于拉普拉斯(Laplace)二階微分算子實現銳化,其原理是通過計算中心像素與鄰域像素的差值,突出灰度值的突變部分。拉普拉斯算子對圖像中的階躍邊緣和孤立點響應顯著。
在實際應用中,圖像銳化的目的主要體現在兩方面:一是改善圖像的視覺效果,使模糊的圖像變得清晰,便于人眼觀察,如老照片修復、醫學影像增強等;二是為后續的圖像分析任務(如目標識別、邊緣檢測、特征提取)提供更優質的輸入,避免因圖像模糊導致的特征丟失或誤判。例如,在工業質檢中,銳化可幫助更精準地識別零件表面的缺陷邊緣。
本文主要是討論拉普拉斯銳化技術,分別介紹四領域拉普拉斯銳化與八領域拉普拉斯銳化以及加權拉普拉斯銳化。
2.2 四領域拉普拉斯銳化
該方法采用4鄰域模板,中心系數為 5,上下左右鄰域系數為 -1
對圖像內部像素(非邊緣區域),通過公式(3)計算銳化值,并將結果限制在 [0, 255]范圍內。
對于圖像邊緣部分如圖像四周像素(第一行、最后一行、最左列、最右列)直接保留原值,避免越界錯誤。
2.3八鄰域拉普拉斯銳化
該方法采用8鄰域模板:擴展至 8 鄰域,中心系數為 8,周圍 8 個方向系數均為 - 1,模板為:
針對對角鄰域影響,采用公式(5)處理:
相比4鄰域,8鄰域對各方向邊緣的增強更均衡,尤其適合紋理豐富的圖像。
2.4 加權拉普拉斯銳化
該方法引入銳化強度系數alpha,通過加權融合原圖與拉普拉斯算子輸出,其中alpha可調節銳化程度,alpha>1時增強效果更明顯,同時通過范圍限制避免像素值溢出。
2.5 DSP實驗程序
/*======== 頭文件引用===========*/
#include "stdio.h"
/*============= 工作變量定義======*/
unsigned char *pr_n; //指針定義
unsigned char *pr_s; //指針定義//說明:定義數據存放變量
#pragma DATA_SECTION(IMG,"data");
int IMG[30000];#pragma DATA_SECTION(Original_IMG,"data");
unsigned char Original_IMG[30000];#pragma DATA_SECTION(Sharp_IMG,"data");
unsigned char Sharp_IMG[30000];void IMG_Sharp_Laplace();
void IMG_Sharp_Laplace_8Neighbor();
void IMG_Sharp_Laplace_Weighted();
int CoefArray[9]={1,1,1,1,1,1,1,1,1};/*================= 主程序 ================*/
main()
{ long n;int imgH,imgW;int *ptr;imgH=180; //圖像高與寬,因為數據文件中的圖像是180X120像素的imgW=120; /*=========== 初始化 ==========*///1 把圖像數據從IMG中移到Noise_IMG數組中ptr=IMG;pr_n=Original_IMG;for (n=0;n<imgH*imgW;n++)*pr_n++=*ptr++;//說明:在此暫停,可看到噪聲圖像 //指針指向數組pr_n=Original_IMG;pr_s=Sharp_IMG;//2 調用子程序,進行彩色圖像變換成灰度圖像while (1){ // IMG_Sharp_Laplace(pr_n,pr_s,imgW,imgH);//IMG_Sharp_Laplace_8Neighbor(pr_n,pr_s,imgW,imgH);IMG_Sharp_Laplace_Weighted(pr_n,pr_s,imgW,imgH);//說明:上面子程序執行后,在此暫停,可看平滑后的圖像 }//說明:在此暫停,可看變換后的灰度圖像
/*============== 子程序 =============*/
void IMG_Sharp_Laplace
( unsigned char *F, /* 輸入原圖像 */unsigned char *G, /* 輸出的銳化圖像 */int cols, int rows /* 圖像的寬度與高度 */
)
{ //定義局部變量unsigned char *ptr, *pp, *newpp;int tmpNum,i, x, y;//圖像四周的像素不進行銳化,等于原值 for (x=0; x< cols -1; x++) //處理第一行的像素G[x] = F[x];//處理最后一行的像素newpp = G + (rows-1)* cols; //指針指向銳化圖像pp = F+ (rows-1)* cols; //指針指向原圖像 for (x=0; x< cols -1; x++) * newpp++ = * pp++;//處理最左邊一列的像素newpp = G; //指針指向銳化圖像pp = F; //指針指向原圖像 for (y=0; y< rows -1; y++) {* newpp = * pp; newpp+=cols; pp+=cols; //指針偏移到下一行像素的位置}//處理最右邊一列的像素newpp = G+cols; //指針指向銳化圖像pp = F+cols; //指針指向原圖像 for (y=0; y< rows -1; y++) {* newpp = * pp; newpp+=cols; pp+=cols; //指針偏移到下一行像素的位置}//采用循環的方式對圖像中的每個像素進行銳化for (y=1; y< rows -1; y++)for (x=1; x<cols -1; x++){newpp = G + y* cols +x; //指針指向銳化圖像pp = F + y* cols +x; //指針指向原圖像 tmpNum = 5*(*pp); //(x,y)處像素的灰度值tmpNum-=*(pp-cols); //(x,y)處上方像素的灰度值tmpNum-=*(pp-1); //(x,y)處左邊像素的灰度值tmpNum-=*(pp+1); //(x,y)處右邊像素的灰度值tmpNum-=*(pp+cols); //(x,y)處下方像素的灰度值//檢測數據是否溢出,且將平均值賦給平滑圖像if (tmpNum > 255)*newpp=255;else if (tmpNum<0)*newpp=0;else*newpp=tmpNum; }
} //程序結束void IMG_Sharp_Laplace_Weighted(unsigned char *F, /* 輸入原圖像 */unsigned char *G, /* 輸出的銳化圖像 */int cols, int rows /* 圖像的寬度與高度 */
)
{unsigned char *ptr, *pp, *newpp;int tmpNum, x, y;float alpha = 1.5f; // 銳化強度系數int laplacian;// 處理圖像邊緣像素,保持原值for (x = 0; x < cols; x++) {G[x] = F[x]; // 第一行G[(rows-1)*cols + x] = F[(rows-1)*cols + x]; // 最后一行}for (y = 0; y < rows; y++) {G[y*cols] = F[y*cols]; // 最左列G[y*cols + cols-1] = F[y*cols + cols-1]; // 最右列}// 處理內部像素for (y = 1; y < rows - 1; y++) {for (x = 1; x < cols - 1; x++) {newpp = G + y*cols + x;pp = F + y*cols + x;// 拉普拉斯算子計算laplacian = 4 * (*pp) - *(pp-cols) - *(pp-1) - *(pp+1)- *(pp+cols); // 帶權重的銳化:原圖 + alpha * 拉普拉斯值tmpNum = (int)(*pp + alpha * laplacian);*newpp = (unsigned char)tmpNum;}}
}
void IMG_Sharp_Laplace_8Neighbor(unsigned char *F, /* 輸入原圖像 */unsigned char *G, /* 輸出的銳化圖像 */int cols, int rows /* 圖像的寬度與高度 */
)
{unsigned char *ptr, *pp, *newpp;int tmpNum, x, y;// 處理圖像邊緣像素,保持原值for (x = 0; x < cols; x++) {G[x] = F[x]; // 第一行G[(rows-1)*cols + x] = F[(rows-1)*cols + x]; // 最后一行}for (y = 0; y < rows; y++) {G[y*cols] = F[y*cols]; // 最左列G[y*cols + cols-1] = F[y*cols + cols-1]; // 最右列}// 處理內部像素for (y = 1; y < rows - 1; y++) {for (x = 1; x < cols - 1; x++) {newpp = G + y*cols + x;pp = F + y*cols + x;// 八鄰域拉普拉斯算子:中心系數8,八方向系數-1tmpNum = 8 * (*pp) - *(pp-cols-1) - *(pp-cols)- *(pp-cols+1)- *(pp-1)- *(pp+1) - *(pp+cols-1)- *(pp+cols) - *(pp+cols+1);*newpp = (unsigned char)tmpNum;}}
}
3、邊緣檢測算法及實現
3.1 邊緣檢測技術概述
邊緣檢測是圖像處理的核心技術,旨在識別圖像中像素值劇烈變化的區域,對應物體邊界或場景深度突變。其本質是通過灰度梯度的局部極值表征邊緣,為目標識別、圖像分割等任務提供結構信息,同時實現數據降維。經典算法分為一階與二階導數兩類:一階算子如 Roberts、Prewitt 和 Sobel,通過梯度計算突出邊緣,其中 Sobel 算子因中心加權設計對噪聲更魯棒;二階算子以拉普拉斯為代表,通過二階導數檢測突變點,但常與高斯濾波結合(如 LOG 算子)。其原理如下。
圖像f(x,y)在點(x,y)處的梯度是一個二維向量:
在離散域中,偏導數通常通過差分近似計算。一階導數算子通過設計卷積模板來估計梯度,模板的選擇直接影響邊緣檢測的精度和抗噪性。
隨著技術發展,深度學習驅動的邊緣檢測(如 HED)通過端到端訓練提升復雜場景精度,多尺度分析與自適應閾值方法也增強了算法魯棒性。該技術廣泛應用于醫學影像(器官邊界提取)、工業質檢(缺陷檢測)、自動駕駛(道路識別)等領域。當前挑戰包括噪聲與紋理干擾、弱邊緣漏檢及實時性需求,未來研究將聚焦深度學習與傳統算法融合、輕量化模型設計及跨模態邊緣感知。
本文主要是討論基于一階導數計算梯度,共實現了Sobel、Roberts與Prewitt三個算子。
?
3.2 Sobel算子
Sobel 算子采用兩個 3×3 模板分別計算水平和垂直方向的梯度分量。其水平梯度模板Gx和垂直梯度模板Gy分別為:
該模板設計特點在于對中心像素的鄰域進行加權,增強了邊緣響應的同時抑制了部分噪聲。最終梯度幅值通常采用絕對值之和近似:
3.3 Roberts算子
Roberts 算子是最早提出的邊緣檢測算子之一,基于 2×2 鄰域的交叉差分計算梯度。 其梯度分量計算公式為:
梯度幅值同樣采用絕對值之和:
Roberts 算子計算簡單,但僅考慮 2×2 鄰域,對邊緣的定位精度較低,且對噪聲敏感。
3.4 Sobel算子
Prewitt 算子與 Sobel 算子類似,采用 3×3 模板計算梯度,但未對中心像素進行加權。其水平和垂直梯度模板分別為:
Prewitt 算子的計算復雜度與 Sobel 相近,但由于未對中心像素加權,其邊緣響應強度略低于 Sobel 算子。
3.5 DSP實驗程序
/*======== 頭文件引用===========*/
#include "stdio.h"
/*============= 工作變量定義======*/
unsigned char *pSource; //指針定義
unsigned char *pNew; //指針定義
int *pIMG;//說明:定義數據存放變量
#pragma DATA_SECTION(IMG,"data");
int IMG[30000];#pragma DATA_SECTION(sourceIMG,"data");
unsigned char sourceIMG[30000];#pragma DATA_SECTION(newIMG,"data");
unsigned char newIMG[30000];void IMG_sobel();
void IMG_Roberts();
void IMG_Prewitt();///
//使用說明:
// 1. 本程序可以在Simulator下運動;
// 2. 程序編譯、鏈接、加載成功后,先
// 執行File/data/load,將要進行顏色轉換的圖像數據從Gray_Lena160x160.dat
// 加載入數據存儲器存儲地址RGB_IMG中
// 3. 數據加載成功后,再Debug/Go Main, 一步一步運行程序
////*================= 主程序 ================*/
main()
{ int n,imgH,imgW;/*=========== 初始化 ==========*/imgH=160; //圖像的高與寬,因為數據文件所對應的圖像高與寬就是160,160imgW=160; //指針指向數組 pIMG=IMG;pSource=sourceIMG;for (n=0;n<imgH*imgW;n++)*pSource++=*pIMG++; pSource=sourceIMG;pNew=newIMG; //說明:在此暫停,可看原始RGB彩色圖像 while (1){ //IMG_sobel(pSource,pNew,imgW,imgH);// IMG_Roberts(pSource,pNew,imgW,imgH); IMG_Prewitt(pSource,pNew,imgW,imgH); } //說明:在此暫停,可看變換后的灰度圖像 }
void IMG_sobel
(const unsigned char *restrict in, /* Input image data */unsigned char *restrict out, /* Output image data */int cols, int rows /* Image dimensions */
)
{int H, O, V, i;int i00, i01, i02;int i10, i12;int i20, i21, i22;int w = cols;/* -------------------------------------------------------------------- *//* Iterate over entire image as a single, continuous raster line. *//* -------------------------------------------------------------------- */for (i = 0; i < cols*(rows-2) - 2; i++){/* ---------------------------------------------------------------- *//* Read in the required 3x3 region from the input. *//* ---------------------------------------------------------------- */i00=in[i ]; i01=in[i +1]; i02=in[i +2];i10=in[i+ w]; i12=in[i+ w+2];i20=in[i+2*w]; i21=in[i+2*w+1]; i22=in[i+2*w+2];/* ---------------------------------------------------------------- *//* Apply horizontal and vertical filter masks. The final filter *//* output is the sum of the absolute values of these filters. *//* ---------------------------------------------------------------- */H = - i00 - 2*i01 - i02 + i20 + 2*i21 + i22;V = - i00 + i02- 2*i10 + 2*i12- i20 + i22;O = abs(H) + abs(V);/* ---------------------------------------------------------------- *//* Clamp to 8-bit range. The output is always positive due to *//* the absolute value, so we only need to check for overflow. *//* ---------------------------------------------------------------- */if (O > 255) O = 255;/* ---------------------------------------------------------------- *//* Store it. *//* ---------------------------------------------------------------- */out[i + 1] = O;}
}
/** 函數名稱:IMG_Roberts* 功能:使用羅伯特算子實現圖像邊緣檢測* 參數:* const unsigned char *restrict in - 輸入圖像數據* unsigned char *restrict out - 輸出圖像數據* int cols, int rows - 圖像尺寸*/
void IMG_Roberts(const unsigned char *restrict in, /* 輸入圖像數據 */unsigned char *restrict out, /* 輸出圖像數據 */int cols, int rows /* 圖像尺寸 */
)
{int Gx, Gy, G;int i, j;int w = cols;// 遍歷圖像,處理每個像素點(邊緣像素除外)for (j = 0; j < rows - 1; j++) {for (i = 0; i < cols - 1; i++) {// 計算當前位置的梯度Gx = in[j*w + i] - in[(j+1)*w + (i+1)]; // 水平梯度Gy = in[(j+1)*w + i] - in[j*w + (i+1)]; // 垂直梯度// 計算梯度幅值(通常使用絕對值之和)G = abs(Gx) + abs(Gy);// 確保結果在0-255范圍內if (G > 255) G = 255;// 存儲結果out[j*w + i] = G;}}
}
/** 函數名稱:IMG_Prewitt* 功能:使用普瑞維特算子實現圖像邊緣檢測* 參數:* const unsigned char *restrict in - 輸入圖像數據* unsigned char *restrict out - 輸出圖像數據* int cols, int rows - 圖像尺寸*/
void IMG_Prewitt(const unsigned char *restrict in, /* 輸入圖像數據 */unsigned char *restrict out, /* 輸出圖像數據 */int cols, int rows /* 圖像尺寸 */
)
{int Gx, Gy, G;int i, j;int w = cols;// 遍歷圖像,處理每個像素點(邊緣像素除外)for (j = 1; j < rows - 1; j++) {for (i = 1; i < cols - 1; i++) {// 計算水平梯度分量Gx = (in[(j-1)*w + (i-1)] + in[j*w + (i-1)] + in[(j+1)*w + (i-1)]) - (in[(j-1)*w + (i+1)] + in[j*w + (i+1)] + in[(j+1)*w + (i+1)]);// 計算垂直梯度分量Gy = (in[(j-1)*w + (i-1)] + in[(j-1)*w + i] + in[(j-1)*w + (i+1)]) - (in[(j+1)*w + (i-1)] + in[(j+1)*w + i] + in[(j+1)*w + (i+1)]);// 計算梯度幅值(通常使用絕對值之和)G = abs(Gx) + abs(Gy);// 確保結果在0-255范圍內if (G > 255) G = 255;// 存儲結果out[j*w + i] = G;}}
4、實驗結果與分析
4.1 操作步驟
1設置ccs為軟件仿真環境
打開setup ccs2,點擊clear,選擇family為c64xx,platform為simulator,endianness為little,在選擇DM642 Device Simulator…點擊import,點擊save and quit,如下圖所示,啟動CCS。
雙擊桌面上CCS 2 ('C6000)圖標,運行CCS。
2、編譯、鏈接程序:執行菜單Project/Rebuild All,匯編結果在將匯編信息輸出窗口中給出。編譯后將在Bebug目錄中產生一個ImgSmooth.out文件。
3、加載程序:執行File/Load Program,選擇ImgSmooth.out并打開,即將可執行文件加載到DSP軟件仿真器simulator中,此時CCS將自動打開一個反匯編窗口。
4、將圖像的數據從 dat 文件讀入到內存:執行 File/data/load,將要進行顏色轉換的圖像數據 從 Data160x160.dat (說明:*.dat 格式,內部存放了某圖像各像素的灰度值)文件中加載入到數據存儲器,即在彈出的窗口中輸入存儲地址 IMG 與數據的長度,如下圖所示。
5、運行程序:執行Debug/Run。為了便于觀看試驗前后的結果,可以在程序中設置斷點,采用單步執行的方法運行程序。
4.2 實驗結果
4.2.1拉普拉斯銳化
顯示出銳化之前的圖像:執行 View/Graph/Image,在彈出的對話框中選擇顏色類型為 RGB,并輸入 RGB 彩色圖像三個通道數據的地址,以及圖像顯示格式(顯示幾行、每行幾像素)等內容。
圖4.1 銳化之前的圖像
顯示銳化之后的圖像:執行 View/Graph/Image,在彈出的對話框中選擇顏色類型為 RGB,并輸入灰度圖像據的地址,以及圖像顯示格式(顯示幾行、每行幾像素)等內容。
圖4.2 四領域拉普拉斯銳化的圖像
圖4.3 八領域拉普拉斯銳化的圖像
圖4.4 加權拉普拉斯銳化的圖像
4.2.2 邊緣檢測結果
圖4.5 原圖像
如下圖所示為邊緣檢測結果
圖4.6 sobel算子檢測圖像
圖4.7 Roberts算子檢測圖像
圖4.8 Prewitt算子檢測圖像
4.3 實驗結果分析
在標準測試圖像上的實驗表明,三種拉普拉斯銳化算法呈現出顯著差異。標準 4 鄰域拉普拉斯對水平 / 垂直邊緣增強效果突出,但對角方向細節提升有限,可能產生 “棋盤格” 偽影;八鄰域拉普拉斯通過引入對角像素信息,有效消除了方向性偏差,使各方向邊緣增強更均衡,但同時也放大了噪聲;加權拉普拉斯通過調整系數 α(實驗中 α=1.5 時效果最優),在增強邊緣的同時保留了更多原圖細節,視覺效果更自然。在 DSP 平臺上,八鄰域算法較 4 鄰域計算量增加;加權拉普拉斯因引入浮點運算,耗時增加,但靈活性更高,適用于醫學影像等對細節保留要求高的場景。
對比 Sobel、Roberts 和 Prewitt 算子的邊緣檢測效果,Roberts 算子因僅考慮 2×2 鄰域,邊緣定位精度最低,易產生斷裂邊緣,尤其對噪聲敏感,但計算速度最快;Prewitt 算子通過 3×3 模板平滑噪聲,邊緣連續性優于 Roberts,但因未對中心像素加權,邊緣響應強度略弱于 Sobel;Sobel 算子在邊緣完整性、定位精度與抗噪性間取得最佳平衡。在紋理復雜區域(如 Lena 圖像的頭發部分),Sobel 和 Prewitt 能檢測到更多細節,而 Roberts 則出現明顯漏檢。實驗進一步表明,三種算子的邊緣寬度均為 1 像素,但 Sobel 的邊緣更接近真實物體邊界,誤檢率較 Prewitt 低。
5、小結
通過對拉普拉斯銳化與經典邊緣檢測算子的設計實現,驗證了算法在 DSP 平臺的有效性。拉普拉斯銳化中,八鄰域算子對圖像的紋理增強效果顯著,相比標準4鄰域算法,其邊緣梯度保留率提升,而加權拉普拉斯(α=1.5)在圖像中使邊界對比度。邊緣檢測實驗表明,Sobel 算子在 160×160 像素圖像中,較 Prewitt 算子提升檢測精度,且抗噪性優于 Roberts算子。通過這次設計得到了很多收獲和體會。第一提高了綜合運用所學知識的能力。第二增強了根據課程需要選學參考資料查閱手冊圖表和文獻資料的自學能力。通過獨立思考深入研究有關問題學會自己分析解決問題的方法。第三通過實際方案的分析比較設計計算元件選取安裝調試等環節初步掌握了簡單使用ccs設計方法。第四在這次設計過程中光有理論知識是不夠的還必須懂一些實踐中的知識。所以在設計的實踐中比較常用的儀器的使用方法提高了動手能力。第五培養了嚴謹的工作作風和科學態度。在這次設計過程中我對仿真軟件ccs等軟件有了更進一步的了解。
參考文獻
[1]岡薩雷斯, 伍茲. 數字圖像處理(第三版)[M]. 北京: 電子工業出版社. 2011. 06. 39 – 91.
[2]康曉東. 醫學圖像信號變換與壓縮[M]. 北京: 北京清華大學出版社. 2004.
[3]余英漢, 蔡漢添, 謝勝利. 信號處理新方法導論[M]. 北京: 清華大學出版社. 2004. ?
[4]王永良, 陳輝, 彭應寧, 萬群. 空間譜估計理論與算法[M]. 北京: 清華大學出版社. 2004. ?
[5]李建平. 小波分析與信號處理理論、應用及軟件實現[M]. 重慶: 重慶出版社. 1997. ?
[6]?W.?K.?Pratt,?Digital?Image?Processing.?New?York:?Wiley,1991.?
[7]?G.?R.?Arce,?N.?C.?Gallagher?and?T.?Nodes,?“Median?filters:Theory?and?applica?tions,”?in?Advances?in?ComputerVision?and?Image?Processing,?Greenwich,?CT:?JAI,?1986.?