自编自适应中值滤波器
自適應(yīng)中值濾波器
算法思想:自適應(yīng)中值濾波器是根據(jù)輸入的圖片像素矩陣和濾波器窗口的最大和最小值,首先,根據(jù)濾波器窗口的最大值申請兩個可以處理了邊界情況的濾波器,大小為原圖加上最大濾波器的尺寸減一,按照邊緣處理規(guī)則將原圖映射到第一個矩陣中。通過兩層循環(huán)遍歷每一個元素值,在循環(huán)中,先是按最小的濾波器尺寸選取相應(yīng)的值,并找到這些值的最大值、最小值和中值。在第一個判斷中如果滿足“最小值<中值<最大值”,則再判斷是否滿足“最小值<濾波器的中心元素(x,y)<最大值”,若這個判斷滿足,將(x,y)的像素值存到第一個全零矩陣(x,y)中;否則第一個判斷不滿足,中值可能等于最小值或最大值,就每次擴大窗口邊界尺寸為2,總共擴大了4個像素長度,再次找出新濾波窗口下的最大值、最小值和中值,按第一個判斷直到滿足或者窗口大小大于定義的最大濾波器的窗口邊界值,就輸出中值為中心元素的值。
function adaptiveI = adaptive_median_fiter(I,smax,smin) %I是輸入的原圖,,smax是增大窗口的臨界值,smin是濾波器的最小值 %adaptiveI是經(jīng)濾波處理后的輸出圖像 [h,w]=size(I); dt=smax-1; dtm=(smin-1)/2; %計算最小濾波器的邊緣采集距離 fmax=zeros(h+dt,w+dt); fadaptive=zeros(h+dt,w+dt); for i=1:h %將原圖進行擴充,用0填補邊緣for j=1:wfmax(i+dt/2,j+dt/2)=I(i,j);end end for i=1+dt/2:h+dt/2for j=1+dt/2:w+dt/2s=fmax(i-dtm:i+dtm,j-dtm:j+dtm); %A層次zmax=max(s(:));zmin=min(s(:));zmed=median(s(:));if zmed>zmin & zmed<zmax %zmed不是噪聲,到B層次if fmax(i,j)>zmin & fmax(i,j)<zmaxfadaptive(i,j)=fmax(i,j); %fmax(i,j)不是噪聲,輸出else fadaptive(i,j)=zmed; %否則輸出中值代替原值endelse %zmed等于zmin或zmax,增大窗口snum=dtm+2; %snum記錄當前濾波器減1后一半的大小,增大濾波器while snum<=dt/2 %dt/2是最大窗口減一一半的值s=fmax(i-snum:i+snum,j-snum:j+snum);zmax=max(s(:));zmin=min(s(:));zmed=median(s(:));if zmed>zmin & zmed<zmax %判斷擴大窗口后的zmed是否為噪聲if fmax(i,j)>zmin & fmax(i,j)<zmaxfadaptive(i,j)=fmax(i,j); %fmax(i,j)不是噪聲,輸出break;elsefadaptive(i,j)=zmed; %否則輸出中值代替原值break;endendif snum==dt/2fadaptive(i,j)=zmed; end snum=snum+2;endendend end adaptiveI=zeros(h,w); for i=1:h %裁剪圖片為原大小for j=1:wadaptiveI(i,j)=fadaptive(i+dt/2,j+dt/2);end end end在椒鹽噪聲中,自適應(yīng)中值濾波器在中值濾波器的基礎(chǔ)上可以動態(tài)地去除椒鹽噪聲,噪聲去除得更干凈,細節(jié)保留得更好。自適應(yīng)中值濾波器,根據(jù)預(yù)設(shè)的窗口大小,動態(tài)地改變?yōu)V波器窗口的大小,同時兼顧去除噪聲和保護細節(jié)。
在高斯噪聲中,自適應(yīng)中值濾波器的減弱效果最差。高斯噪聲的值是概率密度函數(shù)服從高斯分布的噪聲,不同于椒鹽噪聲,椒鹽噪聲是兩個端點值,可以利用中值較好的去除,高斯噪聲的值是按正態(tài)分布隨機分布的,不能通過取中值消除它,只能通過一些濾波器減弱高斯噪聲。在兩種噪聲對比下,自適應(yīng)中值濾波器適用于椒鹽噪聲。
總結(jié)
以上是生活随笔為你收集整理的自编自适应中值滤波器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文引发的思考
- 下一篇: linux vi 替换字符串,vi字符串