当前位置: 首页> 财经> 访谈 > 设计网站合集的网站_微信商城开发实惠华网天下_连云港网站seo_腾讯企点官网

设计网站合集的网站_微信商城开发实惠华网天下_连云港网站seo_腾讯企点官网

时间:2025/8/4 19:11:18来源:https://blog.csdn.net/yangzheng_520/article/details/143757611 浏览次数:0次
设计网站合集的网站_微信商城开发实惠华网天下_连云港网站seo_腾讯企点官网

中值滤波器

中值滤波器原理(Median Filter)

在这里插入图片描述

中值滤波器就是将滤波窗口内像素灰度值的中间值作为滤波结果。中值滤波器与大小相同的线性平滑滤波器相比,能有效地降低某些随机噪声且模糊程度较低,应用较为广泛。

#include<iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;//定义滤波函数
void MedianFilter(Mat img_input, Mat& img_output, int m, int n); //输入图像,输出图像,m,n为滤波器大小。int main()
{Mat image, image_gray, image_output, image_output2;   //定义输入图像,灰度图像,输出图像,输出图像2image = imread("高斯噪声.png");  //读取图像;if (image.empty()){cout << "读取错误" << endl;return -1;}imshow("image", image);//转换为灰度图像cvtColor(image, image_gray, COLOR_BGR2GRAY);imshow("image_gray", image_gray);//自己编写的滤波函数MedianFilter(image_gray, image_output, 7, 7);imshow("image_output", image_output);//opencv自带中值滤波medianBlur(image_gray, image_output2, 7);imshow("image_output2", image_output2);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}//实现滤波函数
void MedianFilter(Mat img_input, Mat& img_output, int m, int n)
{img_output = img_input.clone();int num = m * n;vector<uchar> sortarray(num);//1、为了保证图像的边缘也能够被滤波,这里首先扩展图像边缘,扩展方法为镜像copyMakeBorder(img_input, img_input, (m - 1) / 2, (m - 1) / 2, (n - 1) / 2, (n - 1) / 2, BORDER_REFLECT);//2、中值滤波for (int i = (m - 1) / 2; i < img_input.rows - (m - 1) / 2; i++){for (int j = (n - 1) / 2; j < img_input.cols - (n - 1) / 2; j++){int h = 0;for (int x = -(m - 1) / 2; x <= (m - 1) / 2; x++){for (int y = -(n - 1) / 2; y <= (n - 1) / 2; y++){sortarray[h] = img_input.at<uchar>(i + x, j + y);h++;}}sort(sortarray.begin(), sortarray.end()); //排序img_output.at<uchar>(i - (m - 1) / 2, j - (n - 1) / 2) = sortarray[(num - 1)/2];}}
}

在这里插入图片描述

最大值滤波器

最大值滤波器原理(Max Filters)

在这里插入图片描述

最大值滤波器就是将滤波窗口内像素灰度值的最大值作为滤波结果。最大值滤波器可以削弱明色区域相邻的暗色区域,可以用来降低胡椒噪声

#include<iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;//定义滤波函数
void MaxFilter(Mat img_input, Mat& img_output, int m, int n); //输入图像,输出图像,m,n为滤波器大小。int main()
{Mat image, image_gray, image_output;   //定义输入图像,灰度图像,输出图像image = imread("胡椒噪声.png");  //读取图像;if (image.empty()){cout << "读取错误" << endl;return -1;}imshow("image", image);//转换为灰度图像cvtColor(image, image_gray, COLOR_BGR2GRAY);imshow("image_gray", image_gray);//自己编写的滤波函数MaxFilter(image_gray, image_output, 7, 7);imshow("image_output", image_output);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}//实现滤波函数
void MaxFilter(Mat img_input, Mat& img_output, int m, int n)
{img_output = img_input.clone();int num = m * n;vector<uchar> sortarray(num);//1、为了保证图像的边缘也能够被滤波,这里首先扩展图像边缘,扩展方法为镜像copyMakeBorder(img_input, img_input, (m - 1) / 2, (m - 1) / 2, (n - 1) / 2, (n - 1) / 2, BORDER_REFLECT);//2、滤波for (int i = (m - 1) / 2; i < img_input.rows - (m - 1) / 2; i++){for (int j = (n - 1) / 2; j < img_input.cols - (n - 1) / 2; j++){int h = 0;for (int x = -(m - 1) / 2; x <= (m - 1) / 2; x++){for (int y = -(n - 1) / 2; y <= (n - 1) / 2; y++){sortarray[h] = img_input.at<uchar>(i + x, j + y);h++;}}sort(sortarray.begin(), sortarray.end()); //排序img_output.at<uchar>(i - (m - 1) / 2, j - (n - 1) / 2) = sortarray[num - 1];}}
}

在这里插入图片描述

最小值滤波器

最小值滤波器原理(Min Filter)

在这里插入图片描述

最小值滤波器就是将滤波窗口内像素灰度值的最小值作为滤波结果。最小值滤波可以削弱与暗色区域相邻的明色区域,可以用来降低盐粒噪声

#include<iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;//定义滤波函数
void MinFilter(Mat img_input, Mat& img_output, int m, int n); //输入图像,输出图像,m,n为滤波器大小。int main()
{Mat image, image_gray, image_output;   //定义输入图像,灰度图像,输出图像image = imread("盐粒噪声.png");  //读取图像;if (image.empty()){cout << "读取错误" << endl;return -1;}imshow("image", image);//转换为灰度图像cvtColor(image, image_gray, COLOR_BGR2GRAY);imshow("image_gray", image_gray);//自己编写的滤波函数MinFilter(image_gray, image_output, 7, 7);imshow("image_output", image_output);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}//实现滤波函数
void MinFilter(Mat img_input, Mat& img_output, int m, int n)
{img_output = img_input.clone();int num = m * n;vector<uchar> sortarray(num);//1、为了保证图像的边缘也能够被滤波,这里首先扩展图像边缘,扩展方法为镜像copyMakeBorder(img_input, img_input, (m - 1) / 2, (m - 1) / 2, (n - 1) / 2, (n - 1) / 2, BORDER_REFLECT);//2、滤波for (int i = (m - 1) / 2; i < img_input.rows - (m - 1) / 2; i++){for (int j = (n - 1) / 2; j < img_input.cols - (n - 1) / 2; j++){int h = 0;for (int x = -(m - 1) / 2; x <= (m - 1) / 2; x++){for (int y = -(n - 1) / 2; y <= (n - 1) / 2; y++){sortarray[h] = img_input.at<uchar>(i + x, j + y);h++;}}sort(sortarray.begin(), sortarray.end()); //排序img_output.at<uchar>(i - (m - 1) / 2, j - (n - 1) / 2) = sortarray[0];}}
}

在这里插入图片描述

中点滤波器

中点滤波器原理(Midpoint Filter)

在这里插入图片描述

中点滤波器将滤波窗口内像素灰度值最大最小值的均值作为滤波结果。中点滤波器是统计排序滤波器和平均滤波器的组合,适合处理随机噪声,如高斯噪声和均匀噪声。

#include<iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;//定义滤波函数
void MidpointFilter(Mat img_input, Mat& img_output, int m, int n); //输入图像,输出图像,m,n为滤波器大小。int main()
{Mat image, image_gray, image_output;   //定义输入图像,灰度图像,输出图像image = imread("高斯噪声.png");  //读取图像;if (image.empty()){cout << "读取错误" << endl;return -1;}imshow("image", image);//转换为灰度图像cvtColor(image, image_gray, COLOR_BGR2GRAY);imshow("image_gray", image_gray);//自己编写的滤波函数MidpointFilter(image_gray, image_output, 7, 7);imshow("image_output", image_output);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}//实现滤波函数
void MidpointFilter(Mat img_input, Mat& img_output, int m, int n)
{img_output = img_input.clone();int num = m * n;vector<uchar> sortarray(num);//1、为了保证图像的边缘也能够被滤波,这里首先扩展图像边缘,扩展方法为镜像copyMakeBorder(img_input, img_input, (m - 1) / 2, (m - 1) / 2, (n - 1) / 2, (n - 1) / 2, BORDER_REFLECT);//2、滤波for (int i = (m - 1) / 2; i < img_input.rows - (m - 1) / 2; i++){for (int j = (n - 1) / 2; j < img_input.cols - (n - 1) / 2; j++){int h = 0;for (int x = -(m - 1) / 2; x <= (m - 1) / 2; x++){for (int y = -(n - 1) / 2; y <= (n - 1) / 2; y++){sortarray[h] = img_input.at<uchar>(i + x, j + y);h++;}}sort(sortarray.begin(), sortarray.end()); //排序img_output.at<uchar>(i - (m - 1) / 2, j - (n - 1) / 2) = round((sortarray[0] + sortarray[num-1])/2);}}
}

在这里插入图片描述

修正阿尔法均值滤波器

修正阿尔法均值滤波器原理(Alpha-Trimmed Mean Filter)

在这里插入图片描述

将滤波窗口内像素灰度值的d/2最低值和最高值删除后的平均值作为滤波结果。修正阿尔法均值滤波器适合处理多种混合噪声,如均匀噪声+椒盐噪声。

#include<iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;//定义滤波函数
void AlphaTrimmedMeanFilter(Mat img_input, Mat& img_output, int m, int n, int d); //输入图像,输出图像,m,n为滤波器大小, d为去掉前后像素的个数int main()
{Mat image, image_gray, image_output;   //定义输入图像,灰度图像,输出图像image = imread("均匀+椒盐.png");  //读取图像;if (image.empty()){cout << "读取错误" << endl;return -1;}imshow("image", image);//转换为灰度图像cvtColor(image, image_gray, COLOR_BGR2GRAY);imshow("image_gray", image_gray);//自己编写的滤波函数AlphaTrimmedMeanFilter(image_gray, image_output, 7, 7, 5);imshow("image_output", image_output);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}//实现滤波函数
void AlphaTrimmedMeanFilter(Mat img_input, Mat& img_output, int m, int n, int d)
{img_output = img_input.clone();int num = m * n;vector<uchar> sortarray(num);//1、为了保证图像的边缘也能够被滤波,这里首先扩展图像边缘,扩展方法为镜像copyMakeBorder(img_input, img_input, (m - 1) / 2, (m - 1) / 2, (n - 1) / 2, (n - 1) / 2, BORDER_REFLECT);//2、滤波for (int i = (m - 1) / 2; i < img_input.rows - (m - 1) / 2; i++){for (int j = (n - 1) / 2; j < img_input.cols - (n - 1) / 2; j++){int h = 0;for (int x = -(m - 1) / 2; x <= (m - 1) / 2; x++){for (int y = -(n - 1) / 2; y <= (n - 1) / 2; y++){sortarray[h] = img_input.at<uchar>(i + x, j + y);h++;}}sort(sortarray.begin(), sortarray.end()); //排序int sum = 0;for (int k = d; k < num - d - 1; k++){sum = sum + sortarray[k];}img_output.at<uchar>(i - (m - 1) / 2, j - (n - 1) / 2) = round(sum / (num - 2 * d));}}
}

在这里插入图片描述

关键字:设计网站合集的网站_微信商城开发实惠华网天下_连云港网站seo_腾讯企点官网

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: