求中值滤波快速算法(用MATLAB实现)的程序

求中值滤波快速算法(用MATLAB实现)的程序,第1张

// 中值滤波对椒盐噪声

RGB=imread('peppers','PNG')

I=rgb2gray(RGB)

J=imnoise(I,'salt &pepper',0.02)

subplot(121),imshow(J)

L=medfilt2(J,[3 3])

subplot(122),imshow(L)

unsigned char WINAPI GetMedianNum(unsigned char * bArray, int iFilterH,int iFilterW)

{

/* unsigned char m = mid(

mid(bArray[0],bArray[1],bArray[2]),

mid(bArray[3],bArray[4],bArray[5]),

mid(bArray[6],bArray[7],bArray[8]))

return m*/

// 循环变量

int i

int j

int k

// 中间变量

unsigned char bTemp

int iFilterLen=iFilterH*iFilterW

float average=0//用于均值加速

//求均值

for (i=0i<iFilterLeni++)

{

average+=bArray[i]

}

average=average/iFilterLen

unsigned char pixel_mid

pixel_mid=bArray[(iFilterH-1)/2*iFilterW+(iFilterW-1)/2]//滤波窗口中心的取中值前的像素值

if (abs(average-pixel_mid)>10) //均值加速,其中“10”为原中值和均值之差,根据你的实际情况自行设置大小

//if(1) //不用均值加速时选此

{

//超快速中值法(本质就是伪中值法)

//行排列

if (0)

{

for (k = 0k < iFilterHk ++)

{

for (j = 0j < iFilterH-1j ++)

{

for (i = 0i < iFilterW-1-ji++)

{

number++

if (bArray[i+iFilterH*k] >bArray[i+iFilterH*k+1])

{ // 互换

bTemp = bArray[i+iFilterH*k]

bArray[i+iFilterH*k] = bArray[i+iFilterH*k+1]

bArray[i+iFilterH*k+1] = bTemp

}

}

还有什么疑问,把邮箱发给我。

你注意了,imread(路径,'name.jpg'),我是以我电脑的图片给你做的,你运行时候,MATLAB路径要改到你需要处理图片的路径。

代码如下:

I=imread('11.jpg')    %读取图像

subplot(2,2,1),imshow(I)title('原图')  %显示原图像

J=rgb2gray(I)    %把彩色图像转化为灰度图像

subplot(2,2,2),imshow(J)title('灰度图')  %显示灰度图像

J= imnoise(J,'salt & pepper',0.005) %加上椒盐噪声

subplot(2,2,3),imshow(J)title('椒盐噪声图') %显示加上椒盐的图像

H=medfilt2(J)   %中值滤波

subplot(2,2,4),imshow(H)title('处理后图') %显示中值滤波后的图像

中值滤波器适合于椒盐滤波,均值滤波器适合于高斯噪声

希望能帮到你!


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存