matlab55中值滤波,基于MATLAB的中值滤波算法实现
在實(shí)時(shí)圖像采集中,不可避免的會(huì)引入噪聲,尤其是干擾噪聲和椒鹽噪聲,噪聲的存在嚴(yán)重影響邊緣檢測(cè)的效果,中值濾波是一種基于排序統(tǒng)計(jì)理論的非線性平滑計(jì)數(shù),能有效平滑噪聲,且能有效保護(hù)圖像的邊緣信息,所以被廣泛用于數(shù)字圖像處理的邊緣提取,其基本原理是把數(shù)字圖像或數(shù)字序列中的一點(diǎn)的值用該點(diǎn)鄰域內(nèi)所有的點(diǎn)排序后的中值來代替。
中值濾波對(duì)椒鹽噪聲有良好的濾除作用,特別是在濾除噪聲的同時(shí),能夠保護(hù)信號(hào)的邊緣,使之不被模糊。這些優(yōu)良特性是線性濾波方法所不具有的。而且,中值濾波的算法比較簡(jiǎn)單,也易于用硬件實(shí)現(xiàn)。這篇我們先用MATLAB來實(shí)現(xiàn)中值濾波。
中值濾波方法是,對(duì)待處理的當(dāng)前像素,選擇一個(gè)模板3x3、5x5或其他,這里選擇3x3矩陣,該模板為其鄰近的若干個(gè)像素組成,對(duì)模板的像素由小到大進(jìn)行排序,再用模板的中值來替代原像素的值的方法。
排序算法示意圖
當(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代碼實(shí)現(xiàn)
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: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的排序部分基本是是按照排序算法一步步來的,完全符合FPGA實(shí)現(xiàn)的思路,所以說掌握算法的基礎(chǔ)原理和Verilog自己就可以嘗試用FPGA實(shí)現(xiàn)了。
這里需要強(qiáng)調(diào)的一下是這樣的濾波對(duì)圖像的邊緣沒有進(jìn)行處理,這是因?yàn)槲覀冊(cè)谇笕【祷蛑兄禃r(shí),生成的3x3矩陣,第一行的像素并沒有處理,同樣的圖像最外層邊緣的像素都沒有處理,不過這個(gè)對(duì)整體影響不大,所以后面再弄,下一篇來實(shí)現(xiàn)Sobel邊緣檢測(cè)。
原文出處:https://www.cnblogs.com/ninghechuan/p/9527915.html
總結(jié)
以上是生活随笔為你收集整理的matlab55中值滤波,基于MATLAB的中值滤波算法实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地震设计反应谱、时程分析法和地震动选取与
- 下一篇: 图像处理——matlab人脸识别(1)