前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >中值滤波

中值滤波

作者头像
渔父歌
发布2019-04-18 16:13:23
7490
发布2019-04-18 16:13:23
举报
文章被收录于专栏:数据结构笔记

中值滤波使用当前像素点和它周围的8个像素点的中值来代替当前点额像素点,这个办法对去除椒盐噪声非常有效。

如果图片中某一块像素的数值如下: 120 130 134 122 123 122 125 146 124

9个数值排序后为:120 122 122 123 124 125 130 134 146 所以使用中值滤波后中间的像素点会替换为 124

中值滤波的 C语言实现:

代码语言:javascript
复制
void medianBlur(Mat img, Mat dst, int ksize) {
    //ksize必须为奇数
    if (ksize % 2 == 0 && (ksize - 1) / 2 - 1 < img.cols && (ksize - 1) / 2 - 1 < img.rows) {
        return;
    }

    //边到中心点的距离
    int offset = (ksize - 1) / 2;
    int* window = new int[ksize * ksize];
    for (int i = 0; i < img.cols; i++) {
        for (int k = 0; k < img.rows; k++) {
            //获取周围的元素
            int count = 0;
            for (int n = i - offset; n < i + offset + 1; n++) {
                if (n < 0 || n >= img.cols) {
                    continue;
                }

                for (int m = k - offset; m < k + offset + 1; m++) {
                    if (m < 0 || m >= img.rows) {
                        continue;
                    }

                    window[count] = int(img.at<uchar>(m, n));
                    count++;
                }
            }
            //排序
            for (int n = 0; n < count - 1; n++) {
                for (int m = n + 1; m < count; m++) {
                    if (window[m] < window[n]) {
                        int t = window[m];
                        window[m] = window[n];
                        window[n] = t;
                    }
                }
            }

            dst.at<uchar>(k, i) = window[count / 2];
        }
    }

    delete[] window;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.04.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档