Я пытаюсь написать код, который реализует median filtering на двумерном массиве. Вот изображение для иллюстрации:Двумерная матричная медианная фильтрация
Программа начинается в начале массива. Максимальный размер массива составляет 100. Я знаю, что я могу использовать массив, как:
int a[100][100];
хранить вход, и что я могу перебрать часть этого массива, используя два for
петли, как это:
for(i=0;i<size_filter;i++)
for(j=0;j<size_filter;j++)
temp[i][j]=a[i][j] // not so sure
Но как я могу сделать этот цикл кода над соседями каждого элемента массива, вычислить их медианную и заменить центральный элемент на медианную?
Для некоторых примеров того, что я пытаюсь сделать, скажем, что вход является матрицей 5x5, поэтому размер входной 5. И я хочу, чтобы запустить 3x3 медианный фильтр на него, то есть каждый элемент должен быть заменен медианью окружающих его элементов 3x3.
Программа начинается с указателя угла (0,0). Для этого индекса он сканирует окружение 3x3, окружающее его (из которого только 4 индекса фактически лежат внутри входного массива), который содержит значения 0, 0, 1 и 0. Медиана этих значений равна 0, так что это то, что код должен выводиться для этого индекса массива.
В приведенном ниже рисунке, число в жирного курсива является центр ячейки, и простое смелых числа своих соседей в регионе 3х3 вокруг него:
00 0 0 0 10 0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0
Вот еще один пример , на этот раз с индексом центра (0,1):
000 0 0 100 1 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0
на этот раз, элементы в области 3х3 (за исключением трет шланги вне входного массива) имеют значения 0, 0, 0, 1, 0 и 0, и, следовательно, их медиана равна 0.
Вот еще один пример, на этот раз с середины ввода, на индекс центр (3,2):
0 0 0 0 0 100 1 0 110 0 0 011 0 0 0 0 0 0 0
на этот раз элементы в пределах области 3х3 имеют значения 1, 0, 0, 1, 1, 0, 0, 1 и 1, и их средний в поэтому 1.
Заключительный пример:
<size of array><size filter> <data>
8
3
0 0 0 0 0 0 0 0
0 5 0 0 6 0 0 0
0 0 0 0 0 7 0 0
0 0 0 0 5 0 0 0
0 0 0 5 6 0 0 0
0 0 8 5 5 0 0 0
0 0 0 7 0 0 9 0
0 0 0 0 0 0 0 0
Output:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 5 5 0 0 0
0 0 0 5 5 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Я попытался отредактировать ваш вопрос, чтобы сделать его более читабельным и грамматическим, но мне иногда было трудно сказать, что вы пытались сказать. Пожалуйста, проверьте, чтобы я не вводил никаких ошибок и исправлял если вы найдете какой-либо. Спасибо! –
Спасибо, @IlmariKaronen –