资源简介
本段代码共提供了三种滤波方式进行去噪:中值滤波,均值滤波,高斯滤波。通过效果图对比可以比较三种方式优劣。
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
int main()
{
Mat normimg orgimg junzhiimg zhongzhiimg gaussimg;
normimg = imread(“14.jpg“);
orgimg = imread(“噪声图片.jpg“);
int col = orgimg.cols row = orgimg.rows;
int i j;
junzhiimg.create(row col CV_8UC3);
zhongzhiimg.create(row col CV_8UC3);
gaussimg.create(row col CV_8UC3);
for (i = 1; i < col - 1; i++)
{
for (j = 1; j < row - 1; j++)
{
junzhiimg.at< Vec3b>(j i)[0] = (1.0 / 9)*(orgimg.at< Vec3b>(j - 1 i - 1)[0]
+ orgimg.at< Vec3b>(j - 1 i)[0] + orgimg.at< Vec3b>(j - 1 i + 1)[0]
+ orgimg.at< Vec3b>(j i - 1)[0] + orgimg.at< Vec3b>(j i)[0]
+ orgimg.at< Vec3b>(j i + 1)[0] + orgimg.at< Vec3b>(j + 1 i - 1)[0]
+ orgimg.at< Vec3b>(j + 1 i)[0] + orgimg.at< Vec3b>(j + 1 i + 1)[0]);
//田字格的均值赋予均值值········图像的0通道
junzhiimg.at< Vec3b>(j i)[1] = (1.0 / 9)*(orgimg.at< Vec3b>(j - 1 i - 1)[1]
+ orgimg.at< Vec3b>(j - 1 i)[1] + orgimg.at< Vec3b>(j - 1 i + 1)[1]
+ orgimg.at< Vec3b>(j i - 1)[1] + orgimg.at< Vec3b>(j i)[1]
+ orgimg.at< Vec3b>(j i + 1)[1] + orgimg.at< Vec3b>(j + 1 i - 1)[1]
+ orgimg.at< Vec3b>(j + 1 i)[1] + orgimg.at< Vec3b>(j + 1 i + 1)[1]);
//田字格的均值赋予均值值········图像的1通道
junzhiimg.at< Vec3b>(j i)[2] = (1.0 / 9)*(orgimg.at< Vec3b>(j - 1 i - 1)[2]
+ orgimg.at< Vec3b>(j - 1 i)[2] + orgimg.at< Vec3b>(j - 1 i + 1)[2]
+ orgimg.at< Vec3b>(j i - 1)[2] + orgimg.at< Vec3b>(j i)[2]
+ orgimg.at< Vec3b>(j i + 1)[2] + orgimg.at< Vec3b>(j + 1 i - 1)[2]
+ orgimg.at< Vec3b>(j + 1 i)[2] + orgimg.at< Vec3b>(j + 1 i + 1)[2]);
//田字格的均值赋予均值值········图像的2通道
}
}//缺点就是不能处理边缘的像素
namedWindow(“原图“ WINDOW_NORMAL);
imshow(“原图“ normimg);
namedWindow(“噪声图“ WINDOW_NORMAL);
imshow(“噪声图“ orgimg);
namedWindow(“均值滤波“ WINDOW_NORMAL);
imshow(“均值滤波“ junzhiimg);
int m n temp1;
int temp[9];
for (i = 1; i < col - 1; i++)
{
for (j = 1; j < row - 1; j++)
{
temp[0] = orgimg.at< Vec3b>(j - 1 i - 1)[0];
temp[1] = orgimg.at< Vec3b>(j - 1 i)[0];
temp[2] = orgimg.at< Vec3b>(j - 1 i + 1)[0];
temp[3] = orgimg.at< Vec3b>(j i - 1)[0];
temp[4] = orgimg.at< Vec3b>(j i)[0];
temp[5] = orgimg.at< Vec3b>(j i + 1)[0];
temp[6] = orgimg.at< Vec3b>(j + 1 i - 1)[0];
temp[7] = orgimg.at< Vec3b>(j + 1 i)[0];
temp[8] = orgimg.at< Vec3b>(j + 1 i + 1)[0];
for (m = 0; m < 9; m++)
{
for (n = 0; n < 9 - m - 1; n++)
{
if (temp[n]>temp[n + 1])
{
temp1 = temp[n + 1];
temp[n + 1] = temp[n];
temp[n] = temp1;
}
}
}//·········冒泡法排序···········
zhongzhiimg.at< Vec3b>(j i)[0] = temp[4];
temp[0] = orgimg.at< Vec3b>(j - 1 i - 1)[1];
temp[1] = orgimg.at< Vec3b>(j - 1 i)[1];
temp[2] = orgimg.at< Vec3b>(j
- 上一篇:计算机图形学大作业 二维图形变换
- 下一篇:C++ 开发大全基础篇PDF扫描版
相关资源
- 基于VC++的带通滤波器的设计与实现
- Tms320c55xdsp 语音录音滤波和回放例程
- butterworth滤波器的c语言实现
- 五点三次平滑滤波C语言程序
- 引导滤波_Cpp_Python.rar
- 几种常用的滤波算法C语言filter.c
- 卡尔曼滤波C++代码实现.zip
- 基于暗通道和导向滤波的图像去雾算
- qt界面化实现各种滤波函数
- Ubuntu下的扩展卡尔曼滤波EKF程序(C
- ekf对飞机位置进行滤波
- C语言 小波变换 图像 去噪 源代码
- 粒子滤波目标跟踪算法
- 音频去噪C++代码,注释清晰可用
- 卡尔曼滤波和互补滤波参考程序
- 完整的实时深度图平滑代码像素滤波
- 用C语言实现高斯滤波
- C/C++语言图像处理:各种滤波
- 卡尔曼滤波c语言实现
- 高斯滤波的c++代码实现
- FFT滤波算法(FFT_CAL.c)
- 数字滤波器源代码
- MPU6050与卡尔曼滤波算法实践(MPU605
- opencv2深度图滤波
- C++实现信号滤波处理
- FIR滤波器 C5000 DSP的实现
- 对图像做空间滤波
- 卡尔曼滤波算法入门以及C实现
- 低通滤波器c语言实现
- c++ 图像中值梯度锐化、拉普拉斯锐化
评论
共有 条评论