当前位置: 首页 > news >正文

杭州好的公司网站设计易推客app拉新平台

杭州好的公司网站设计,易推客app拉新平台,机械网站开发方案,网站的数据库做备份OpenCV13-图像噪声:椒盐噪声和高斯噪声 1.噪声种类2.椒盐噪声3.高斯噪声 1.噪声种类 图像噪声是指图像中的随机或非随机的不希望的视觉扰动。它可以出现在数字图像中的各种形式,例如颗粒状噪声、条纹、斑点、模糊、失真等。图像噪声可能是由于图像采集过…

OpenCV13-图像噪声:椒盐噪声和高斯噪声

    • 1.噪声种类
    • 2.椒盐噪声
    • 3.高斯噪声


1.噪声种类

图像噪声是指图像中的随机或非随机的不希望的视觉扰动。它可以出现在数字图像中的各种形式,例如颗粒状噪声、条纹、斑点、模糊、失真等。图像噪声可能是由于图像采集过程中的传感器噪声、电磁干扰、传输错误、压缩算法等原因引起的。

常见的图像噪声类型包括:

  1. 高斯噪声:高斯噪声是最常见的图像噪声类型之一。它是由于传感器噪声和环境干扰引起的,呈现为图像中的随机亮度变化。
  2. 椒盐噪声:椒盐噪声是指图像中出现随机黑白像素点,类似于盐和胡椒粉的颗粒。它通常是由于传感器故障或信号传输中的错误引起的。
  3. 斑点噪声:斑点噪声是指图像中出现的亮度不均匀的斑点,可能是由于摄像头或传感器的缺陷引起的。
  4. 条纹噪声:条纹噪声表现为图像中的水平或垂直条纹,通常是由于电源干扰或摄像头扫描时钟不稳定引起的。
  5. 压缩噪声:压缩噪声是在图像压缩中引入的,特别是在低比特率压缩中。它表现为图像细节的丢失、模糊或块状伪像。

为了减少或去除图像噪声,可以使用图像处理技术,例如平滑滤波、中值滤波、频域滤波等。这些技术可以根据噪声类型和特定应用的需求选择和调整参数,以改善图像质量并增强细节。

2.椒盐噪声

椒盐噪声又称作脉冲噪声,他会随机改变图像中的像素值,其样子就像是在图像上随机地撒上一些盐粒和黑椒粒,因此被称为椒盐噪声。

OpenCV没有提供专门用于为图像添加椒盐噪声的函数,需要使用者根据需求编写生成噪声的程序。考虑到椒盐噪声会在图像中的任何一个位置随机产生,因此对于椒盐噪声的生成,需要使用OpenCV中能够产生随机数的函数 rand() 。为了能够生成不同数据类型的随机数,该函数拥有多种演变形式:

namespace cvflann
{inline int rand();// low与high是输出随机数的最小值与最大值inline double rand_double(double high = 1.0, double low = 0);inline int rand_int(int high = RAND_MAX, int low = 0);
}

添加椒盐噪声的步骤:

1.确定椒盐噪声的位置。通过随机函数生成两个随机数,确定噪声点的行和列。

2.确定噪声的种类。噪声点的黑白也是随机的,可以再生成一个随机数,根据奇偶性确定黑白。

3.修改图像像素灰度值。判断图像的通道数,灰度图像单通道赋一个值,彩色图像三通道赋3个值。

最终得到含有噪声的图像。

下面是代码实现:

#include <opencv2/core/utils/logger.hpp>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;//盐噪声函数
void saltAndPepper(cv::Mat image, int n)
{//using cvflann::rand();for (int k = 0; k < n / 2; k++){//随机确定图像中位置int i, j;i = cvflann::rand() % image.cols;  //取余数运算,保证在图像的列数内j = cvflann::rand() % image.rows;  //取余数运算,保证在图像的行数内int write_black = cvflann::rand() % 2;  //判定为白色噪声还是黑色噪声的变量if (write_black == 0)  //添加白色噪声{if (image.type() == CV_8UC1)  //处理灰度图像{image.at<uchar>(j, i) = 255;  //白色噪声}else if (image.type() == CV_8UC3)  //处理彩色图像{image.at<cv::Vec3b>(j, i)[0] = 255; //cv::Vec3b为opencv定义的一个3个值的向量类型image.at<cv::Vec3b>(j, i)[1] = 255; //[]指定通道,B:0,G:1,R:2image.at<cv::Vec3b>(j, i)[2] = 255;}}else  //添加黑色噪声{if (image.type() == CV_8UC1){image.at<uchar>(j, i) = 0;}else if (image.type() == CV_8UC3){image.at<cv::Vec3b>(j, i)[0] = 0; //cv::Vec3b为opencv定义的一个3个值的向量类型image.at<cv::Vec3b>(j, i)[1] = 0; //[]指定通道,B:0,G:1,R:2image.at<cv::Vec3b>(j, i)[2] = 0;}}}
}int main()
{cout << "OpenCV Version: " << CV_VERSION << endl;utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);Mat lena = imread("lena.png");Mat equalLena = imread("equalLena.png", IMREAD_ANYDEPTH);if (lena.empty() || equalLena.empty()){cout << "请确认图像文件名称是否正确" << endl;return -1;}imshow("lena原图", lena);imshow("equalLena原图", equalLena);saltAndPepper(lena, 10000);  //彩色图像添加椒盐噪声saltAndPepper(equalLena, 10000);  //灰度图像添加椒盐噪声imshow("lena添加噪声", lena);imshow("equalLena添加噪声", equalLena);int k = waitKey(0); // Wait for a keystroke in the windowreturn 0;
}

3.高斯噪声

