基於MATLAB的中值濾波算法實現

2021-01-14 開源FPGA

在實時圖像採集中,不可避免的會引入噪聲,尤其是幹擾噪聲和椒鹽噪聲,噪聲的存在嚴重影響邊緣檢測的效果,中值濾波是一種基於排序統計理論的非線性平滑計數,能有效平滑噪聲,且能有效保護圖像的邊緣信息,所以被廣泛用於數字圖像處理的邊緣提取,其基本原理是把數字圖像或數字序列中的一點的值用該點鄰域內所有的點排序後的中值來代替。

中值濾波對椒鹽噪聲有良好的濾除作用,特別是在濾除噪聲的同時,能夠保護信號的邊緣,使之不被模糊。這些優良特性是線性濾波方法所不具有的。而且,中值濾波的算法比較簡單,也易於用硬體實現。這篇我們先用MATLAB來實現中值濾波。

中值濾波方法是,對待處理的當前像素,選擇一個模板3x3、5x5或其他,這裡選擇3x3矩陣,該模板為其鄰近的若干個像素組成,對模板的像素由小到大進行排序,再用模板的中值來替代原像素的值的方法。

排序算法示意圖

當我們使用3x3窗口後獲取領域中的9個像素,就需要對9個像素值進行排序,為了提高排序效率,排序算法思想如圖所示。

(1)對窗內的每行像素按降序排序,得到最大值、中間值和最小值。

(2)把三行的最小值即第三列相比較,取其中的最大值。

(3)把三行的最大值即第一列相比較,取其中的最小值。

(4)把三行的中間值即第二列相比較,再取一次中間值。

(5)把前面的到的三個值再做一次排序,獲得的中值即該窗口的中值。 

sort排序函數

sort(A)若A可以使矩陣或行列向量,默認都是對A進行升序排列。

sort(A)是默認的升序,而sort(A,'descend')是降序排序。
sort(A)若A是矩陣,默認對A的各列進行升序排列
sort(A,dim)
dim=1時相當於sort(A)

dim=2時表示對矩陣A中的各行元素升序排列

