1 / 1 / 0
Регистрация: 29.05.2012
Сообщений: 12
1

Обработка изображений. Лапласиан

29.04.2014, 21:43. Показов 1925. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Цифровая обработка изображений.
Помогите найти ошибку. Сама программа работает без ошибок в отладчике(запускается, выполняется до конца), но изображение, которое сохраняется, весит всего 1000 байтов и вообще пустое.
Обработка изображений. Лапласиан

Почему-то минимальные элементы нулевые, хотя вроде как не должно так быть.
Да и максимальные повторяются.

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
private void button1_Click(object sender, EventArgs e)
        {
            
            int[,] mask = new int[,] {  { 0, 1, 0 }, 
                                          { 1, -4, 1 }, 
                                          { 0, 1, 0 } };
            Bitmap image = new Bitmap("1.jpg"); //Основное изображение.;
            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];
 
            for (int i = 2; i < (imageWidth - 1); i++)
                for (int j = 2; j < (imageHeight - 1); j++)
                {
                    int red = 0, green = 0, blue = 0, alpha = 0;
                    for (int x = -1; x <= 1; x++)
                        for (int y = -1; y <= 1; y++)
                        {
                            Color pixel = image.GetPixel(i + x, j + y);
                            red += pixel.R - mask[x + 1, y + 1];
                            green += pixel.G - mask[x + 1, y + 1];
                            blue += pixel.B - mask[x + 1, y + 1];
                            alpha += pixel.A;
 
                            
                        }
                    redA[i, j] = red;
                    greenA[i, j] = green;
                    blueA[i, j] = blue;
                    alphaA[i, j] = alpha;
                }
 
            int minr = 0;
            int maxr = 0;
 
            int ming = 0;
            int maxg = 0;
 
            int minb = 0;
            int maxb = 0;
 
            int maxa = 0;
            int mina = 0;
 
            for (int i = 0; i < imageWidth-1; i++) //min and max element array color
            {
                for (int j = 0; j < imageHeight-1; j++)
                {
                    //min
                    if (minr > redA[i, j])      {minr = redA[i, j];}
                    if (ming > greenA[i, j])    {ming = greenA[i, j];}
                    if (minb > blueA[i, j])     {minb = blueA[i, j];}
                    if (mina > alphaA[i, j])    {mina = alphaA[i, j];}
                    //max
                    if (maxr < redA[i, j])      {maxr = redA[i, j];}
                    if (maxg < greenA[i, j])    {maxg = greenA[i, j];}
                    if (maxb < blueA[i, j])     {maxb = blueA[i, j]; }
                    if (maxa < alphaA[i, j])    {maxa = alphaA[i, j];}
                    }
                }
            
 
            for (int x = 0; x < imageWidth-1; x++) //delete min and max
            {
                for (int y = 0; y < imageHeight-1; y++)
                {
                    redA[x,y] = redA[x,y] - minr;
                    greenA[x,y] = greenA[x,y] - ming;
                    blueA[x,y] = blueA[x,y] - minb;
                    alphaA[x,y] = alphaA[x,y] - mina;
 
                    redA[x,y] = redA[x,y]*(255/maxr);
                    greenA[x,y] = greenA[x,y]*(255/maxr);
                    blueA[x,y] = blueA[x,y]*(255/maxr);
                    alphaA[x,y] = alphaA[x,y]*(255/maxr);
 
                    result.SetPixel(x, y, Color.FromArgb(
                    (int)(alphaA[x,y]),
                    (int)(redA[x, y]),
                    (int)(greenA[x, y]),
                    (int)(blueA[x, y])));
 
                }
            }
 
 
            pictureBox1.ImageLocation = "1.jpg";
            pictureBox2.Image = result; //Выводим.
            result.Save("result.jpg");
 
 
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2014, 21:43
Ответы с готовыми решениями:

обработка изображений в C#
обработка изображений... у меня есть вот такая программа (файл вложен), там считает размерность...

Обработка изображений
Здравствуйте! Пробую разобраться с частотной обработкой изображений. В инете нашел простое...

Многопоточная обработка изображений
Приложение должно обеспечивать запуск до 10 потоков, обрабатывающих до 10 различных изображений...

Обработка изображений
Подскажите пожалуйста, какими средствами можно реализовать задачу: есть картинка карты Украины, как...

3
1 / 1 / 0
Регистрация: 29.05.2012
Сообщений: 12
30.04.2014, 12:13  [ТС] 2
Вопрос закрыт
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
30.04.2014, 15:48 3
fullgream, и в чем была ошибка?
0
1 / 1 / 0
Регистрация: 29.05.2012
Сообщений: 12
30.04.2014, 15:53  [ТС] 4
C#
1
red += pixel.R*mask[x + 1, y + 1];
На этом моменте. У меня вместо умножения был знак минус.

В последнем цикле
alphaA[x, y] = 255;

Правда программа все равно только лапласиана применила, т.е. выделила границы, а все цвета изображения скушала, но меня и такой вариант устроил
0
30.04.2014, 15:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2014, 15:53
Помогаю со студенческими работами здесь

Обработка изображений, память
Здравствуйте, многопоточно (System.Threading.Tasks.Parallel.For) обрабатываю 134 изображения, на...

Обработка изображений (распознавание текста)
Здравствуйте. Задача следующая: имеется сканированный документ с рукописным текстом. Каким образом...

Низкочастотная фильтрация изображений (книга Гонсалеса “Цифровая обработка изображений”)
Здравствуйте. Я пытаюсь реализовать на java низкочастотную фильтрацию изображений. Реализую по...

Обработка изображений. Изменение размеров изображений
Подскажите пожалуйста, как изменить размер изображения в MathCad. Какой код нужен для...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru