求自适应中值滤波Matlab程序

求自适应中值滤波Matlab程序,第1张

a=image_mean

a=double(a)

[dep,wide]=size(a)

new_image=ones(size(a))

for i=3:dep-2

for j=3:wide-2

new_image(i,j)=median([a(i-2,j-2) a(i-2,j-1) a(i-2,j) a(i-2,j+1) a(i-2,j+2) a(i-1,j-2) a(i-1,j-1) a(i-1,j) a(i-1,j+1) a(i-1,j+2) a(i,j-2) a(i,j-1) a(i,j) a(i,j+1) a(i,j+2) a(i+1,j-2) a(i+1,j-1) a(i+1,j) a(i+1,j+1) a(i+1,j+2) a(i+2,j-2) a(i+2,j-1) a(i+2,j) a(i+2,j+1) a(i+2,j+2)])

end

end

for i=3:dep-2 %处理每一行的最头上两个和最边上凳稿哗2

new_image(i,1)=new_image(i,3)

new_image(i,2)=new_image(i,3)new_image(i,wide)=new_image(i,wide-2)

new_image(i,wide-1)=new_image(i,wide-2)

end

new_image(1,:)=new_image(3,:)%把第三行的所有元素赋值给第一行枣行

new_image(2,:)=new_image(3,:)

new_image(dep,:)=new_image(dep-2,:)%把倒数第二行的所有元素值赋给最后一行

new_image(dep-1,:)=new_image(dep-2,:)

figure

imshow(uint8(new_image))

第敬友一行是我接着我做的东西的上面来的,表示读入图片,你可以换成I=imread('F:\exam\Matlab\shibie\1.jpg')等,根据情况读入图片就行了。最后一行我是把它进行了强制转换,你也可以试试不转换看能不能显示。

首先:这个程序只能处理灰度图--即便是你用图像处理软件变成黑白的也没用,必须用Matlab把任意一个图像变成灰度图,所以加一句img0=rgb2gray(imread('lena.jpg'))

其次,mat2gray()的参数要求是double,所以要加一个double函数把里面的参数转换成img=mat2gray(double(img0))

程序代码如下,亲测可用

close all

clc

%本程序只能处理灰度图

img0=rgb2gray(imread('lena.jpg'))

imshow(img0,[])

img=mat2gray(double(img0))%读取图片文件中的数据,

[m n]=size(img)%转化为二维数组?

img=imnoise(img,'salt &pepper',0.1) %加入椒盐噪声

imshow(img,[])

Nmax=10 %确定最闹历大的滤波半径

%下面是边界扩展,图像上下左右各增加Nmax像素。

imgn=zeros(m+2*Nmax+1,n+2*Nmax+1)%填充0矩阵?

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 Imin<Imed &&Imed<Imax %如果当前邻域中值不是噪声点,那么就用此次的邻域

break

else

r=r+1 %否则袭宽扩大窗口,继续判液禅搜断

end

end

if Imin<imgn(i,j) &&imgn(i,j)<Imax %如果当前这个像素不是噪声,原值输出

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

else%否则输出邻域中值

re(i,j)=Imed

end

end

end

figure

imshow(re(Nmax+1:m+Nmax,Nmax+1:n+Nmax),[])

均值滤波:是把每个像素都用周围的8个像素来做均值 *** 作,幅值近似相等且随机分布在不同位置上,这样可以平滑图像,速度较快,算法简单。但是无法去掉噪声,只能微弱的减弱它。中值滤波:常用的非线性滤波方法 ,也是图像处理技术中最常用的预处理技术。它在平滑脉冲噪声方面非键喊常有效,同时它可以保护图像尖锐的边缘,选择信亮稿适当的点来替代污染点的值,所以处理效果好。其中加权中值滤波能够改进中值滤波的边缘信号,使其良好保滑孝持效果。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12343138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存