3 Stimmen

Zwei Ausgaben mit blockproc

Ich habe diese Funktion, die den Wert des Binärmusters eines 3*3-Blocks berechnet, der sich aus der Schwellenwertbildung der 8 umgebenden Pixel mit dem Zentralpixel ergibt, und zwei Ausgaben zurückgibt: den Dezimalwert des Binärcodes, den gleichen Dezimalwert, wenn er einheitlich ist, oder 59, wenn nicht.

function [out1, out2] = lbpblock(im)
%... Implementierungsdetails
out1 = dezimal;
out2 = einheitlich;
end

Das Problem tritt auf, wenn versucht wird, blockproc wie folgt zu verwenden

Ergebnis = blockproc(im,[3 3],@lbpblock);

Das Ergebnisarray hat nur zwei Dimensionen (z. B. 85*85) und enthält nur die erste Ausgabe.

Als ich versuchte

[res1 res2] = blockproc(im,[3 3],@lbpblock); 

Erhalte ich die Fehlermeldung "Fehler bei der Verwendung von ==> blockproc Zu viele Ausgabeargumente".
Ich versuchte, die Funktionssignatur zu ändern

function out = lbpblock(im)
%... Implementierungsdetails
out = [dezimal, einheitlich];
end

Das Ergebnisarray hat wieder nur zwei Dimensionen, jetzt jedoch (85*170), wobei die erste Ausgabe in ungeraden Spalten und die zweite in geraden gespeichert wird.
Gibt es einen Trick, um blockproc dazu zu bringen, das Ergebnis in einem 85*85*2-Array zu speichern??

1voto

Trilarion Punkte 9841

Sie können ein NxNx2-Array als Ausgabe erhalten, indem Sie in der dritten Dimension konkatenieren.

Beispiel:

im = magic(10);
r = blockproc(im, [3, 3], @func);

function r = func(im)
r1 = mean(im.data(:));
r2 = std(im.data(:));
r = cat(3, r1, r2);

Die wichtige Zeile ist cat(3, output1, output2).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X