Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 54
1

Белый гауссовский шум

14.05.2016, 22:07. Просмотров 2227. Ответов 6
Метки нет (Все метки)

Здравствуйте! При запуске

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
private void белыйШумToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Bitmap image = new Bitmap(pictureBox1.Image); //Основное изображение.;
            int imageWidth = image.Width,
                imageHeight = image.Height;
 
            Bitmap result = new Bitmap(imageWidth, imageHeight);
            int[,] redA = new int[imageWidth, imageHeight];
            int[,] greenA = new int[imageWidth, imageHeight];
            int[,] blueA = new int[imageWidth, imageHeight];
            int[,] alphaA = new int[imageWidth, imageHeight];
            {
                Random Rnd = new Random();
                int[,] Generation = new int[imageWidth, imageHeight];
 
                for (int x = 0; x < image.Width; x++)
                {
                    for (int y = 0; y < image.Height; y++)
                    {
                        Generation[x, y] = Rnd.Next(-100, 100);
                    }
                }
                double SKO = 0;
                for (int x = 0; x < image.Width; x++)
                {
                    for (int y = 0; y < image.Height; y++)
                    {
                        SKO = SKO + Generation[x, y] * Generation[x, y];
                    }
                }
                SKO = SKO / (image.Width * image.Height);
                SKO = Math.Sqrt(SKO);
                for (int x = 0; x < image.Width; x++)
                {
                    for (int y = 0; y < image.Height; y++)
                    {
                        Generation[x, y] = Generation[x, y] * 20 / Convert.ToInt32(SKO);
                    }
                }
                for (int x = 0; x < image.Width - 1; x++)
                {
                    for (int y = 0; y < image.Height - 1; y++)
                    {
                        redA[x, y] = redA[x, y] + Generation[x, y];
                        greenA[x, y] = greenA[x, y] + Generation[x, y];
                        blueA[x, y] = blueA[x, y] + Generation[x, y];
                       alphaA[x, y] = alphaA[x, y] + Generation[x, y];
 
                        result.SetPixel(x, y, Color.FromArgb(
                       (int)(alphaA[x, y]),
                        (int)(redA[x, y]),
                        (int)(greenA[x, y]),
                        (int)(blueA[x, y])));
 
 
                    }
                }
                pictureBox2.Image = result;
            }
        }
    }
}
Выдается ошибка "Дополнительные сведения: Значение '-17' недопустимо для 'alpha'. 'alpha' должно быть больше или равно 0 и меньше или равно 255." Подскажите пожалуйста как это можно исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2016, 22:07
Ответы с готовыми решениями:

Окрашенный белый шум
Товарищи знатоки. Вопрос для меня темный). Надо наложить на обычный синусоидальный сигнал частотой...

Белый шум во время работы
Доброго времени суток. Такая проблема, недавно товарищ купил новую видеокарту, всё подходит, всё...

Речевой сигнал в белый шум
Доброго времени суток! Народ, подскажите, как сделать, чтобы при подаче на схему речевого сигнала,...

Как воссоздать звуковой белый шум?
Здравствуйте! Пишу прогу для генерации белого шума. Имеется диапазон от 50 до 5 000 Гц....

6
110 / 110 / 64
Регистрация: 03.06.2013
Сообщений: 584
14.05.2016, 23:37 2
aksiniyame, где ошибка возникает?
0
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 54
15.05.2016, 08:40  [ТС] 3
Ошибка возникает при запуске. Программа вылетает и пишется ошибка :"Дополнительные сведения: Значение '-17' недопустимо для 'alpha'. 'alpha' должно быть больше или равно 0 и меньше или равно 255." над
result.SetPixel(x, y, Color.FromArgb(
(int)(alphaA[x, y]),
(int)(redA[x, y]),
(int)(greenA[x, y]),
(int)(blueA[x, y])));
0
Эксперт .NETАвтор FAQ
9495 / 4668 / 1674
Регистрация: 11.01.2015
Сообщений: 5,851
Записей в блоге: 34
15.05.2016, 10:35 4
aksiniyame, У вас случайные числа распределены от -100 до 100, а компоненты цвета могут быть только в диапазоне от 0 до 255. Естественно, отрицательные числа нельзя занести в компоненты цвета.
Пишите что-то типа такого:
C#
1
redA[x, y] = 128 + Generation[x, y];
Ну и кроме того, в альфа канал вообще нет смысла заносить ваши случайные числа, сделайте его равным 255. Альфа канал - это прозрачность а не цвет.
1
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 54
15.05.2016, 10:43  [ТС] 5
Спасибо, помогло) Не подскажите, как сделать картинку не такой зашумленной? Пока картинку шумит так, а хотелось бы существенно понизить интенсивность шума.
0
Миниатюры
Белый гауссовский шум  
Эксперт .NETАвтор FAQ
9495 / 4668 / 1674
Регистрация: 11.01.2015
Сообщений: 5,851
Записей в блоге: 34
15.05.2016, 10:56 6
aksiniyame,
Во-первых, ваш код генерирует не гаусовский шум. Даже близко. Зачем вы считаете дисперсию по всем точкам? А потом на нее делите? Это же бессмысленно. Ну и корме того, распределение у вас не нормальное, а равномерное.

Во-вторых, у вас в первоначальном варианте было правильно, нужно сложить значение пиксела со случайным числом. Но при этом нужно делать проверку на выход за диапазон 0-255. Если получается число меньше 0, то заносить 0, если больше 255 - заносить 255.

А вообще вот здесь я писал реализацию гаусовского шума.
1
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 54
15.05.2016, 11:01  [ТС] 7
Спасибо большое! Попробую разобраться)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2016, 11:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Пропустить белый шум через ФНЧ
Приветствую! Возникла задача пропустить белый шум через фильтр нижних частот. С матлабом работаю...

Как наложить белый шум на случайный сигнал
я задаю случайный сигнал через rand(0,480), так как сигнал мне нужен от 0 до 0.5, то умножаю его на...

Samsung np-350u2 зависает ноутбук и экран показывает только белый шум
Нужен совет! Зависает ноут когда ему захочется, может сразу после включения может и потом!Но при...

"Цветной" белый шум
Доброго времени суток !! Имеются 10 магазинов. на всех магазинах одинаковая конфигурация. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.