Spesso mi ritrovo a voler comprimere una matrice n-dimensionale attraverso una dimensione usando una funzione personalizzata, e non riesco a capire se c'è un incantesimo conciso che posso usare per farlo.Distribuire una funzione su una singola dimensione di un array in MATLAB?
Ad esempio, durante l'analisi di un'immagine, spesso desidero fare qualcosa di simile. (Nota Esempio illustrativo solo io so rgb2gray
per questo caso specifico!..)
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
Mi piacerebbe esprimere questo come qualcosa di simile:
bw = on(color, 3, @mean);
o
bw(:,:,1) = mean(color);
Is c'è un modo per farlo?
MODIFICA: Apparentemente lo
mean
lo fa già; Voglio essere in grado di farlo per qualsiasi funzione che ho scritto. Ad esempio,
...
filtered_img(i,j) = reddish_tint(img(i,j,:));
...
dove
function out = reddish_tint(in)
out = in(1) * 0.5 + in(2) * 0.25 + in(3) * 0.25;
end
Mm, utile per quei casi. Dovrei essere più chiaro - sto spesso cercando di usare una funzione che ho scritto come '0,3 * r + 0,2 * g + 0,5 * b'. –
@Alex: Ho aggiornato la risposta per indicare come gli operatori a livello di elemento possono essere utilizzati per applicare una funzione a una matrice. – gnovice
Non è necessario convertirlo in un array di celle. Basta usare 'arrayfun' vedi: http://www.mathworks.com/access/helpdesk/help/techdoc/ref/arrayfun.html – Geoff