matlab練習程式(自適應中值濾波RAMF)

2021-09-08 20:31:47 字數 1988 閱讀 1226

中值濾波是很經典的演算法了。今天看**又知道還有一種叫自適應中值濾波的演算法ramf。原**在這裡。

ramf主要通過以下兩步來處理影象。

1.首先確定最大的濾波半徑,然後用乙個合適的半徑r對影象進行濾波。計算當前濾波半徑畫素灰度的imin,imax,imed,然後判斷imed是否在[imin,imax]中間,如果在則向下進行,否則擴大當前半徑r繼續濾波直到r等於最大濾波半徑。

2.如果當前處理的畫素img(i,j)在[imin,imax]之間,則輸出當前畫素,否則輸出當前濾波半徑中值畫素imed。

看下效果吧:

雜訊影象:

ramf演算法:

普通3*3中值濾波:

matlab**如下:

); %加入椒鹽雜訊

imshow(img,);

nmax=10

; %確定最大的濾波半徑

%下面是邊界擴充套件,影象上下左右各增加nmax畫素。

imgn=zeros(m+2*nmax+1,n+2*nmax+1

);imgn(nmax+1:m+nmax,nmax+1:n+nmax)=img;

imgn(

1:nmax,nmax+1:n+nmax)=img(1:nmax,1

:n); %擴充套件上邊界

imgn(

1:m+nmax,n+nmax+1:n+2*nmax+1)=imgn(1:m+nmax,n:n+nmax); %擴充套件右邊界

imgn(m+nmax+1:m+2*nmax+1,nmax+1:n+2*nmax+1)=imgn(m:m+nmax,nmax+1:n+2*nmax+1

); %擴充套件下邊界

imgn(

1:m+2*nmax+1,1:nmax)=imgn(1:m+2*nmax+1,nmax+1:2*nmax); %擴充套件左邊界

re=imgn;

for i=nmax+1:m+nmax

for j=nmax+1:n+nmax

r=1; %初始濾波半徑

while r~=nmax

w=imgn(i-r:i+r,j-r:j+r);

w=sort(w);

imin=min(w(:));

imax=max(w(:));

imed=w(uint8((2*r+1)^2/2

));

if iminimax %如果當前鄰域中值不是雜訊點,那麼就用此次的鄰域

break

;

else

r=r+1

; %否則擴大視窗,繼續判斷

endend

if iminimax %如果當前這個畫素不是雜訊,原值輸出

re(i,j)=imgn(i,j);

else

%否則輸出鄰域中值

re(i,j)=imed;

endend

endfigure;

imshow(re(nmax+1:m+nmax,nmax+1:n+nmax),);

自適應中值濾波及matlab實現

常規的中值濾波器,在雜訊的密度不是很大的情況下 根據經驗,雜訊的出現的概率小於0.2 效果不錯。但是當概率出現的概率較高時,常規的中值濾波處理後,仍然具有雜訊點,並丟失了細節和邊緣,效果不是很好。在模板視窗sxy定義的濾波器區域內定義如下變數 zmin min sxy 模板視窗sxy中的最小灰度值 ...

自適應中值濾波

演算法 自適應中值濾波 layer a a1 zmed zmin a2 zmax zmed if a1 0 and a2 0,goto layer b else enlarge sxy,goto layer a if sxy exceeds the boundary,out zxy layer b ...

RAMF自適應中值濾波

clear all 清除所有變數 close all 關閉所有開啟的檔案 clc 清除命令列內容 img mat2gray rgb2gray imread lena.jpg 讀取檔案 m n size img img imnoise img,salt pepper 0.25 加入椒鹽雜訊 subpl...