32位RGB图像中值滤波
2017-03-20 12:20
295 查看
中值滤波对椒盐噪声有很好的滤出效果,下面以3x3滤波器为例,实现中值滤波。
排序,采用选择排序。
中值滤波:
要拓展到5x5,7x7等,也很容易。另外,对边界采取忽略的处理方式。
排序,采用选择排序。
void Sort(int data[9]) { int i; int j; int minv; int index; index = 0; for (i = 0; i < 9; i++) { minv = data[i]; index = i; for (j = i+1; j < 9; j++) { if (minv > data[j]) { minv = data[j]; index = j; } } data[index] = data[i]; data[i] = minv; } }
中值滤波:
void RGB32MedianFilting(uint8_t* src, uint8_t* dst, int width, int height) { int i,j; int m,n; int d; uint32_t row_bytes; uint32_t color; int r_data[9]; int g_data[9]; int b_data[9]; uint32_t* img; uint32_t* ptr; uint32_t* dimg; uint32_t off; row_bytes = width * 4; off = row_bytes + 4; for (i = 1; i < height - 1; i++) { img = (uint32_t*)(src + off); dimg = (uint32_t*)(dst + off); for (j = 1; j < width - 1; j++) { ptr = img; d = 0; for (m = -1; m <= 1; m++) { ptr = img + m * width; for (n = -1; n <= 1; n++) { ptr += n; color = *ptr; r_data[d] = color & 0x000000FF; g_data[d] = (color >> 8) & 0x000000FF; b_data[d] = (color >> 16) & 0x000000FF; d++; } } Sort(r_data); Sort(g_data); Sort(b_data); color &= 0xFF000000; color |= r_data[4] + (g_data[4] << 8) + (b_data[4] << 16); *dimg = color; dimg++; img++; } off += row_bytes; } }
要拓展到5x5,7x7等,也很容易。另外,对边界采取忽略的处理方式。
相关文章推荐
- 图像的模式(RGB和CMYK)、通道(8位、16位、32位)分别有什么作用
- RGB与YUV图像视频格式的相互转换(转)
- 发个MatLab 自编的 均值滤波、中值滤波、高斯滤波 图像处理函数
- HSV颜色空间理解及RGB图像转换到HSV空间的方法(数据集扩充)
- 图像滤波----低通滤波,中值滤波,高通滤波,方向滤波(Sobel),拉普拉斯变换
- 利用OpenCV的imread将RGB图像转化为灰度图像!
- 视频与图像RGB/YUV格式详解(转)
- 【VS开发】【图像处理】RGB各种格式
- [图像]中值滤波(Matlab实现)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- Python 将RGB图像转换为Pytho灰度图像的实例
- opencv彩色图像(RGB)转灰度图像及其优化
- 把32位等任意格式图片灰度化并把图像数据保存为文本文件
- 图像在rgb和lab空间之间的转换
- MATLAB图像处理_Bayer图像处理 & RGB Bayer Color分析
- 图像噪声的抑制——均值滤波、中值滤波、对称均值滤波
- 视频图像处理基础知识5(RGB与Ycbcr相互转换公式 )【转】
- C#将RGB图像转换为8位灰度图像
- OPENCV获得彩色图像的RGB通道图像
- WIN32 控件显示RGB 图像 / Mat 图像