Многие основные функции MATLAB, такие как MEAN , MAX , MIN , SUM и т. Д., Предназначены для работы через удельный размер:
bw = mean(img,3); %# Mean across dimension 3
Вы также можете воспользоваться тем, что арифметические операторы MATLAB предназначены для поэлементной работы с матрицами. Например, операция в вашей функции reddish_tint
может быть применена ко всем пикселям вашего изображения с помощью одной строки:
filtered_img = 0.5.*img(:,:,1)+0.25.*img(:,:,2)+0.25.*img(:,:,3);
Чтобы обработать более общий случай, когда вы хотите применить функцию к произвольному измерению N-мерной матрицы, вы, вероятно, захотите написать свою функцию так, чтобы она принимала дополнительный входной аргумент, для которого измерение должно работать ( как и вышеупомянутые функции MATLAB), а затем использует некоторую простую логику (то есть операторы if-else) и поэлементные матричные операции, чтобы применить свои вычисления к надлежащему измерению матрицы.
Хотя я бы не советовал использовать его, - это быстрое и грязное решение, но оно довольно уродливо и вычислительно дороже. Вы можете использовать функцию NUM2CELL для сбора значений по измерению вашего массива в ячейки массива ячеек, а затем применить свою функцию к каждой ячейке, используя функцию CELLFUN :
cellArray = num2cell(img,3); %# Collect values in dimension 3 into cells
filtered_img = cellfun(@reddish_tint,cellArray); %# Apply function to each cell