Генерация импульсного шум (salt&pepper noise) - C#
Формулировка задачи:
Здравствуйте, подскажите, пожалуйста, где можно получит подробную информацию о генерации импульсного шума на изображении. Желательно с элементами кода. В интернете мало информации, в основном все ограничивается странной формулой и все. Буду признательна. Заранее спасибо)
Решение задачи: «Генерация импульсного шум (salt&pepper noise)»
textual
Листинг программы
- using System;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.Windows.Forms;
- using System.Runtime.InteropServices;
- namespace WindowsFormsApp1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- var img = Image.FromFile(@"p:\test.png");
- pictureBox1.Image = img;
- pictureBox2.Image = AddNoiseSlow(new Bitmap(img));
- pictureBox3.Image = AddNoiseFast(new Bitmap(img));
- }
- Bitmap AddNoiseSlow(Bitmap bmp, double size = 0.1, Random random = null)
- {
- var rnd = random ?? new Random();
- for (int i = (int)(size * bmp.Width * bmp.Height); i > 0; i--)
- bmp.SetPixel(
- rnd.Next(bmp.Width), rnd.Next(bmp.Height),
- rnd.NextDouble() < 0.5 ? Color.Black : Color.White);
- return bmp;
- }
- Bitmap AddNoiseFast(Bitmap bmp, double size = 0.1, Random random = null)
- {
- var rnd = random ?? new Random();
- var bdata = bmp.LockBits(
- new Rectangle(0, 0, bmp.Width, bmp.Height),
- ImageLockMode.ReadWrite, bmp.PixelFormat);
- var psize = Image.GetPixelFormatSize(bmp.PixelFormat) / 8;
- var black = new byte[] { 0, 0, 0, 255 };
- var white = new byte[] { 255, 255, 255, 255 };
- for (int i = (int)(size * bmp.Width * bmp.Height); i > 0; i--)
- {
- int x = rnd.Next(bmp.Width);
- var y = rnd.Next(bmp.Height);
- var offset = bdata.Scan0 + y * bdata.Stride + x * psize;
- Marshal.Copy(rnd.NextDouble() < 0.5 ? white : black, 0, offset, psize);
- }
- bmp.UnlockBits(bdata);
- return bmp;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д