Verfasst am: 07.11.2013, 13:27
Titel: Imshow Schwellwert double Format, andere Farbe als schwarz
Hallo,
ich erstelle Images im double Format und filtere Strukturen mit einer Threshold. Diese kann ich mit imshow darstellen. Alles unter der Threshold wird weiß, alles darüber wird schwarz angezeigt. Soweit so gut...
Wie stelle ich das schwarze nun rot (oder in einer anderen Farbe) dar? Ich möchte gerne mit dem double Format weiterarbeiten...bekomme ich leider nicht hin...
Code:
thresholded_Img = (I > 0.4)% I ist im double Format! imshow(thresholded_Img) % alles über 0.4 bitte in rot und nicht in schwarz anzeigen
ich würde zunächst einmal mit repmat aus m*n gleich m*n*3 machen, damit Farben nach Vorgaben erstellt werden können. Und dann indizierst du die Werte zwischen 0 und 0.4 im Rotkanal auf 1.
Was ich nicht verstehe ist, dass alles unter dem Schwellwert als weiß dargestellt wird. Schwarz liegt immer bei 0 !?
Konntest du etwas mit der Antwort anfangen oder hilft dir ein Codebeispiel weiter. Wir haben hier immer das Problem, ob wir anderen "die Arbeit oder Aufgabenstellung abnehmen" oder die Antworten so abstrakt sind, dass gleich vor Rückfragen kapituliert wird. Mich würde es daher interessieren, ob du das Problem lösen konntest.
Hallo Hubertus,
sorry für die späte Antwort! Ja es hat mir bedingt geholfen. Ich schaffe es, ein rotes Bild mit den gleichen Maßen wie das Ausgangsbild zu erzeugen. Wenn ich das über das ursprüngliche Bild lege, dann wird auf einmal der gesamte Hintergrund rot und nicht nur die "schwarzen Bereiche". Wie genau kann ich dem roten Kanal sagen, dass er überall dort wo I > 0.4 ist, rot sein soll und in allen anderen Pixeln das ursprüngliche Bild sein soll. Mit Transparenz bekomme ich es nicht hin.
Hier mein bisher Ergrübeltes:
Code:
thresholded_Img = (I> 0.4); % I ist im double format
farbe = repmat(I,[113]); % Rotes Bild mit der Dimension von I erzeugen
rot = farbe(:,:,1);
rot(:,:,1) = 1;
rot(:,:,2) = 0;
rot(:,:,3) = 0;
imshow(I) hold on
h = imshow(rot)% rotes Bild hold off
set(h, 'AlphaData', thresholded_Img)% Transparenz
Das Ergebnis ist: Ein roter Hintergrund und schwarze Elemente mit den Pixeln des Originalbildes (I) über dem Schwellwert. Ich möchte es genau umgekehrt haben. Das originale Bild soll Hintergrund sein und die schwarzen Elemente sollen rot sein.
Vielen Dank nochmals!
Grüße,
Zool
P.S. Etwa 3 Sekunden nachdem ich das abgeschickt hatte, kam mir eine simple Idee...sie funktioniert!
Code:
thresholded_Img = (I> 0.4); % I ist im double format
farbe = repmat(I,[113]); % Rotes Bild mit der Dimension von I erzeugen
rot = farbe(:,:,1);
rot(:,:,1) = 1;
rot(:,:,2) = 0;
rot(:,:,3) = 0;
imshow([b]rot[/b])% rot gegen I tauschen hold on
h = imshow([b]I[/b])% I gegen rot tauschen hold off
set(h, 'AlphaData', thresholded_Img)% Transparenz
Einfach die beiden Bilder tauschen (fett markiert). Es kann so einfach sein...trotzdem vielen Dank Hubertus! Das mit repmat hats gebracht!
Ebenfalls einen schönen Sonntag!
Es freut mich, dass du dir selber helfen konntest und dich noch einmal gemeldet hast. Matlab kennt sehr oft unterschiedliche Lösungsansätze. Zum Vergleich hier noch eine Alternative:
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.