如何使用中值滤波器算法去除胡椒噪声
How to remove pepper noise using median filter algorithm
我写了一个代码(用 c++(使用 CImg 库在图像中添加噪声。现在我想加载带有噪声的图像,并使用中值滤波器算法去除图像中的噪声。 下面是我的代码。
int main()
{
int x;
cout<<"Welcome to my appn";
cout<<"Choose options belown";
cout<<"1. Remove pepper 2. Add peppern";
cin>>x;
if (x==1)
{
cout<<"Needs help";
/*
* i tried to change the noise level to 0 but it did not work like below
* image.noise(0,2);
*
*/
}
else if(x==2)
{
//image file
CImg<unsigned char> image("new.bmp");
const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 };
image.noise(100,2);
image.save("new2.bmp");
CImgDisplay main_disp(image, "Image with Pepper noise");
while (!main_disp.is_closed())
{
main_disp.wait();
}
}
getchar();
return 0;
}
如果有另一种使用 CImg 库的方法,我将不胜感激!!
根据本教程和中值函数的定义,你会得到这样的结果:
#include <algorithm>
using namespace std;
// ...
int ksize = 3; // 5, 7, N and so on... for NxN kernel
int ksize2 = ksize/2;
vector<uchar> kernel(ksize*ksize, 0);
for (int i=ksize2;i<image.dimx() - ksize2;i++)
for (int j=ksize2;j<image.dimy() - ksize2;j++)
for (int k=0;k<3;k++) {
// prepare kernel
int n = 0;
for(int l = -ksize2; l <= ksize2; l++)
for(int m = -ksize2; m <= ksize2; m++)
kernel[n++] = image(i + l,j + m,0,k);
// using std::algorithm to find median
sort(kernel.begin(), kernel.end());
// simple assign median value to created empty image
medianFilteredImage(i, j, 0, k) = kernel[kernel.size()/2]; // median is here now
}
}
}
相关文章:
- 在细胞中产生噪声 - CPP 和 GLSL
- 在没有密钥的情况下读取密文的剩余噪声预算
- 为什么这个噪声函数不处理否定参数?
- 如何使用中值滤波器算法去除胡椒噪声
- 使用Kalman滤波器来filt噪声,而不会延迟OpenCV C
- 如何创建用于生成噪声的哈希函数
- 了解 3D 柏林噪声
- 单纯噪声范围太小
- OpenCV噪声消除静态摄像机的视频
- 生成高斯噪声
- 实时图像处理:HSV图像中的噪声(openCV)
- 使用C 加入高斯噪声
- 用于跨平台(C /Android)无损/低噪声视频压缩/减压的库
- 如何获得粉红噪声的每倍频程功率(使用Aquila DSP库)
- 如何从xKinect视频中去除像素噪声
- 值噪声随机函数奇异输出
- 帧差噪声
- 信号扰动,C++正常噪声
- 柏林噪声和高度图/位图
- 如何减少或消除通过更改16位PCM采样'volume'而产生的噪声