sort(A, dim, 'descend』)則對矩陣的每行進行降序排列

MATLAB Median Filter代碼實現

1 %RGB_YCbCr
2 clc;
3 clear all;
4 close all;
5
6 RGB_data = imread('lena.jpg');%
7
8 R_data =    RGB_data(:,:,1);
9 G_data =    RGB_data(:,:,2);
10 B_data =    RGB_data(:,:,3);
11
12 %imshow(RGB_data);
13
14 [ROW,COL, DIM] = size(RGB_data); 15
16 Y_data = zeros(ROW,COL);
17 Cb_data = zeros(ROW,COL);
18 Cr_data = zeros(ROW,COL);
19 Gray_data = RGB_data;
20
21 for r = 1:ROW 22     for c = 1:COL
23         Y_data(r, c) = 0.299*R_data(r, c) + 0.587*G_data(r, c) + 0.114*B_data(r, c);
24         Cb_data(r, c) = -0.172*R_data(r, c) - 0.339*G_data(r, c) + 0.511*B_data(r, c) + 128;
25         Cr_data(r, c) = 0.511*R_data(r, c) - 0.428*G_data(r, c) - 0.083*B_data(r, c) + 128;
26    end
27 end 28
29 Gray_data(:,:,1)=Y_data;
30 Gray_data(:,:,2)=Y_data;
31 Gray_data(:,:,3)=Y_data;
32
33 figure;
34 imshow(Gray_data);
35
36 %Median Filter
37 imgn = imnoise(Gray_data,'salt & pepper',0.02); 38
39 figure;
40 imshow(imgn);
41
42
43 for r = 2:ROW-1
44     for c = 2:COL-1
45         median3x3 =[imgn(r-1,c-1)    imgn(r-1,c) imgn(r-1,c+1)
46                     imgn(r,c-1)      imgn(r,c)      imgn(r,c+1)
47                     imgn(r+1,c-1)      imgn(r+1,c) imgn(r+1,c+1)];
48         sort1 = sort(median3x3, 2, 'descend');
49         sort2 = sort([sort1(1), sort1(4), sort1(7)], 'descend');
50         sort3 = sort([sort1(2), sort1(5), sort1(8)], 'descend');
51         sort4 = sort([sort1(3), sort1(6), sort1(9)], 'descend');
52         mid_num = sort([sort2(3), sort3(2), sort4(1)], 'descend');
53         Median_Img(r,c) = mid_num(2);
54    end
55 end
56
57 figure;
58 imshow(Median_Img);

處理前後比較

Gray lena

加入椒鹽噪聲後的lena

對加入椒鹽噪聲後進行中值濾波的lena

可以看出,中值濾波對椒鹽噪聲的濾除效果真是非常的好。光看我處理後圖圖片可能看不出太明顯對比,有興趣的朋友可以自己嘗試下。這裡MTALAB的排序部分基本是是按照排序算法一步步來的,完全符合FPGA實現的思路,所以說掌握算法的基礎原理和Verilog自己就可以嘗試用FPGA實現了。

這裡需要強調的一下是這樣的濾波對圖像的邊緣沒有進行處理,這是因為我們在求取均值或中值時,生成的3x3矩陣,第一行的像素並沒有處理,同樣的圖像最外層邊緣的像素都沒有處理,不過這個對整體影響不大,所以後面再弄,下一篇來實現Sobel邊緣檢測。 


相關焦點

  • 基於MATLAB圖像處理的中值濾波、均值濾波以及高斯濾波的實現與對比
    基於MATLAB圖像處理的中值濾波、均值濾波以及高斯濾波的實現與對比
  • 基於蟻群算法求解函數的最大最小值的Matlab源碼「肥波貓」
    基於蟻群算法求解函數的最大最小值的Matlab源碼「肥波貓」上一篇基於遺傳算法求解函數的最大最小值的Matlab源碼「肥波貓」,本次用蟻群算法同樣可以解決。蟻群算法最早是由Marco Dorigo等人在1991年提出,他們在研究新型算法的過程中,發現蟻群在尋找食物時,通過分泌一種稱為信息素的生物激素交流覓食信息從而能快速的找到目標,據此提出了基於信息正反饋原理的蟻群算法。
  • 卡爾曼濾波算法解析(一)
    在工程領域,只要涉及到信號處理問題,都繞不開一個人,那就是卡爾曼,雖然卡爾曼提出的估計理論已經過去八九十年之久,但是在如今的資訊時代,卡爾曼濾波依舊是機器人導航中最為常見的一種算法
  • 基於FPGA的實時中值濾波器硬體實現
    在許多實際應用場合,如高清視頻監控、X光圖像的降噪等,需要快速且實時地進行中值濾波,軟體實現達不到實時處理的要求,因此選用硬體實現。 在硬體實現上,文獻[1]、[2]等採用行延遲的方法形成鄰域數據,以實現3×3的中值濾波。文獻[7]為了提高紅外成像跟蹤器設計了大窗口的中值濾波器。
  • 維納濾波原理及其matlab實現
    信號分析檢測與處理的一個十分重要的內容就是從噪聲中提取信號,實現這種功能的有效手段之一是設計一種具有最佳線性過濾特性的濾波器,當伴有噪聲的信號通過這種濾波器的時候,它可以將信號儘可能精確地重現或對信號做出儘可能精確的估計,而對所伴隨噪聲進行最大限度地抑制。維納濾波器就是這種濾波器的典型代表之一。1.
  • 基於STFT濾波算法的指紋圖像識別系統的設計與實現
    本文在充分調研了目前的指紋預處理和特徵提取研究成果之後,分別針對指紋增強、指紋二值化和指紋特徵提取方面提出了三個新的算法,部分解決了目前指紋識別技術面臨的問題與挑戰,並且利用這些新的算法製作了一款指紋圖像識別系統。本文通過緒論、需求分析、系統設計、系統實現、系統測試一步步介紹指紋圖像識別技術在指紋識別系統中的應用情況。
  • 卡爾曼濾波及其衍生算法在SOC估計中的應用
    卡爾曼濾波作為一種去除幹擾數據,獲得優質估計結果的優秀算法,在許多領域得到應用。無人機定位、實驗數據處理以及動力電池的SOC、SOH等,需要作出參數估計的領域都有應用。本文意在初步的表述我可以理解到的卡爾曼濾波及其衍生算法的物理意義和算法間的區別。
  • 基於梳妝濾波器濾波諧波的實踐
    打開APP 基於梳妝濾波器濾波諧波的實踐 發表於 2019-06-01 09:35:16 究其原因,感覺是pi的精度出現了問題,matlab默認為3.1416,於是強制pi=3.1415926; 效果好了很多,但是幅度不是為1,不像其它的值,頻率幅度不為1,接近0,sin(pi*n),所有的時域值都為0,所以頻率對應的值接近0. 最終得到諧波圖。
  • 使用 matlab 進行傅立葉分析和濾波
    /fs;%時域信號橫軸的坐標,n為長度,fs為採樣率s1 = lsim(H,a1,t);%2.濾波說明:[btt1,ctt1] = butter(N,wn,'s');。N是濾波器的階數,wn是截止頻率(是弧度值,如果截止頻率要求為500Hz,則)。可以直接給定,亦可以根據參數由buttord`函數計算得到。'
  • MATLAB中的非線性空間濾波基礎
    IPT中常用於生成非線性空間濾波的一個工具是函數ordfilt2,它可以生成統計排序( order-statistic )濾波器(也稱為排序濾波器,rank filter )。它們都是非線性空間濾波器,其響應基於對圖像鄰域中所包含的像素進行排序,然後使用排序結果確定的值來替代鄰域中的中心像素的值。
  • 基於TMS320DM642電子穩像算法的實現
    因此,電子穩像算法要體現其優越性,就要滿足實時性和準確性。1 基於灰度投影的電子穩像算法1.1 電子穩像基本原理 電子穩像(Electronic Image Stabilization,EIS)是集電子技術、計算機、數位訊號處理、視頻圖像處理等為一體的實現數字圖像序列穩定的技術。
  • 自適應濾波算法理解與應用
    在某些應用中,該系統輸入不加延遲地用做期望響應。   3) 預測:在這類應用中,自適應濾波器的作用是對隨機信號的當前值提供某種意義上的一個最好預測。於是,信號的當前值用作自適應濾波器的期望響應。信號的過去值加到濾波器的輸入端。取決於感興趣的應用,自適應濾波器的輸出或估計誤差均可作為系統的輸出。在第一種情況下,系統作為一個預測器;而在後一種情況下,系統作為預測誤差濾波器。
  • 中科大發展出基於卡爾曼濾波的實時地震定位算法
    地震定位算法通常分為兩類:基於到時的定位和基於全波形偏移的定位。這兩類定位方法都需要事先收集多個臺站監測到的數據。但是對於實時地震應用如地震早期預警,需要地震的定位隨著更多監測臺站的觸發而實時更新地震位置及其誤差。但是傳統的基於到時和波形的地震定位方法不滿足這樣的需求。
  • matlab下實現FFT信號分析
    ,當採樣頻率 fs.max大於信號中最高頻率 fmax 的 2 倍時(fs.max > 2fmax),採樣之後的數位訊號完整地保留了原始信號中的信息,一般實際應用中保證採樣頻率為信號最高頻率的2.56~4倍;採樣定理又稱奈奎斯特定理或香農採樣定理。
  • 技術|基於改進擴展卡爾曼濾波的鋰電池SOC估計
    ,其估計精度受訓練數據和訓練方法的影響較大;(4)卡爾曼濾波算法[10-15],通過建立電池模型實現狀態空間描述,再使用卡爾曼濾波器對狀態量進行估計,該方法是一種自回歸數據處理算法,其核心思想是對動態系統的狀態做最小均方意義上的最優估計,因此其估計精度比較高,但是其對電池模型的精度要求也比較高,同時由於該方法運算量較大,算法較為複雜,對系統處理器的要求也較高。
  • 基於中值的圖像椒鹽噪聲的非迭代濾除
    為了克服這些問題,採用非線性濾波,中值濾波進行處理是最常用的一種方法。當考慮一個小鄰域時,椒鹽噪聲能得到高效的抑制。然而中值濾波的最大缺點是他作用於整幅圖像,因此損失其中的大部分細節。為此找一種既能有效去除噪聲又能保持細節的方法是許多人感興趣的問題。
  • CMOS溫度傳感器校準算法設計與實現
    結合低成本的要求,在高精度的應用中需對傳感器進行數字校準,使校準後輸出量隨溫度變化具有線性關係。通過對未校準之前CMOS溫度傳感器隨溫度變化的函數關係構造校準函數是算法的核心。通過分析精度指標、數據運算量及系統資源等因素,採取添加中值濾波和均值濾波處理原始數據的分段擬合校準方法,並在運算量的約束下得出了最優的分段值。
  • 基於嵌入式測控系統的數字濾波方法設計
    這種從數據系列中提取逼近真值的軟體算法,通常稱為數字濾波算法。相對於硬體濾波,數字濾波的優越性在於其無需硬體且可靠性高,尤其對頻率很高或很低的信號進行濾波。此外,由於對多輸入通道可共用一個濾波程序,故可大大降低產品成本。
  • 基於靜息態的近紅外腦機接口(fNIRS-BCI)空間濾波算法
    今天為大家介紹北京航空航天大學汪待發教授所發表的論文:<基於靜息態的近紅外腦機接口(fNIRS-BCI)空間濾波算法>
  • 蟻群算法即相關代碼實現詳解—matlab之智能算法
    蟻群算法即相關代碼實現詳解 一.算法背景 蟻群算法是近年來剛剛誕生的隨機優化方法,它是一種源於大自然的新的仿生類算法.由義大利學者Dorigo最早提出,螞蟻算法主要是通過螞蟻群體之間的信息傳遞而達到尋優的目的,最初又稱蟻群優化方法(Ant Colony