Plot inverse Farben in Matlab?
Ich bin Plotten auf einem Bild in Matlab. Manchmal kann ich nicht sehen, was gezeichnet werden, weil die Farbe von dem Bild darunter ist zu nah an der Farbe des Bildes an der gleichen Stelle. Ich konnte nur immer die Farbe ändern, die von der Handlung (z.B. von 'rx' auf 'bx'), aber das ist umständlich.
Ist es möglich, um eine Darstellung der inverse Farbe, was darunter ist, so dass das overlay ist immer sichtbar?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, es ist nicht möglich, um automatisch die Farben invertieren der plot basiert auf Hintergrundbild. Sie können sich wahrscheinlich Rastern der plot und irgendwie kombinieren Sie es mit dem Bild (xor?).
Hier ist eine andere Lösung.
Wenn Sie mit geschlossenen Marker, wie Kreis, Quadrat, Dreieck, können Sie verschiedene MarkerEdgeColor und MarkerFaceColor, so dass die Markierung sichtbar sein wird gegen verschiedenen Farben.
Ist dies möglich.
Vorausgesetzt, Sie wissen, was Ihr Bild wird wie, können Sie Folgendes tun:
Lesen Sie die Farbe bei den Koordinaten, über die Sie die Handlung
Invertieren die Farbe
Verwenden scatter
%# load rgb-Farb-Bild - das ist vielleicht nicht das beste Beispiel, denn es ist alles so dunkel.
X = double(imread('ngc6543a.jpg'))/255;
% # , da es ein Recht dunkles Bild, invertieren die Hälfte
X(:,1:floor(size(X,2)/2),:) = 1-X(:,1:floor(size(X,2)/2),:);
%# erstellen der plot-Daten
plotX = rand(50,1) * size(X,1);
plotY = rand(50,1) * size(X,2);
%# Lesen RGB-Komponenten (es muss möglich sein, dies zu tun mehr effizient, aber ich sehe nicht,
%# es jetzt
plotColors = zeros(length(plotX),3);
für c = 1:3
plotColors(:,c) = interp2(X(:,:,c),plotY,plotX);
Ende
%# invert
plotColors = 1-plotColors;
% # , Wenn Sie wollen hoch in verschiedenen Farben, und vermeiden Sie das problem, dass Grau ist die inverse
%# zu Grau, Sie könnte verwenden
%# plotColors = Runde(1-plotColors);
%# Dies gibt Ihnen die Wahl wrgbcmyk, je nachdem, was am weitesten von dem Bild Farbe
%# plot
figure,imshow(X)
halten
scatter(plotY,plotX,[],plotColors)
Edit: das wurde jetzt getestet und es sollte funktionieren.
Edit2: invertierender die Hälfte der ursprünglichen Bild macht es klarer, wie das funktioniert
Edit3: integriert eine modifizierte form von gnovice Vorschlag
Edit4: der Fehler wie bereits von der AB
Es gibt keine automatische Möglichkeit, die ich kenne haben Ihre gezeichneten Punkte ändern Farbe, die basierend auf der Farbe des pixels hinter Ihnen. Beachten Sie, dass Sie nicht haben nur die acht vordefinierte Farbspezifikationen (z.B. " r "für rot oder" b " für blau). Sie könnten wählen Sie eine RGB-Farbe, die Spezifikation für Ihre gezeichneten Punkte, dass ist nicht üblich in Ihrem zugrunde liegenden Bild. Zum Beispiel:
Könnten Sie programmgesteuert finden Sie das kleinste gemeinsame Farbe mit einigen einfachen code, der wählt die am wenigsten Häufig verwendeten Farbwerte in einem Bild. Hier ein Beispiel:
Dem obigen code wird zuerst formt die Bild-Daten in ein M-von-3-matrix, wobei M die Anzahl der Pixel im Bild, und die drei Spalten enthalten die rot -, grün-und blau-Werte, beziehungsweise. Eine Gruppierung der Werte erfolgt für jede Spalte mit HIST, dann wird der Wert mit der kleinsten bin (d.h. die niedrigste Frequenz) ist man für jede Spalte. Diese drei Werte werden zu den RGB-triple für die Handlung Farbe. Wenn das Bild ist überlagert von zufälligen Punkte dieser Farbe, gibt es die folgenden plot:
Beachten Sie in diesem Fall, dass der obige code wählt eine helle Blaue Farbe für den plot-Punkte, die passiert zu sein eine Farbe erscheinen nicht in der Bild und somit einen guten Kontrast.
Dies ist sehr einfach und sieht ziemlich nett, wenn Sie brauchen, um plot verstreut Punkte:
Wenn Sie etwas komplizierter ist, mir einen Kommentar hinterlassen.