WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Imshow Schwellwert double Format, andere Farbe als schwarz

 

Zool
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 25.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2013, 13:27     Titel: Imshow Schwellwert double Format, andere Farbe als schwarz
  Antworten mit Zitat      
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
 


Vielen Dank für eure Ideen!
Zool
Private Nachricht senden Benutzer-Profile anzeigen


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 07.11.2013, 14:25     Titel:
  Antworten mit Zitat      
Moin,

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 !?

Viele grüße - Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 10.11.2013, 11:01     Titel:
  Antworten mit Zitat      
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.

Einen schönen Sonntag - Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Zool
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 25.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2013, 15:11     Titel:
  Antworten mit Zitat      
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,[1 1 3]); % 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! Very Happy

Code:

thresholded_Img = (I> 0.4);  % I ist im double format
farbe            = repmat(I,[1 1 3]); % 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!
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 10.11.2013, 18:18     Titel:
  Antworten mit Zitat      
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:

Code:
I=im2double(imread('cameraman.tif'));
figure; imshow(I)
I2=repmat(I,[1 1 3]);
R=I2(:,:,1);
ind=(R>0) & (R<0.4);
Y=R;
Y(ind)=1;
G=I2(:,:,2);
B=I2(:,:,3);
RGB=cat(3,Y,G,B);
figure; imshow(RGB)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.