2016-04-24 3 views
0

Ich muss eine sehr große Matrix nehmen, die mit der Funktion imread() erzeugt wird. Dies verwandelt ein Bild (meins ist eine JPG-Datei; 691x763) in eine Matrix.Warum gibt meine Matrix nicht die korrekte Genauigkeit aus?

Ich muss jedes Element in der Matrix durch 255 teilen und jedes Element mit mindestens 3 Dezimalstellen zeigen.

Was ich versucht habe:

output_precision(4) aber es hat nicht für die Elemente in der Matrix zu arbeiten.

format long e aber die Werte in der Matrix waren immer noch nicht betroffen.

Antwort

1

Ich schätze imread() gab Ihnen eine Matrix von uint8. Versuchen Sie stattdessen:

I = imread('image.jpg'); %// your image 
A = double(I)/255; %//convert matrix to double before dividing it by 255 
2

Sie sollten im2doublehttp://octave.sourceforge.net/image/function/im2double.html verwenden, die die Skalierung für Sie 0..1 tut unabhängig vom Eingangsformat, das uint, uint16, int16 und so weiter sein könnte.

+0

Gibt es einen Unterschied zwischen der Verwendung von 'im2double' und der in der anderen Antwort gezeigten Methode? – whatwhatwhat

+2

Wie ich bereits in meiner Antwort geschrieben habe, wird im2double unabhängig vom Eingabeformat arbeiten. Wenn das Eingabebild beispielsweise uint16 ist, wird es durch 65535 geteilt. UTSL! https://sourceforge.net/p/octave/image/ci/default/tree/inst/imcast.m https://sourceforge.net/p/octave/image/ci/default/tree/src/im2double.m .in – Andy

+1

@whatwhatwhat und da die Funktion in den Oktavkern verschoben wurde, siehe [Quelle dort] (http://hg.savannah.gnu.org/hgweb/octave/file/9810e483b42f/scripts/image/im2double.m) stattdessen. – carandraug

Verwandte Themen