Форум программистов, компьютерный форум, киберфорум
Математика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/55: Рейтинг темы: голосов - 55, средняя оценка - 4.98
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1

Двумерная свертка матриц(объяснить формулу)

03.07.2017, 12:25. Показов 10522. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть коротенький теоретический материал оценки размытости изображения, и вот мне не понятно как я из свертки матриц получаю число. Ведь результатом сверки 2х матриц должна быть другая матрица, а не число, если я правильно понимаю.

вот материал:

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

f(x,y) = ax + by + cx^2 + dy^2.

Чем выше значение кривизны трехмерной поверхности, тем более сфокусированным будет исследуемое изображение. Коэффициенты a, b, c, d приближенно вычисляются по методу наименьших квадратов путем свертки исходного изображения с матрицами M1, M2:

M1 =
(-1/6 0 1/6)
(-1 /6 0 1/6)
(-1 /6 0 1/6)

M2 =
(1/5 0 1/5)
(1/5 0 1/5)
(1/5 0 1/5)

a = M1 * I; b=M1' * I;
c = (3/2)M2 * I - M2' * I;
d = (3/2)M2' * I - M2 * I;

где M1',M2' - Транспонированные матрицы M1, M2. I - исходное изображение. * - двумерная операция свертки.

Оценкой размытости изображения при этом является сумма абсолютных величин значений коэффициентов:

Gc = |a| + |b| + |c| + |d|


0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.07.2017, 12:25
Ответы с готовыми решениями:

Двумерная свертка
Добрый день. Пытаюсь в Matlab самостоятельно реализовать двумерную свертку и сравниваю ее со встроенной функцией CONV2. Для...

Ввести 5 матриц, вывести число квадратных матриц и объяснить что какой оператор значит
нужно написать программу на задачу: ввести 5 матриц, вывести число квадратных матриц и объяснить что какой оператор значит. помогите...

Не могу объяснить формулу нахождения цифры в k-ой позиции
Здравствуйте , помогите пожалуйста . Есть задача, я ее написал , а вот формулу объяснить не могу. Весь интернет перерыл дано целое число...

18
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
04.07.2017, 00:46
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
результатом сверки 2х матриц должна быть другая матрица, а не число
не обязательно. Скорее всего, предполагается, что
https://www.cyberforum.ru/cgi-bin/latex.cgi?M*I=\sum_{i,j=1}^N I_{ij}M_{ij}.
1
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
04.07.2017, 13:26  [ТС]
splen, проблема состоит в том, что после свертки матрицы изображения и ее маски на выходе получается матрица размером равной количеству пикселей изображения. Если суммировать значение яркости каждого пикселя, то:

во-первых: получаются огромные числа, которые не факт что войдут в выделенную для переменной память;
во-вторых: результат все равно выглядит странно, так как после проведенных мной тестов просуммированное значение не имеет никакого отношения к размытости.
0
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
04.07.2017, 14:26
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
на выходе получается матрица
Операция выполняется отдельно для каждого внутреннего пикселя (и его ближайших соседей), и на выходе всякий раз получается одно число. Для данных коэффициентных матриц N=3. Более точное равенство -
https://www.cyberforum.ru/cgi-bin/latex.cgi?(M*I)_{pq}=\sum_{i,j=1}^{3}M_{ij}I_{p+i-2,q+j-2}.
Если изображение описывается матрицей Ipq, 1 <= p <= P, 1 <= q <= Q, то в предыдущем равенстве 2 <= p <= P-1, 2 <= q <= Q-1.
1
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
04.07.2017, 15:00  [ТС]
splen, то есть здесь после свертки получается тоже матрица, но 3х3, по которой и считается сумма элементов?
0
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
04.07.2017, 15:04
Свёртка включает и вычисление суммы. Поэтому после свёртки остаётся одно число.
1
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
04.07.2017, 15:36  [ТС]
splen,

C++
1
2
3
4
5
for (i = 0; i < 3; i++)
            for (j = 0; j < 3; j++)
                for (p = 2; p < P; p++)
                    for (q = 2; q < Q; q++)
                        sum += img.at<uchar>(p, q)*m[i][j];
