4 Stimmen

Wie zeichnet man individuell farbige Vektoren über einem Hintergrundbild in MATLAB?

Ich habe ein Hintergrundbild und ein Vektorfeld mit individuellen Farbinformationen für jeden Vektor, die ich über dem Hintergrundbild plotten möchte:

% Zufälliges Hintergrundbild
Image = rand(100,200);
% Zufällige Farben
color1 = rand(30,30);
color2 = rand(30,30);
color3 = rand(30,30);
% Positionen
x = 31:60;
y = 31:60;
[X,Y] = meshgrid(x,y);
% Zufällige Vektoren
DX = 10 * rand(30,30);
DY = 20 * rand(30,30);
% Der Vektor bei (X(i,j),Y(i,j)) soll die RGB-Farbe [color1(i,j) color2(i,j) color3(i,j)] haben

% Einheitlich gefärbtes Vektorfeld - funktioniert gut
imshow(Image);
hold on;
quiver(X,Y,DX,DY,'color',[0.5 0.75 1]);

% Was ich gerne hätte - funktioniert nicht
imshow(Image);
hold on;
quiver(X(:),Y(:),DX(:),DY(:),'color',[color1(:) color2(:) color3(:)]);

Ein einfacher for-Loop führt zu einer Auslöschung des Hintergrundbildes, wie in folgendem Link festgestellt wurde: Bild wird allmählich gelöscht, wenn es mit Linien überlagert wird, zumindest für die Matlab-Version R2012b (8.0.0.783).

Irgendwelche Ideen?

0voto

Leporello Punkte 648

Das erste Problem, das ich mit deinem Code habe, ist

color1 = rand(30,30);
color2 = rand(30,30);
color3 = rand(30,30);
(...)
quiver(X,Y,DX,DY,'color',[color1 color2 color3]);

Selbst wenn quiver mehrere Farben akzeptieren kann (mehr dazu weiter unten), ist das letzte Argument, das du übergibst, ein 30x90 Array. Ich sehe nicht, wie von MATLAB erwartet werden kann, dass es diese in drei 30x30 Arrays (Rot, Grün, Blau) aufteilen soll. Normalerweise wird Farbdaten als RGB-Matrix übergeben, indem man einen _N_x3 Vektor für N Punkte angibt.

Was wichtiger ist, ich würde nicht erwarten, dass quiver mehrere Farbargumente akzeptieren kann (Ich kann es gerade nicht testen.) Sieh dir seine Eigenschaften-Seite an, insbesondere den "Farbe"-Tab, und vergleiche ihn mit dem gleichen für die "Cdata" von scatter Eigenschaften.

Ich sehe keine richtige Lösung für das Problem, da unten die offensichtliche Unfähigkeit in Matlab steht, Vektoren unterschiedlicher Farben mit demselben Aufruf zu plotten. Wenn es für dich ausreicht, die Vektoren in einheitlicher Farbe zu plotten und an den Startpunkten von ihnen ein scatter mit verschiedenen Farben hinzuzufügen, dann mach es... Ansonsten würde ich mir den Quellcode von diesem ansehen: Es macht nicht das, was du willst, aber vielleicht kann es angepasst werden.

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