中值滤波原理及c语言的实现,关于中值滤波算法,以及C语言实现(转)

1、什么是中值滤波?

中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。

中值滤波可以过滤尖峰脉冲。目的在于我们对于滤波后的数据更感兴趣。滤波后的数据保留的原图像的变化趋势,同时去除了尖峰脉冲对分析造成的影响。

以一维信号的中值滤波举例。对灰度序列80、120、90、200、100、110、70,如果按大小顺序排列,其结果为70、80、90、10O、110、120、200,其中间位置上的灰度值为10O,则该灰度序列的中值即为100。一维信号中值滤波实际上就是用中值代替规定位置(一般指原始信号序列中心位置)的信号值。对前面所举的序列而言,中值滤波的结果是用中值100替代序列80、120、90、200、100、110、70中的信号序列中心位置值200,得到的滤波序列就是80、120、90、100、100、110、70。如果在此序列中200是一个噪声信号,则用此方法即可去除这个噪声点。

二维中值滤波算法是:对于一幅图像的象素矩阵,取以目标象素为中心的一个子矩阵窗口,这个窗口可以是3*3 ,5*5 等根据需要选取,对窗口内的象素灰度排序,取中间一个值作为目标象素的新灰度值。窗口示例如ooooxoooo上面x为目标象素,和周围o组成3*3矩阵Array,然后对这9个元素的灰度进行排序,以排序后的中间元素Array[4]为x的新灰度值,如此就完成对象素x的中值滤波,再迭代对其他需要的象素进行滤波即可。

图像处理中,中值滤波的实现方法

1:通过从图像中的某个采样窗口取出奇数个数据进行排序

2

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中值滤波是一种常用的数字图像处理方法,可以用于去除图像中的噪声。下面是中值滤波C语言实现代码: ```c #include <stdio.h> #include <stdlib.h> // 中值滤波函数 void median_filter(int *input, int *output, int width, int height, int size) { int i, j, m, n, k; int *mask = (int*)malloc(sizeof(int) * size * size); int temp; // 对于边缘像素,不做处理 for (i = 0; i < width; i++) { for (j = 0; j < height; j++) { if (i < size / 2 || i >= width - size / 2 || j < size / 2 || j >= height - size / 2) { output[i * height + j] = input[i * height + j]; } else { // 生成掩模 k = 0; for (m = 0; m < size; m++) { for (n = 0; n < size; n++) { mask[k++] = input[(i + m - size / 2) * height + (j + n - size / 2)]; } } // 排序 for (m = 0; m < size * size - 1; m++) { for (n = m + 1; n < size * size; n++) { if (mask[m] > mask[n]) { temp = mask[m]; mask[m] = mask[n]; mask[n] = temp; } } } // 取中值 output[i * height + j] = mask[size * size / 2]; } } } free(mask); } // 测试函数 int main() { int input[5][5] = { {10, 20, 30, 20, 10}, {20, 30, 40, 30, 20}, {30, 40, 50, 40, 30}, {20, 30, 40, 30, 20}, {10, 20, 30, 20, 10} }; int output[5][5]; median_filter((int*)input, (int*)output, 5, 5, 3); int i, j; for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { printf("%d ", output[i][j]); } printf("\n"); } return 0; } ``` 在上面的代码中,我们使用了一个大小为size*size的掩模,对于每个像素,我们将其周围的像素值放入掩模中,并进行排序,最后取中值作为该像素的新值。需要注意的是,对于边缘像素,由于其周围的像素值无法凑齐size*size个,因此不做处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值