Seit blockproc
(und die veraltete blkproc
) sind beide Funktionen in der Image Processing Toolbox, ich dachte, dass ich eine grundlegende MATLAB Lösung hinzufügen würde, die keine zusätzlichen Werkzeugkästen erfordert ...
Wenn Sie ein teilen möchten Matrix in Submatrizen, eine Möglichkeit besteht darin, mat2cell
zu verwenden, um die Matrix aufzubrechen und jede Submatrix in einer Zelle eines Zellenarrays zu speichern. Für Ihren Fall würde die Syntax wie folgt aussehen:
C = mat2cell(I, [128 128], [128 128]);
C
ist nun ein 2-by-2 Zellenfeld mit jeder Zelle eine 128-by-128 Submatrix von I
speichern. Wenn Sie für jede Zelle eine Operation ausführen möchten, können Sie die Funktion cellfun
verwenden. Zum Beispiel, wenn Sie den Mittelwert des Wertes in jeder Submatrix nehmen wollen, würden Sie wie folgt vor:
meanValues = cellfun(@(x) mean(x(:)), C);
Das erste Argument ein function handle zu einem anonymous function ist, die zunächst jede Submatrix in einen Spaltenvektor umformt und dann nimmt den Mittelwert. Die Ausgabe ist eine 2-mal-2-Matrix der Mittelwerte für jede Untermatrix.Wenn die Funktion, die Sie cellfun
passieren Ausgänge verschiedener Größen oder Typen für jede Zelle schafft, dann wird cellfun
ein Problem, sie verketten haben und wird einen Fehler werfen:
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
Wenn Sie ..., 'UniformOutput', false);
bis zum Ende des Anrufs in den cellfun
, dann wird die Ausgabe in dem obigen Fall stattdessen ein 2-by-2 Zellenarray sein, das die Ergebnisse der Durchführung der Operation für jede Submatrix enthält.
Wenn Sie immer noch eine alte Version der Image Processing Toolbox mit der BLKPROC-Funktion verwenden, ändert sich die Syntax des obigen Beispiels in: 'B = blkproc (I, [8 8], @ (x) mean (x (:))); ' – gnovice