高斯噪声是指噪声分布的概率密度函数服从高斯分布(正态分布)的一类噪声。概率密度函数如下:
p ( z ) = 1 2 π σ e − ( z − μ ) 2 2 σ 2 p(z) = \frac{1}{\sqrt{2 \pi \sigma}} e^{\frac{-(z-\mu)^2}{2 \sigma^2}} p(z)=2πσ 1e2σ2(zμ)2
其中, z z z 表示图像像素灰度值, μ \mu μ 表示像素值的平均值或者期望值, σ \sigma σ 表示像素值的标准差。

OpenCV中也没有专门为图像添加高斯噪声的函数,对早在图像中添加椒盐噪声的过程,可以根据需求利用能够产生随机数的函数来完成在图像中添加高斯噪声的任务。在OpenCV中提供了 fill() 函数能够产生均匀分布或者高斯分布的随机数,可以利用该函数产生符合高斯分布的随机数,之后在图像中加入这些随机数即可。

void cv::RNG::fill(InputOutputArray mat, // 存放随机数的矩阵int distType,   // 均匀分布RNG::UNIFORM 高斯分布RNG::NORMALInputArray a,   // 均匀分布的最小下限,高斯分布的均值InputArray b,   // 均匀分布的最大上限,高斯分布的标准差bool saturateRange = false // 预报和标志,仅用于均匀分布
);

fill() 函数是 RNG 类的成员函数,因此必须要创建类对象才能使用:

cv::RNG rng;
rng.fill(mat, RNG::NORMAL, 10, 20);

在图像中添加高斯噪声的步骤:

1.创建与图像尺寸、数据类型及通道数相同的Mat类变量。

2.调用fill()函数在Mat类变量中产生符合高斯分布的随机数。

3.将原图像和含有高斯分布的随机数矩阵相加。

最终得到添加高斯噪声之后的图像。

下面是示例代码:

#include <opencv2/core/utils/logger.hpp>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{cout << "OpenCV Version: " << CV_VERSION << endl;utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);Mat lena = imread("lena.png");Mat equalLena = imread("equalLena.png", IMREAD_ANYDEPTH);if (lena.empty() || equalLena.empty()){cout << "请确认图像文件名称是否正确" << endl;return -1;}//生成与原图像同尺寸、数据类型和通道数的矩阵Mat lena_noise = Mat::zeros(lena.rows, lena.cols, lena.type());Mat equalLena_noise = Mat::zeros(lena.rows, lena.cols, equalLena.type());imshow("lena原图", lena);imshow("equalLena原图", equalLena);RNG rng;  //创建一个RNG类rng.fill(lena_noise, RNG::NORMAL, 10, 20);  //生成三通道的高斯分布随机数rng.fill(equalLena_noise, RNG::NORMAL, 15, 30);  //生成三通道的高斯分布随机数imshow("三通道高斯噪声", lena_noise);imshow("单通道高斯噪声", equalLena_noise);lena = lena + lena_noise;  //在彩色图像中添加高斯噪声equalLena = equalLena + equalLena_noise;  //在灰度图像中添加高斯噪声//显示添加高斯噪声后的图像imshow("lena添加噪声", lena);imshow("equalLena添加噪声", equalLena);int k = waitKey(0); // Wait for a keystroke in the windowreturn 0;
}

考虑到灰度值相加会超过255的情况,实际上如果值超过255会等于255:

int main()
{cout << "OpenCV Version: " << CV_VERSION << endl;utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);Mat a = (Mat_<uchar>(2, 2) << 130, 125, 127, 129);Mat b = (Mat_<uchar>(2, 2) << 130, 125, 127, 129);Mat c = a + b;cout << "a: " << endl << a << endl;cout << "b: " << endl << b << endl;cout << "c: " << endl << c << endl;int k = waitKey(0); // Wait for a keystroke in the windowreturn 0;
}
/*
a:
[130, 125;127, 129]
b:
[130, 125;127, 129]
c:
[255, 250;254, 255]
*/
http://www.wooajung.com/news/27925.html

相关文章:

  • h5个人网站模板源码沈阳seo技术
  • 做服装要看国外哪些网站免费推广软件工具
  • 门户网站怎么开发微信引流获客软件
  • 替别人做网站管理员东莞网站推广策划
  • 阿里云做外贸网站浙江疫情最新消息
  • 做的好的营销型网站有哪些项目营销推广方案
  • 网页制作教程电子书惠州百度seo在哪
  • 网页制作怎么做多个网站环球网今日疫情消息
  • 老外做摄影网站花多少钱海外推广解决方案
  • 网页微博怎么回到旧版梅州seo
  • 红色旅游网站页面建设网络推广专员岗位职责
  • 给个网站靠谱点2021免费推广平台有哪些
  • 沧州做网站哪家公司好seo搜索引擎排名优化
  • 法律网站建设价格百度seo竞价推广是什么
  • 工程建设招标中心网站百度关键词批量看排名工具
  • 网站做cdnseoaoo
  • 德阳建设厅官方网站友情链接怎么设置
  • 17一起做网店网站潮汕网页设计软件
  • 如何通审查元素做网站汕头seo优化
  • 深圳做棋牌网站建设哪家好推广普通话内容50字
  • 导航网站怎么做的搜索引擎优化策略包括
  • 响应式网站用什么做独立站seo建站系统
  • 外包加工网注册收费靠谱吗百度seo关键词优化方案
  • 中山高端网站建设价格微博指数
  • 可以做短信炸弹的网站seo平台优化
  • 专业做微视频的网站360营销
  • 如何给公司注册网站竞价账户托管公司
  • 做医院网站公司怎么买域名自己做网站
  • phicomm怎么做网站重庆网站排名提升
  • 虎门公司网站建设百度关键词优化多少钱一年