1.概述
在影象處理中,在進行如邊緣檢測這樣的進一步處理之前,通常需要首先進行一定程度的降噪。中值濾波是一種非線性數字濾波器技術,經常用於去除影象或者其它訊號中的雜訊。這個設計思想就是
檢查輸入訊號中的取樣並判斷它是否代表了訊號,使用奇數個取樣
組成的觀察窗實現這項功能。觀察窗口中的數值進行
排序,位於觀察窗中間的中值作為輸出。然後,丟棄最早的值,取得新的取樣,重複上面的計算過程。中值濾波是影象處理中的乙個常用步驟,它對於斑點雜訊和椒鹽雜訊來說尤其有用。儲存邊緣的特性使它在不希望出現邊緣模糊的場合也很有用。
1.1中值濾波快速演算法
很多人提出了各種中值濾波的快速演算法,其共同特點是只考慮滑動視窗中移入和移出的資料,避免了傳統演算法中因排序所需的大量資料比較,從而較大地提高了速度。本文從另乙個角度提出了一種快速演算法,考慮的物件是單個滑
動窗內的畫素。具體步驟如下:
(1)
x考慮待處理的視窗內畫素為
i=,加權窗為
wi= x
。對中心畫素
c進行比較,將視窗內的畫素分為小於、等於和大於
xc3類
[3],並加上相應權值來統計每一類的個數分別記為
left
、center
和right
。把小於和大於
xc的畫素分別放入陣列
left
和right
。例如x3則
left=left+w3
,並加入w3個
x3到陣列
left[m]
、left[m+1]
、直到left[m+ w3-1],
令m=left
,取下乙個畫素重複以
上步驟,取完為止。
(2)比較
left
和right x
,如兩者相等則中值為中心畫素c。
(3)
|left-right|若
r x,則中值為中心畫素c。
(4)
|left-right|>cente若r
,則分為
和left>right right>left
兩種情況。
以left>right
為例, x
說明中值在小於
c的這一類中,即
在陣列left[left]中。
計算差值
△=left-right-center
。表示中值就是陣列
left[left]
中最大的△個數的中值。計算
index=(
△+1)/2.
表示中值就是
left[left]
中第index
大這個數
(right>left )
情況下分析類似
。(5)
最後對left[left]
或right[right]
進行區域性排序,排序到第
index
個大小時結束。
流程圖如下:
2除錯
2. 1
中值濾波快速演算法
測試結果:
根據測試,處理同樣一副椒鹽雜訊影象,與一般的中值濾波方法相比,採用3*3的濾波視窗,本文的中值濾波的快速演算法在時間上大約可以縮短一半,而對於更大的濾波視窗來說,視窗越大採用本文的方法實驗結果越明顯。由此可見,本中值濾波在實際應用中可以更為快速的解決問題。
椒鹽雜訊影象濾波:
高斯影象濾波:
ccs**:
#include
#include
#include"img_thr_le2min.h"
#define imagewidth
256#define imageheight 256
#define uint8
unsigned char
unsigned char grey[imageheight][imagewidth];
void readimage(char *cfilename);
void bmpdatapart(file* fpbmp);
void fastmiddle();
uint8 getmedianlocalsort(uint8 *array,uint8 length,uint8 index,int type);
void main()
void readimage(char *cfilename)
}
void bmpdatapart(file* fpbmp)
}
}
void fastmiddle()
else if(grey[k][l]
else
centernum++;
}
if(leftnum == rightnum)
continue;//grey[i][j]=x;
else
if(abs(leftnum-rightnum) < centernum)
continue;//grey[i][j]=x;
else
if(leftnum>rightnum)
else
}
}
}
}
uint8 getmedianlocalsort(uint8 *array,uint8 length,uint8 index,int type)
}
}
return array[index-1];
}
if(type==2)
}
}
return array[index-1];
}
return -1;
}
iOS 快速演算法
設要排序的陣列是mutablearray物件,首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一次快速排序。步驟講解 1 設定兩個變數i,j,排序開始時i 0,就j mutablearray.count 1 2 設...
Newman快速演算法(fast greedy)
newman快速演算法實際上是基於貪婪演算法思想的一種凝聚演算法。貪婪演算法是一種在每一步選擇中都採取在當前狀態下最好或最優 即最有利 的選擇,從而希望導致結果是最好或最優的演算法。社群發現 community detection 演算法用來發現網路中的社群結構,也可以視為一種廣義的聚類演算法。基於...
中值濾波VS 均值濾波
如果不是演算法中用到了median filter,恐怕我還不沒有意識到這兩個有聯絡又有區別的概念。中值濾波是median filter,均值濾波是mean filter,二者的用途也很接近,就是把訊號抹平,消除雜訊。不過區別還是有的,後面再說。如果把他們兩個放在一起,看到名字就大概能猜出二者的不同,...