在實(shí)時(shí)圖像采集中,不可避免的會(huì)引入噪聲,尤其是干擾噪聲和椒鹽噪聲,噪聲的存在嚴(yán)重影響邊緣檢測(cè)的效果,中值濾波是一種基于排序統(tǒng)計(jì)理論的非線(xiàn)性平滑計(jì)數(shù),能有效平滑噪聲,且能有效保護(hù)圖像的邊緣信息,所以被廣泛用于數(shù)字圖像處理的邊緣提取,其基本原理是把數(shù)字圖像或數(shù)字序列中的一點(diǎn)的值用該點(diǎn)鄰域內(nèi)所有的點(diǎn)排序后的中值來(lái)代替。
中值濾波對(duì)椒鹽噪聲有良好的濾除作用,特別是在濾除噪聲的同時(shí),能夠保護(hù)信號(hào)的邊緣,使之不被模糊。這些優(yōu)良特性是線(xiàn)性濾波方法所不具有的。而且,中值濾波的算法比較簡(jiǎn)單,也易于用硬件實(shí)現(xiàn)。這篇我們先用MATLAB來(lái)實(shí)現(xiàn)中值濾波。
中值濾波方法是,對(duì)待處理的當(dāng)前像素,選擇一個(gè)模板3x3、5x5或其他,這里選擇3x3矩陣,該模板為其鄰近的若干個(gè)像素組成,對(duì)模板的像素由小到大進(jìn)行排序,再用模板的中值來(lái)替代原像素的值的方法。
排序算法示意圖
當(dāng)我們使用3x3窗口后獲取領(lǐng)域中的9個(gè)像素,就需要對(duì)9個(gè)像素值進(jìn)行排序,為了提高排序效率,排序算法思想如圖所示。
(1)對(duì)窗內(nèi)的每行像素按降序排序,得到最大值、中間值和最小值。
(2)把三行的最小值即第三列相比較,取其中的最大值。
(3)把三行的最大值即第一列相比較,取其中的最小值。
(4)把三行的中間值即第二列相比較,再取一次中間值。
(5)把前面的到的三個(gè)值再做一次排序,獲得的中值即該窗口的中值。
sort排序函數(shù)
sort(A)若A可以使矩陣或行列向量,默認(rèn)都是對(duì)A進(jìn)行升序排列。
sort(A)是默認(rèn)的升序,而sort(A,'descend')是降序排序。sort(A)若A是矩陣,默認(rèn)對(duì)A的各列進(jìn)行升序排列sort(A,dim)dim=1時(shí)相當(dāng)于sort(A)
dim=2時(shí)表示對(duì)矩陣A中的各行元素升序排列
sort(A, dim, 'descend’)則對(duì)矩陣的每行進(jìn)行降序排列
MATLAB Median Filter代碼實(shí)現(xiàn)
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); 1516 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:COL23
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
end27 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 Filter37 imgn = imnoise(Gray_data,‘salt & pepper’,0.02);
38 39 figure;40 imshow(imgn);41 42 43 for r = 2:ROW-144
for c = 2:COL-145
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 end55 end56 57 figure;58 imshow(Median_Img);
處理前后比較
Gray lena
加入椒鹽噪聲后的lena
對(duì)加入椒鹽噪聲后進(jìn)行中值濾波的lena
可以看出,中值濾波對(duì)椒鹽噪聲的濾除效果真是非常的好。光看我處理后圖圖片可能看不出太明顯對(duì)比,有興趣的朋友可以自己嘗試下。這里MTALAB的排序部分基本是是按照排序算法一步步來(lái)的,完全符合FPGA實(shí)現(xiàn)的思路,所以說(shuō)掌握算法的基礎(chǔ)原理和Verilog自己就可以嘗試用FPGA實(shí)現(xiàn)了。
這里需要強(qiáng)調(diào)的一下是這樣的濾波對(duì)圖像的邊緣沒(méi)有進(jìn)行處理,這是因?yàn)槲覀冊(cè)谇笕【祷蛑兄禃r(shí),生成的3x3矩陣,第一行的像素并沒(méi)有處理,同樣的圖像最外層邊緣的像素都沒(méi)有處理,不過(guò)這個(gè)對(duì)整體影響不大,所以后面再弄,下一篇來(lái)實(shí)現(xiàn)Sobel邊緣檢測(cè)。
-
matlab
+關(guān)注
關(guān)注
180文章
2952瀏覽量
229860 -
圖像采集
+關(guān)注
關(guān)注
2文章
298瀏覽量
41209 -
濾波
+關(guān)注
關(guān)注
10文章
659瀏覽量
56540 -
中值濾波
+關(guān)注
關(guān)注
0文章
14瀏覽量
8357
原文標(biāo)題:基于MATLAB的中值濾波算法實(shí)現(xiàn)
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論