Я правильно понял?
0
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
04.07.2017, 15:43
Цикл по p и q при суммировании не нужен.
Вместо "img.at<uchar>(p, q)*m[i][j]" должно быть "img.at<uchar>(p+i-1, q+j-1)*m[i][j]".
1
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
04.07.2017, 16:03  [ТС]
splen, дак а как тогда мне менять эти p и q, если мне нужно оценить изображение в целом, а не только определенную точку?
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
04.07.2017, 17:10
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
представляется как трехмерная поверхность второго порядка
Разве это не значит что фокусируют свет в точку?

Почему не сверять яркости двух пикселей или количество пересвеченных?
Если
аппаратный предел яркости пикселей есть
то
Количество пересвеченных пикселей это величина размытия.
Иначе
Найти в окне свертки N на N самое яркое окно. Разность яркости центрального пикселя этого окна и яркости например средней яркости пикселей периферии этого окна будет величина размытия.
N=может хватит и 3.
Вроде много быстрей чем 6 сверток.

Добавлено через 2 минуты
Кстати вес для расчета яркости окна можно взять хоть такой.
0.5 0.5 0.5
0.5 1.0 0.5
0.5 0.5 0.5
Или другой нелинейный.

Добавлено через 15 минут
Может вообще так подойдет?
Ищем Max и Min яркости в растре.
Считаем количество пикселей с яркостью больше (Max- Min)/2.
1
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
04.07.2017, 19:42
Величина Gc=Gcpq характеризует размытость в одной точке (p,q).
Если нужно оценить изображение в целом, то можно как-то учитывать размытость в отдельных точках.
Это можно делать по-разному, и в приведенном фрагменте текста об этом ничего не говорится.
Например, можно усреднить эту величину по всем внутренним точкам изображения:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\bar{Gc}=\frac{1}{(P-2)(Q-2)} \sum_{p=1}^{P-2}\sum_{q=1}^{Q-2}Gc_{pq}.
Можно усреднять по части изображения, усреднять с весом и т. п.
1
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
05.07.2017, 09:46  [ТС]
Excalibur921, скорость работы у меня пока не стоит в списке приоритетов, главное решить основную задачу. Да и вообще я ничего не понял из того, что вы написали. Ориентировка на максимальную и минимальную яркость выглядит как костыль, а изображение может быть размыто в непредсказуемых местах.

Добавлено через 13 часов 5 минут
splen, Значит все таки пытаться использовать такой многомерный цикл, как я уже представлял выше, с учетом координат изображения (p+i-1, q+j-1)?
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
05.07.2017, 10:06
Алгоритм с поста1 подходит только если линза фокусирует изображение светящейся точки. Поэтому и написано что поверхность 2 порядка. Он не предназначен не для чего другого.
Если у вас сложное изображение с нелинейным размытием то он вам вообще не подходит.
Опишите что это и для чего изначально. Скорей всего нужно искать что то вроде “анализ размытия изображения”
1
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
05.07.2017, 10:14  [ТС]
Excalibur921, алгоритм я взял из статьи, которую я прикрепил. Там в конце были представлены тесты всех методов на изображении, в том числе и этого метода.
Вложения
Тип файла: pdf 1645090.pdf (330.1 Кб, 12 просмотров)
0
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
05.07.2017, 13:07  [ТС]
Попытался применить такую свертку:

C++
1
2
3
4
5
6
7
8
for (i = 0; i < 3; i++)
            for (j = 0; j < 3; j++)
                for (p = 2; p < P; p++)
                    for (q = 2; q < Q; q++)
                        sum += img.at<uchar>(p+j-2, i+q-2)*m[i][j];
 
        sum /= P - 2;
        sum /= Q - 2;
И результат какой-то неоднозначный. Пробовал брать свое фото и искуственно размывать его с использованием фильтров графического редактора и метод вроде что-то выдает разумное(чем больше размытие, тем меньше число), но когда я беру рандомные фото, где размытие достигается плохой фокусировкой камеры, как приведены примеры в этой статье, то просчитанное значение не зависит от резкости.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
05.07.2017, 16:41
В растре 100х100 канал разбить на квадраты 10х10 будет 100 матриц М.
Величина разбиения зависит от размера деталей на фото. Каждой M найти a,b,c,d как в тексте и все сложить.

