均值濾波快速演算法

2021-07-22 04:23:23 字數 3838 閱讀 8574

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,二者的用途也很接近,就是把訊號抹平,消除雜訊。不過區別還是有的,後面再說。如果把他們兩個放在一起,看到名字就大概能猜出二者的不同,...