A menudo me encuentro queriendo colapsar una matriz n-dimensional en una dimensión utilizando una función personalizada, y no puedo averiguar si hay un encantamiento conciso que pueda usar para hacer esto.Distribuir una función en una dimensión única de una matriz en MATLAB?
Por ejemplo, cuando analizo una imagen, a menudo quiero hacer algo como esto. (Nota Ejemplo ilustrativo solamente lo que sé sobre rgb2gray
para este caso específico!..)
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
me gustaría expresar esto como algo parecido a:
bw = on(color, 3, @mean);
o
bw(:,:,1) = mean(color);
Es hay una manera corta de hacer esto?
EDITAR: Aparentemente
mean
ya lo hace; Quiero poder hacer esto para cualquier función que haya escrito. Por ejemplo,
...
filtered_img(i,j) = reddish_tint(img(i,j,:));
...
donde
function out = reddish_tint(in)
out = in(1) * 0.5 + in(2) * 0.25 + in(3) * 0.25;
end
Mm, útil para esos casos. Debería ser más claro: a menudo trato de usar alguna función que escribí como '0.3 * r + 0.2 * g + 0.5 * b'. –
@Alex: actualicé la respuesta para señalar cómo los operadores de elementos pueden usarse para aplicar una función a una matriz. – gnovice
No necesita convertirlo a una matriz de celdas. Simplemente use 'arrayfun', consulte: http://www.mathworks.com/access/helpdesk/help/techdoc/ref/arrayfun.html – Geoff