2015-03-16 8 views
9

In Matlab Farben werden in der Regel durch drei Element Vektoren von RGB-Intensitätswerte mit Präzision Uint8 (Bereich 0 - 255) oder doppelt (Bereich 0 - 1) dargestellt. Matlabs-Funktionen wie imshow funktionieren mit jeder Darstellung, die sowohl in einem Programm einfach zu verwenden ist.Lassen Sie Matlab eine Warnung ausgeben, wenn Sie ein Double in ein Uint8 konvertieren und umgekehrt?

Es ist jedoch ebenso einfach, einen Fehler beim Zuweisen von Farbwerten von einer Matrix eines Typs zu der eines anderen Typs einzuführen (weil der Wert still konvertiert wird, aber nicht auf den neuen Bereich skaliert wird). Nachdem ich gerade einige Stunden damit verbracht habe, einen solchen Fehler zu finden, möchte ich sicherstellen, dass er nie wieder eingeführt wird.

Wie mache ich Matlab eine Warnung anzeigen, wenn Typumwandlung stattfindet?

Ideal wäre es nur, wenn die Konvertierung zwischen double und uint8 ist. Es sollte auch schwierig sein, sie zu deaktivieren (d. H. Die Option wird nicht zurückgesetzt, wenn ein Arbeitsbereich geladen wird oder wenn Matlab abstürzt).

+2

* Ich habe gerade einige Stunden damit verbracht, einen solchen Käfer zu finden [...] * Ich fühle deine Schmerzen. MATLABs schwaches System hat mich dazu gebracht, zu Julia zu wechseln ... – Jubobs

Antwort

9

Eine mögliche Lösung besteht darin, Ihre eigene uint8-Funktion zu definieren, die uint8 konvertiert und eine Warnung ausgibt, wenn ein Wert abgeschnitten wurde.

Sie sollten diese Funktion in einem Ordner platzieren, in dem sie die eingebaute Funktion uint8 schattiert. Zum Beispiel, Ihr Benutzerordner ist eine gute Wahl, wie es normalerweise der erste in path erscheint.

Oder, wie von Sam Roberts bemerkt, wenn Sie diese Funktion wollen nur aufgerufen werden, wenn von double in uint8 (nicht, wenn sie von einer anderen Art in uint8 Umwandlung) Umwandlung, es in einem @double benannten Ordner setzen in Ihrem Pfad.

function y = uint8(x) 
y = builtin('uint8', x); 
if any(x(:)>255) || any(x(:)<0) 
    warning('MATLAB:castTruncation', 'Values truncated during conversion to uint8') 
end 

Die Warnung ist standardmäßig aktiviert. Sie können es mit den Befehlen warning('on','MATLAB:castTruncation') und warning('off','MATLAB:castTruncation') ein- oder ausschalten (danke an CitizenInsane für den Vorschlag).

+0

Clever. Sehr schlau. –

+3

Wenn Sie der Warnung einen Bezeichner hinzufügen, wird diese vorübergehend deaktiviert (natürlich mit Absicht). – CitizenInsane

+1

@CitizenInsane Danke für den Vorschlag. Ich habe hinzugefügt, dass –

Verwandte Themen