我經常發現自己希望使用自定義函數在一個維度上摺疊n維矩陣,並且無法弄清楚是否有可用於執行此操作的簡明咒語。在MATLAB中通過數組的單個維度分配函數?
例如,在解析圖像時,我經常想要做這樣的事情。 (注說明性的例子只有我知道這個特定的情況下約rgb2gray
!。)
img = imread('whatever.jpg');
s = size(img);
for i=1:s(1)
for j=1:s(2)
bw_img(i,j) = mean(img(i,j,:));
end
end
我很想表達這種類似:
bw = on(color, 3, @mean);
或
bw(:,:,1) = mean(color);
是有一個簡短的方法來做到這一點?
編輯:顯然
mean
已經這樣做;我希望能夠爲我寫的任何功能做到這一點。例如,
...
filtered_img(i,j) = reddish_tint(img(i,j,:));
...
其中
function out = reddish_tint(in)
out = in(1) * 0.5 + in(2) * 0.25 + in(3) * 0.25;
end
mm,對這些情況很有用。我應該更清楚 - 我經常嘗試使用我寫的一些函數,比如'0.3 * r + 0.2 * g + 0.5 * b'。 – 2010-06-01 15:13:06
@Alex:我更新了答案,指出如何使用元素明確的運算符將函數應用於矩陣。 – gnovice 2010-06-01 15:32:18
您不需要將其轉換爲單元格數組。只需使用'arrayfun'請參閱:http://www.mathworks.com/access/helpdesk/help/techdoc/ref/arrayfun.html – Geoff 2010-06-01 16:09:26