Page 1 of 1

Скользящее суммирование элементов матрицы

PostPosted: 06 Nov 2019, 12:48
by Dionisij
Добрый день.
Помогите пожалуйста найти решение.
Имеется следующая задача:
По матрице (яркости, нормированной) полученной из изображения необходимо произвести скользящее суммирование (так называемое суммирование). Получив новую выходную матрицу построить изображение

Разрешение изображение непостоянно - т.е. размер матрицы может изменятся.
Размер аппертуры так же может меняться (но матрица аппертуры квадратная).

Для решения задачи пытаюсь использовать Array Subset для выделения субматрицы (по размеру аппертуры), два цикла (внутренний для перемещения субматрицы по столбцам (вдоль строки), внешний для перемещения по строкам) для формирования выходной матрицы применяю Insert Into Array. В программе осуществлена попытка реализации только части аппертуры (при такой реализации потом придеться опять организовывть двойной цикл что бы сложение элементов производить по строкам).
Image
Image
Столкнулся с массой проблем:
1) В выходной матрице в конце строки появляются дополнительные элементы которых быть не должно
2) Начиная со второй строки начальные элементы не суммируются а просто копируются, с ростом номера строки количество этих элементов увеличивается.
3) Ни как не могу разобраться с тем как задать дискретный шаг перемещения аппертуры. т.е. у в первой строке у меня суммируются соседние элементы: 1+2 ; 2+3 ; 3+4... а должны только 1+2 ; 3+4. Если добавить суммирование счетчика итераций i + размер аппертуры будет пропущено начальное значение (и дискретный шаг суммирования элементов все равно у меня увы не получился)
Image

Re: Скользящее суммирование элементов матрицы

PostPosted: 06 Nov 2019, 14:37
by zxc_pavel
Для изображений в labview есть imaq, там есть медианный фильтр
Если руками написать, то в примере length - это сколько точек вокруг "0" - нет усреднения, "1" - окно 3x3 ...

Re: Скользящее суммирование элементов матрицы

PostPosted: 06 Nov 2019, 14:52
by IvanLis
Dionisij, не совсем понятно, что Вы хотите получить...
Если Вы работаете с 2D массивом, то зачем вы переходите на строки? Выделяйте из исходного 2D массив (необходимый ROI) и обрабатывайте его.
Но я подразумеваю, что нужно реализовать обычную свертку, для этого используется функция Convolution, нужно только правильно ядро сформировать. Я в примере сделал "среднее значение". Вот результат:
Снимок экрана от 2019-11-06 14-44-02.png

1.png

Untitled 1.vi
lv2010 save from lv2016
(150.83 KiB) Downloaded 12 times