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

Bild einlesen und ausgeben

 

hallo
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2008, 10:50     Titel: Bild einlesen und ausgeben
  Antworten mit Zitat      
Hallo! habe eine Frage zum Bildverarbeitung. ich habe eine einfach Programm geschrieben, um eine Bild im Matlab einzulesen und wieder auszugeben.

% Bild test %

Bild1=imread('foto1.BMP');

image(Bild);

das Programm hat funktioniert. weil ich später mit dem Bild arbeiten möchte, muss ich ncoh vor "Imread" noch eine "Double" stehen lassen.

Bild1=double(imread('foto1.BMP'));

dann statt " 480*640*3uint8 " bekomme ich eine " 480*640*3 double ", als ich noch mal

Image(Bild1)

laufen lassen, bekomme ich eine Fehlermeldung :

TrueColor CData contains element out of range 0.0 <= value <= 1.0.

??? habe ich nicht verstanden, warum? und sobald ich die "Double" weglasse, ist auch diese Fehler sofort weg!! und ich habe auch geprüft, die Werte im " 480*640*3uint8 " und " 480*640*3 double " scheint identisch zu sein! ist das richtig?
und ich habe auch versucht mit Befehl "Colormap(gray(256))" auf das Foto zu beeinflussen, hat aber nicht funktioniert. hat jemand die selbe Problem wie ich?
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 17.04.2008, 11:58     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe nicht ganz was dein Ziel ist, dass du die Matrix umwandeln musst.
Ich verwende zum Anzeigen von Bildern immer imshow(), welches mir bei deinem Beispiel keinen Fehler ausgibt, sondern ein weißes Bild.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
hallo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2008, 12:38     Titel:
  Antworten mit Zitat      
hai!
ich habe eigentlich vor, eim bestimmt Bereich von Bild auszuschneiden, un dann bearbeiten, z.B. Farbeänderung, Umfang ausrechnen.....oder auf eine bestimmte Punkt von Bild zuzugreifen.

deswegen habe ich gedacht, dass bevor ich das machen darf, soll ich zuerst das Bild im double Format umwandeln. Weil mit "Bild1=imread('foto1.BMP');" bekomme ich eine uint8 Format, von ein paar Bücher habe ich gelesen, dass man diese Schritt machen muss. oder?

mfg
yang
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.04.2008, 12:45     Titel:
  Antworten mit Zitat      
Tja, genau beim Umwandeln passiert bei dir ein Fehler.
Farbdaten müssen in double zwischen 0 und 1 liegen.
Das heißt , wenn du double(imread('foto1.BMP')) anwendest, erhälst du zwar Doublewerte, die deutlich größer als 1 sind (z.B. Wert 128 in uint8 wird in double 128.0).

Also muss du noch noch zusätzlich die Werte in Bereich zwischen 0..1 umrechnen, das erreichst du, wenn du alle Bildwerte durch maximalen Wert in uint8 teilst (das wäre bei 2^8=256)

Code:

Bild1=double(imread('foto1.BMP'))/256;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
hallo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2008, 13:21     Titel:
  Antworten mit Zitat      
Jo!!!alles klar!

danke schön!!

und ich habe auch andere Lösung hier:

Bild1=double(imread('foto1.BMP'));
image(mat2gray(bild1));


und denny, weißt du , welche Vorteil habe ich dadurch, wenn ich die wert alles zwischen 0 und 1 liegen habe? darf ich einfach unter "nint8-format" mit dem Bild weiter bearbeiten(z.B ein Teil ausschneiden oder Farbeänderung..) ?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.04.2008, 14:57     Titel:
  Antworten mit Zitat      
Zitat:

und denny, weißt du , welche Vorteil habe ich dadurch, wenn ich die wert alles zwischen 0 und 1 liegen habe?

Ich vermute es liegt einfach an Farbraum das Matlab für Darstellung von Farbe nutzt.
So geben Integer-Werte RGB-Bereich an.
Während double-Werte geben HSV-Bereich an.

Apropos hab grade herausgefunden, so geht es auch Integer-Bildpixel in Double-Bildpixel umzurechnen:
Code:

RGB = imread('peppers.png');
HSV = rgb2hsv(RGB);
 

Zitat:

darf ich einfach unter "nint8-format" mit dem Bild weiter bearbeiten(z.B ein Teil ausschneiden oder Farbeänderung..) ?

Die Integer-Werte sind grundsätzlich leichter zu handhaben. Auch Arbeit in RGB-Raum ist deutlich einfacher.
Deswegen spricht nichts dagegen, wenn man es auch tut .
Private Nachricht senden Benutzer-Profile anzeigen
 
hallo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2008, 15:56     Titel:
  Antworten mit Zitat      
so! besten Dank!! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
hallo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2008, 13:00     Titel:
  Antworten mit Zitat      
steve hat Folgendes geschrieben:
Hallo,

ich verstehe nicht ganz was dein Ziel ist, dass du die Matrix umwandeln musst.
Ich verwende zum Anzeigen von Bildern immer imshow(), welches mir bei deinem Beispiel keinen Fehler ausgibt, sondern ein weißes Bild.

Gruß
Alex


hai! Alex , habe ich endlich ausgefunden, warum es so ist.
weil image arbeitet nur zwischen 0 und 1. aber imshow arbeitet zwischen0 bis 255. meine Fehler war, dass ich bei Benutzung von "Image" eine Wert von 0 bis 255 habe, das ist natürlic falsch. und bei dir, weil du "imshow" nehmst, das ist natürlich eine Weißbild, weil die alle auf 255 steht, und wenn man "imshow(bild/256)" schreibt, bekomme ich schon eine richtig bild, und deshalb ist bei dir keine Fehler ausgekommen.
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 - 2024 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.