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('处理后图') %显示中值滤波后的图像
中值滤波器适合于椒盐滤波,均值滤波器适合于高斯噪声
希望能帮到你!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)