Наверно этот метод лучше всего подойдет для анализа “Пятна рассеивания” . Светящееся точка должна быть на примерно оптической оси камеры. Тогда a,b,c,d искать 1 раз.
https://ru.wikipedia.org/wiki/Пятно_рассеяния

Вообще лучше сначала сделать визуальный тест метода на мелкой матрице растр 10 на 10. Задать a,b,c,d слайдерами. Построить поверхность1 10 на 10 точек.
Найти a,b,c,d. Построить поверхность2. Сверить визуально примерно совпадают?

Наверно для адекватности метода нужно разбивать растр на матрицы порядка 5 на 5 пикселей это жесть...
1
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
05.07.2017, 17:52
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
Попытался применить такую свертку:
C++
1
2
3
4
5
6
7
for (i = 0; i < 3; i++)
      for (j = 0; j < 3; j++)
        for (p = 2; p < P; p++)
          for (q = 2; q < Q; q++)
            sum += img.at<uchar>(p+j-2, i+q-2)*m[i][j];
sum /= P - 2;
sum /= Q - 2;
Этот цикл составлен неверно (перепутан порядок вложения, вообще нет модулей и т. п.).
Если трудно разобраться с 4-х-уровневым циклом, начните с того, что напишите функцию,
которая принимает img, p и q, а возвращает Gcpq, а потом пишите цикл по p и q.
Решите, в каких пределах будут изменяться p и q - от 0 до P-1 и Q-1 или от 1 до P и Q.

Добавлено через 35 минут
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
...примеры в этой статье...
Кстати, там для определения меры размытости всего изображения локально используется лапласиан
(это не так принципиально), но берётся не его среднее по изображению, а дисперсия.
Тоже приемлемый подход.
1
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
05.07.2017, 19:14  [ТС]
splen, я интерпретировал питоновский код из той статьи в с++(правда не знаю насколько эта система будет стабильна), в итоге все это математическое колдовство превратилось в несколько строчек:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double getBlur(char* url)
{
    
    Mat image = imread(url, CV_LOAD_IMAGE_GRAYSCALE);
    image.convertTo(image, CV_64F);// convert to double
    normalize(image, image, 0, 1, cv::NORM_MINMAX);
    Mat dest;
    cv::Laplacian(image, dest, image.type());
    cv::Mat mean, stddev;
    cv::meanStdDev(image, mean, stddev);
 
    auto res = stddev.at<double>(0);
    return res;
}
но я пока не знаю как работает лапласиан, а мне теоретическую информацию нужно будет в документации описывать. И значения выводятся в малых долях от 0 до 1, поэтому придется еще домножать на 100 или 1000, чтобы оценка презентабельно выглядела.
0
1728 / 1020 / 181
Регистрация: 03.06.2012
Сообщений: 1,220
05.07.2017, 19:40
Если устраивает, пользуйтесь.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.07.2017, 19:40
Помогаю со студенческими работами здесь

Обработка матриц. Просьба объяснить программу.
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; void main() { int a,i,j,p,d,x,b; clrscr(); printf(&quot;vvedite znachenie a&quot;); ...

Записать формулу вычисления произведения матриц
если известно,что матрица М находится в диапазоне А1:Д4, а матрица Х- в F1:F4. MMMTXT (заранее благодарю!)

Найти формулу количества бинарных квадратных матриц порядка n
найти формулу количества бинарных квадратных матриц порядка n, в каждой из которых на главной диагонали стоит k нулей, 1&lt;=k&lt;=n. Найти...

Перемножение матриц, умножение матриц на вектор, сложение матриц
Помогите пожалуйста написать программу, которая производит основные действия с матрицами произвольных размеров (перемножения 2х матриц,...

Определите класс матриц. Напишите перегруженные конструкторы для создания одномерной и двумерной матриц. В конструкторы передаются размерности матриц
Доброго времени суток всем) Извините если не в том разделе) Не могу понять как решить данную задачу &quot;(Определите класс матриц....


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru