许多基本的MATLAB函数,如
MEAN,
MAX,
MIN,
SUM等,旨在跨特定维度运行:
bw = mean(img,3); %# Mean across dimension 3
您还可以利用MATLAB arithmetic operators设计为在矩阵上以元素方式运行的事实.例如,函数reddish_tint中的操作可以使用以下单行应用于图像的所有像素:
filtered_img = 0.5.*img(:,:,1)+0.25.*img(:,:,2)+0.25.*img(:,:,3);
为了处理你想要将函数应用于N维矩阵的任意维度的更一般情况,你可能想要编写你的函数,使它接受一个额外的输入参数来操作哪个维度(如上所述) – 提到的MATLAB函数do)然后使用一些简单的逻辑(即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