博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原創) 如何對圖片加入Salt and Pepper Noise? (.NET) (C/C++) (C++/CLI) (GDI+) (Image Processing)...
阅读量:7218 次
发布时间:2019-06-29

本文共 1519 字,大约阅读时间需要 5 分钟。

Salt and Pepper的公式如下

None.gif
I(nim
,
 i
,
 j) 
=
 
0
 if uniform(
0
,
 
1
) < salt
None.gifI(nim
,
 i
,
 j) 
=
 
255
 if uniform(
0
,
 
1
) > 
1
 - pepper
None.gifI(nim
,
 i
,
 j) 
=
 I(im
,
 i
,
 j) otherwise
None.gif
None.gifuniform(
0
,
 
1
) : ramdom variable uniformly distributed over
[
0, 1
]
 1
ExpandedBlockStart.gif
ContractedBlock.gif
/**/
/* 
 2InBlock.gif(C) OOMusou 2006 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : SaltAndPepperNoise.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0 / C++/CLI
 6InBlock.gifDescription : Demo how to process Salt and Pepper Noise
 7InBlock.gifRelease     : 12/20/2006 1.0
 8ExpandedBlockEnd.gif*/
 9
None.gif
10
None.gif#include 
"
stdafx.h
"
11
None.gif#include 
"
stdlib.h
"
12
None.gif
13
None.gif
using
 
namespace
 System::Drawing;
14
None.gif
using
 
namespace
 System::Drawing::Imaging;
15
None.gif
16
None.gif
void
 saltpepperNoise(Bitmap
^
, Bitmap
^
double&
double&
);
17
None.gif
18
ExpandedBlockStart.gifContractedBlock.gif
int
 main() 
dot.gif
{
19InBlock.gif   // Read lena.jpg
20InBlock.gif  Bitmap^ oriImg = gcnew Bitmap("lena.jpg");
21InBlock.gif  // Declare Gaussian image for lena.jpg
22InBlock.gif  Bitmap^ spImg = gcnew Bitmap(oriImg->Width, oriImg->Height);
23InBlock.gif
24InBlock.gif  // Salt-and-Pepper noise with salt rate=5% and pepper rate=5%
25InBlock.gif  double salt = 0.05, pepper = 0.05;
26InBlock.gif  saltpepperNoise(oriImg, spImg, salt, pepper);
27InBlock.gif  spImg->Save("lena_saltpepper.jpg");
28InBlock.gif
29InBlock.gif  return 0;
30InBlock.gif
31ExpandedBlockEnd.gif}
32
None.gif
33
ExpandedBlockStart.gifContractedBlock.gif
void
 saltpepperNoise(Bitmap
^
 oriImg, Bitmap
^
 spImg, 
double&
 salt, 
double&
 pepper) 
dot.gif
{
34ExpandedSubBlockStart.gifContractedSubBlock.gif  for(int y = 0; y != oriImg->Height; ++y) dot.gif{
35ExpandedSubBlockStart.gifContractedSubBlock.gif    for(int x = 0; x != oriImg->Width; ++x) dot.gif{
36InBlock.gif      double val = (double)rand() / RAND_MAX;
37InBlock.gif
38ExpandedSubBlockStart.gifContractedSubBlock.gif      if (val < salt) dot.gif{
39InBlock.gif        spImg->SetPixel(x, y, Color::Black);
40ExpandedSubBlockEnd.gif      }
41ExpandedSubBlockStart.gifContractedSubBlock.gif      else if (val > 1-pepper) dot.gif{
42InBlock.gif        spImg->SetPixel(x, y, Color::White);
43ExpandedSubBlockEnd.gif      }
44ExpandedSubBlockStart.gifContractedSubBlock.gif      else dot.gif{
45InBlock.gif        spImg->SetPixel(x, y, oriImg->GetPixel(x, y));
46ExpandedSubBlockEnd.gif      }
47ExpandedSubBlockEnd.gif    }
48ExpandedSubBlockEnd.gif  }
49ExpandedBlockEnd.gif}

原圖

執行結果

转载地址:http://dnxym.baihongyu.com/

你可能感兴趣的文章
browser-solidity安装
查看>>
go中时间范围比较
查看>>
57.toncat介绍 安装jdk和tomcat
查看>>
107.jenkins部署java项目-准备
查看>>
6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩
查看>>
企业大型互联网分布式架构{Java分布式架构 dubbo + springmvc + mybatis + ehcache + redis }...
查看>>
(三)spring cloud微服务分布式云架构 - Spring Cloud集成项目简介
查看>>
什么是自然语言处理技术
查看>>
Kaggle手写数字识别开源记录两层神经网络准确率99%
查看>>
Windows平台使用Gitblit搭建Git服务器
查看>>
PyCharm入门教程——掌握PyCharm键盘快捷键
查看>>
4.31yum安装Nginx4.32-33Nginx虚拟主机4.34安装WordPress4.35安装discuz
查看>>
设计原则-迪米特法则
查看>>
struts custom tag
查看>>
CACHE的一些基本概念
查看>>
Spring事务 tx:method 默认-3
查看>>
STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)。
查看>>
cisco ACL的类型
查看>>
SpringCloud(第 005 篇)电影微服务,也注册到 EurekaServer 中,通过 Http 协议访问已注册到生态圈中的用户微服务...
查看>>
学习心得
查看>>