当前位置:首页 > 代码 > 正文

中值滤波器代码(中值滤波器代码表)

admin 发布:2022-12-19 22:05 171


本篇文章给大家谈谈中值滤波器代码,以及中值滤波器代码表对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

怎样用MATLAB实现中值和均值滤波

中值滤波楼上答了,5*5的均值滤波代码 w2=fspecial('average',[5 5]); %% 先定义一个滤波器 h=imfilter(a,w2,'replicate'); %%让图像通过滤波器 imshow(h); imwrite(h,'8.jpg');

均值滤波是

I=medfilt2(a,[3 3],'symmetric')

可以在matlab中查询medfilt函数的用法,本例是使用3*3的滤波器采用镜像边界法做均值滤波。

使用C++代码完成 均值滤波器、中值滤波器、最大值滤波器、最小值滤波器分别对灰度图进行滤波

//中值滤波和均值大概这个样子

int nByteWidth=nWidth*3;

if (nByteWidth%4) nByteWidth+=4-(nByteWidth%4);

BYTE p[9],s;

int i,j;

for(y=1;ynHeight-1;y++)

{

for(x=3;xnWidth*3-3;x++)

{

//把一个像素周围的8个像素值分别赋值给p[0]到p[8]

p[0]=lpInput[x-3+(y-1)*nByteWidth];

p[1]=lpInput[x+(y-1)*nByteWidth];

p[2]=lpInput[x+3+(y-1)*nByteWidth];

p[3]=lpInput[x-3+y*nByteWidth];

p[4]=lpInput[x+y*nByteWidth];

p[5]=lpInput[x+3+y*nByteWidth];

p[6]=lpInput[x-3+(y+1)*nByteWidth];

p[7]=lpInput[x+(y+1)*nByteWidth];

p[8]=lpInput[x+3+(y+1)*nByteWidth];

//将p[0]到p[8]从小到大排列

for(j=0;j5;j++)

{

for(i=j+1;i9;i++)

{

if (p[j]p[i])

{

s=p[j];

p[j]=p[i];

p[i]=s;

}

}

}

//将各点的中值赋值给该像素

lpOutput[x+y*nByteWidth]=p[4];

}

//----------------------------------------

int sr,sg,sb;

int nByteWidth=nWidth*3;

if (nByteWidth%4) nByteWidth+=4-(nByteWidth%4);

for(y=1;ynHeight-1;y++)

{

for(x=1;xnWidth-1;x++)

{

p=x*3+y*nByteWidth;

sb=0;

sg=0;

sr=0;

for(y1=-1;y1=1;y1++)

for(x1=-1;x1=1;x1++)

{

//像素本身及其周围的八个像素(3X3窗口内的像素)的blue值之和

sb+=lpInput[(y+y1)*nByteWidth+(x+x1)*3];

//像素本身及其周围的八个像素(3X3窗口内的像素)的green值之和

sg+=lpInput[(y+y1)*nByteWidth+(x+x1)*3+1];

//像素本身及其周围的八个像素(3X3窗口内的像素)的red值之和

sr+=lpInput[(y+y1)*nByteWidth+(x+x1)*3+2];

}

//将red,green,blue值的平均值赋值给该像素

lpOutput[p+2]=sr/9;

lpOutput[p+1]=sg/9;

lpOutput[p]=sb/9;

}

}

急求中值滤波的伪代码(300分)?

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=0;iiFilterLen;i++)

{

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 = 0; k iFilterH; k ++)

{

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

{

for (i = 0; i iFilterW-1-j; i++)

{

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;

}

}

}

}

//列排列

// for (k = 0; k iFilterW; k ++)

//{

k=(iFilterW-1)/2;

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

{

for (i = 0; i iFilterW-1-j; i++)

{

number++;

if (bArray[k+iFilterW*i] bArray[k+iFilterW*(i+1)])

{

// 互换

bTemp = bArray[k+iFilterW*i];

bArray[k+iFilterW*i] = bArray[k+iFilterW*(i+1)];

bArray[k+iFilterW*(i+1)] = bTemp;

}

}

}

}

else

{

//传统冒泡法获取中值

if(0)

{for (j = 0; j iFilterLen - 1; j ++)

{

for (i = 0; i iFilterLen - j - 1; i ++)

{

number++;

if (bArray[i] bArray[i + 1])

{

// 互换

bTemp = bArray[i];

bArray[i] = bArray[i + 1];

bArray[i + 1] = bTemp;

}

}

}

}

else

{

quickSort(bArray,0,iFilterLen-1);//快速排序法

}

}

}

//else

// 计算中值。注:本程序的数组均为奇数个元素

bTemp=bArray[(iFilterLen -1) / 2];

// 返回中值

return bTemp;

}

void quickSort(unsigned char a[], int l, int r)

{// 排序a [ l : r ], a[r+1] 有大值

int t;

if (l = r) return;

int i = l, // 从左至右的游标

j = r + 1; // 从右到左的游标

unsigned char pivot = a[l];

// 把左侧= pivot的元素与右侧= pivot 的元素进行交换

while (true) {

do {// 在左侧寻找= pivot 的元素

i = i + 1;

number++;

} while (a[i] pivot);

do {// 在右侧寻找= pivot 的元素

j = j - 1;

number++;

} while (a[j] pivot);

if (i = j) break; // 未发现交换对象

t=a[i];

a[i]=a[j];

a[j]=t;

}

// 设置p i v o t

a[l] = a[j];

a[j] = pivot;

quickSort(a, l, j-1); // 对左段排序

quickSort(a, j+1, r); // 对右段排序

}

急求中值滤波器的matlab算法代码

I=imread('D:\picture.jpg');

figure;

imshow(I);

K=imnoise(I,'gaussian',0.02);%加噪声

figure;

imshow(K);

g=medfilt2(K);%中值滤波

figure;

imshow(g);

中值滤波器代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于中值滤波器代码表、中值滤波器代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/26648.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载